Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • aguestuser/android-components
  • sysrqb/android-components
  • acat/android-components
  • gk/android-components
  • gaba/android-components
  • boklm/android-components
  • ma1/android-components
  • morgan/android-components
  • t-m-w/android-components
  • cypherpunks1/android-components
  • dan/android-components
11 results
Show changes
Commits on Source (12)
Showing
with 114 additions and 30 deletions
...@@ -106,7 +106,13 @@ subprojects { ...@@ -106,7 +106,13 @@ subprojects {
rename { 'manifest.json' } rename { 'manifest.json' }
into extDir into extDir
def values = ['version': rootProject.ext.config.componentsVersion + "." + new Date().format('MMddHHmmss')] def systemEnvBuildDate = System.getenv('MOZ_BUILD_DATE')
// MOZ_BUILD_DATE is in the YYYYMMDDHHMMSS format. Thus, we only use a
// substring of it if it is available.
def values = ['version': rootProject.ext.config.componentsVersion + "." +
(systemEnvBuildDate != null ?
systemEnvBuildDate.substring(4) :
new Date().format('MMddHHmmss'))]
inputs.properties(values) inputs.properties(values)
expand(values) expand(values)
} }
......
...@@ -634,6 +634,22 @@ class GeckoEngine( ...@@ -634,6 +634,22 @@ class GeckoEngine(
override var enterpriseRootsEnabled: Boolean override var enterpriseRootsEnabled: Boolean
get() = runtime.settings.enterpriseRootsEnabled get() = runtime.settings.enterpriseRootsEnabled
set(value) { runtime.settings.enterpriseRootsEnabled = value } set(value) { runtime.settings.enterpriseRootsEnabled = value }
override var torSecurityLevel: Int
get() = runtime.settings.torSecurityLevel
set(value) {
value.let {
runtime.settings.torSecurityLevel = it
}
}
override var spoofEnglish: Boolean
get() = runtime.settings.spoofEnglish
set(value) {
value.let {
runtime.settings.spoofEnglish = it
localeUpdater.updateValue()
}
}
}.apply { }.apply {
defaultSettings?.let { defaultSettings?.let {
this.javascriptEnabled = it.javascriptEnabled this.javascriptEnabled = it.javascriptEnabled
...@@ -652,6 +668,8 @@ class GeckoEngine( ...@@ -652,6 +668,8 @@ class GeckoEngine(
this.clearColor = it.clearColor this.clearColor = it.clearColor
this.loginAutofillEnabled = it.loginAutofillEnabled this.loginAutofillEnabled = it.loginAutofillEnabled
this.enterpriseRootsEnabled = it.enterpriseRootsEnabled this.enterpriseRootsEnabled = it.enterpriseRootsEnabled
this.torSecurityLevel = it.torSecurityLevel
this.spoofEnglish = it.spoofEnglish
} }
} }
......
...@@ -88,6 +88,7 @@ private fun Request.toWebRequest(): WebRequest = WebRequest.Builder(url) ...@@ -88,6 +88,7 @@ private fun Request.toWebRequest(): WebRequest = WebRequest.Builder(url)
.addHeadersFrom(this) .addHeadersFrom(this)
.addBodyFrom(this) .addBodyFrom(this)
.cacheMode(if (useCaches) CACHE_MODE_DEFAULT else CACHE_MODE_RELOAD) .cacheMode(if (useCaches) CACHE_MODE_DEFAULT else CACHE_MODE_RELOAD)
.origin(origin)
.build() .build()
private fun WebRequest.Builder.addHeadersFrom(request: Request): WebRequest.Builder { private fun WebRequest.Builder.addHeadersFrom(request: Request): WebRequest.Builder {
......
...@@ -52,7 +52,8 @@ class HttpIconLoader( ...@@ -52,7 +52,8 @@ class HttpIconLoader(
connectTimeout = Pair(CONNECT_TIMEOUT, TimeUnit.SECONDS), connectTimeout = Pair(CONNECT_TIMEOUT, TimeUnit.SECONDS),
readTimeout = Pair(READ_TIMEOUT, TimeUnit.SECONDS), readTimeout = Pair(READ_TIMEOUT, TimeUnit.SECONDS),
redirect = Request.Redirect.FOLLOW, redirect = Request.Redirect.FOLLOW,
useCaches = true) useCaches = true,
origin = request.url)
return try { return try {
val response = httpClient.fetch(downloadRequest) val response = httpClient.fetch(downloadRequest)
......
...@@ -9,7 +9,6 @@ import androidx.annotation.ColorRes ...@@ -9,7 +9,6 @@ import androidx.annotation.ColorRes
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import mozilla.components.browser.menu.item.BackPressMenuItem import mozilla.components.browser.menu.item.BackPressMenuItem
import mozilla.components.browser.menu.item.BrowserMenuDivider import mozilla.components.browser.menu.item.BrowserMenuDivider
import mozilla.components.browser.menu.item.BrowserMenuImageText
import mozilla.components.browser.menu.item.NO_ID import mozilla.components.browser.menu.item.NO_ID
import mozilla.components.browser.menu.item.ParentBrowserMenuItem import mozilla.components.browser.menu.item.ParentBrowserMenuItem
import mozilla.components.browser.menu.item.WebExtensionPlaceholderMenuItem import mozilla.components.browser.menu.item.WebExtensionPlaceholderMenuItem
...@@ -71,20 +70,10 @@ class WebExtensionBrowserMenuBuilder( ...@@ -71,20 +70,10 @@ class WebExtensionBrowserMenuBuilder(
iconTintColorResource = style.webExtIconTintColorResource iconTintColorResource = style.webExtIconTintColorResource
) )
val addonsManagerMenuItem = BrowserMenuImageText(
label = context.getString(R.string.mozac_browser_menu_addons_manager),
imageResource = style.addonsManagerMenuItemDrawableRes,
iconTintColorResource = style.webExtIconTintColorResource
) {
onAddonsManagerTapped.invoke()
}
val webExtSubMenuItems = if (appendExtensionSubMenuAtStart) { val webExtSubMenuItems = if (appendExtensionSubMenuAtStart) {
listOf(backPressMenuItem) + BrowserMenuDivider() + listOf(backPressMenuItem) + BrowserMenuDivider() +
filteredExtensionMenuItems + filteredExtensionMenuItems
BrowserMenuDivider() + addonsManagerMenuItem
} else { } else {
listOf(addonsManagerMenuItem) + BrowserMenuDivider() +
filteredExtensionMenuItems + filteredExtensionMenuItems +
BrowserMenuDivider() + backPressMenuItem BrowserMenuDivider() + backPressMenuItem
} }
...@@ -100,13 +89,7 @@ class WebExtensionBrowserMenuBuilder( ...@@ -100,13 +89,7 @@ class WebExtensionBrowserMenuBuilder(
endOfMenuAlwaysVisible = endOfMenuAlwaysVisible endOfMenuAlwaysVisible = endOfMenuAlwaysVisible
) )
} else { } else {
BrowserMenuImageText( null
label = context.getString(R.string.mozac_browser_menu_addons),
imageResource = style.addonsManagerMenuItemDrawableRes,
iconTintColorResource = style.webExtIconTintColorResource
) {
onAddonsManagerTapped.invoke()
}
} }
val mainMenuIndex = finalList.indexOfFirst { browserMenuItem -> val mainMenuIndex = finalList.indexOfFirst { browserMenuItem ->
...@@ -114,12 +97,14 @@ class WebExtensionBrowserMenuBuilder( ...@@ -114,12 +97,14 @@ class WebExtensionBrowserMenuBuilder(
WebExtensionPlaceholderMenuItem.MAIN_EXTENSIONS_MENU_ID WebExtensionPlaceholderMenuItem.MAIN_EXTENSIONS_MENU_ID
} }
val menuItems = if (mainMenuIndex != -1) { val menuItems = if (mainMenuIndex != -1 && webExtMenuItem != null) {
finalList[mainMenuIndex] = webExtMenuItem finalList[mainMenuIndex] = webExtMenuItem
finalList finalList
// if we do not have a placeholder we should add the extension submenu at top or bottom // if we do not have a placeholder we should add the extension submenu at top or bottom
} else { } else {
if (appendExtensionSubMenuAtStart) { if (webExtMenuItem == null) {
finalList
} else if (appendExtensionSubMenuAtStart) {
listOf(webExtMenuItem) + finalList listOf(webExtMenuItem) + finalList
} else { } else {
finalList + webExtMenuItem finalList + webExtMenuItem
......
<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
<ShortName>DuckDuckGoOnion</ShortName>
<Description>Duck Duck Go Onion</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image height="16" width="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB8lBMVEUAAADkRQzjPwPjQQXkRQ3iPwTiQQXgPQPeQgrcOwPVNgDVNQDWOgbTMwDRMgDQMwDSMwDRNwTQLgDRJgDSJwDSLgDSNwTjOgDiOADjOQDkPADhQAXzs5v+/fv////0vKbiRQvgPQHpdUr85NzuknPdKgDcIwDnZzj2w7HqeU/gPQLsimb/+PftjWn97Obpb0LdJQDeLQDtjmvsi2jgSBDnbULgOQD/39HgLQDeMgDpeFLgSBH0v670uqbaJQD2qImWvP/G1Ob5+/3u//+fvvXyp47dMwDaLwD0u6v0v6/aNQDiXi/aKQD3qozU7/8gSY2vvtg0ZK/OqLDaKQHYKgLgWTfaNADZMgDZMADZLADzqpD7//+xwdz//9H/5Bn/7Bn//ADofADYMADYMQDZOgPXLgDiZDj//97/0AD3tQDvlgHZOgbXLATXMADWMgDfXjLVLQD///z+0AD/3Rn/yRnwnQDcVjbVMQDyv67wuKTSJwDRHQD+8O/tg3/iQQDwhAHnawHWMADvtKfyva7XQxHga0bQGQD2vbH/u8LXIQCmPQzja07XQxLliGn99fPkcVHvhnGZ5VguvUU5wktBwCcAgxzydVv/8/XmiGngdlL+ysi3+I8LtCE80V6P3YmX4sDleljSNQLzr6D7sKPXNQTSIwAEAbMrAAAAF3RSTlMARqSkRvPz80PTpKRG3fPe3hio9/eoGP50jNsAAAABYktHRB5yCiArAAAAyElEQVQYGQXBvUqCYRiA4fu2V9Tn+UQddI3aCpxaOoU6iU4gcqqpoYbALXBuCuoYmttamqJDiEoh4YP+MOi6BNCh+uYKEGiOVNCXXxA2XDVV/UyfKbRCXTLQWAxbP2vt8Ue/uYDvfim91615sb2um6rqtrr/NFb1cUf1Ybd06areU6lSlYpK79jzK1SyJOkfhOl8JGEcqV5zoKrTRqO6yUzIzNu46ijdM1VV9bhuUJ/nZURExLRzUiPQm3kKXHi4BAEGOmOi78A/L1QoU/VHoTsAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTQtMDEtMTlUMjA6MDE6MTEtMDU6MDAuET6cAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTAxLTE5VDIwOjAxOjExLTA1OjAwX0yGIAAAAABJRU5ErkJggg==</Image>
<Url type="text/html" method="POST" template="https://3g2upl4pq6kufc4m.onion">
<Param name="q" value="{searchTerms}"/>
</Url>
<SearchForm>https://3g2upl4pq6kufc4m.onion</SearchForm>
</SearchPlugin>
<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
<ShortName>Startpage</ShortName>
<Description>Start Page</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">data:image/png;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2jkj+9YtD/vWLQ/71i0P+9otD/vaLRP72i0T+9YtE/vWLRP72i0T+9otD/vaNRP72jUT+9otF/vaLRf73kkv+9Yc///WJP//1iT//9Yk///rAmf/94Mz/+sCa//aRTv/1iUH/9ok///aJP//2i0H/9otB//aJQv/2iUL/9otC//aNRP/2jUT/9o1E//aNRP/6wpv////////////96dr/95dQ//aNRP/2kET/9pBG//aQRv/2kEb/9pBG//aRR//3lEz/95BH//mueP/7xJ3/959g//efYf/4p23//vDm//3p2//3kEr/95FJ//aRSf/niFH/95FK//aRSv/2mE//95hS/vq4iP/////////////////81bj/95xZ//q4iP//////+bF+//eZT//njFT/PSqi/2xGjv/2mVD/951V/vedVv783cX///////vQrf/++PP///////748//+8uj///////m3gf/olFr/PSuj/w8Pt/9sSJD/951V//eeWf73oVv++8ul///////5sXf/+KRi//vRsf////////////3r3v/olF//Piyk/w8Pt/9sSJH/+J5Z//ieWv/3oV/++KZf/vihXP/97N7//vn0//zTs//6wJP/+bBy//q6iP/onW//Piyl/w8Pt/8fGbH/m2iB/+icY//4pGD/96hl/viqZf74pmD/+Kxr//3iy/////////n1//ivbP/onGj/Pi2m/w8Pt/8uJKz/fFeQ/x8Zsf8+Lqb/6J9r//ivbP74rm3++Klm//mpZv/5q2f/+bR9//m0e//poW7/Pi6n/w8Pt/9sTZj/+Ktp//ira/+rd4P/Dw+3/4xijv/5snH++LN1/vmvbf/5r23/+a5t//mvb//4r2//TTuk/w8Pt/8fGrL/6ah1//ivcP/4r3P/q3yI/w8Pt/+MZpP/+bN5/vm4ev75t3X/+bV1//m1df/5t3X/+Ld3/8qUhP98XZn/Hxqz/+mse//5t3f/2p+B/x8as/8PD7f/u4qK//m7fv76u4D++bl7//m3fP/5uXz/+bl8//m5fP/5t3z/+bl//x8as/9NPKf/fWCb/x8as/8PD7f/bVOh//q5f//6v4X++sGI/vm9g//5voX/+b6F//m9hf/6vYX/+r6F//nCh/+bepr/Hxu0/w8Pt/8PD7f/fWOh//q+hf/6wof/+saN/vrGjf75xIv/+ceL//nEi//5xIv/+sSL//rHi//6x43/+ceN/+m7kP+7lpj/6ruQ//rHkP/6x43/+seQ//rLlf76ypT++seR//rJkf/6yZH/+seR//rJkf/6yZH/+8mR//vJlP/7yZT/+smU//rJlP/6yZT/+8yV//rJlf/6zpn+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</Image>
<Url type="text/html" method="POST" template="https://startpage.com/rto/search">
<Param name="q" value="{searchTerms}"/>
</Url>
<SearchForm>https://startpage.com/rto/search/</SearchForm>
</SearchPlugin>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
<ShortName>Yahoo</ShortName>
<Description>Yahoo Search</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">data:image/png;base64,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</Image>
<Url type="application/x-suggestions+json" method="GET"
template="https://search.yahoo.com/sugg/ff">
<Param name="output" value="fxjson" />
<Param name="appid" value="ffd" />
<Param name="command" value="{searchTerms}" />
</Url>
<Url type="text/html" method="GET" template="https://search.yahoo.com/yhs/search"
resultdomain="yahoo.com" rel="searchform">
<Param name="p" value="{searchTerms}"/>
<Param name="ei" value="UTF-8"/>
<Param name="hspart" value="mozilla"/>
</Url>
</SearchPlugin>
...@@ -499,6 +499,7 @@ class DisplayToolbar internal constructor( ...@@ -499,6 +499,7 @@ class DisplayToolbar internal constructor(
@ColorInt val color = when (siteSecurity) { @ColorInt val color = when (siteSecurity) {
Toolbar.SiteSecurity.INSECURE -> colors.securityIconInsecure Toolbar.SiteSecurity.INSECURE -> colors.securityIconInsecure
Toolbar.SiteSecurity.SECURE -> colors.securityIconSecure Toolbar.SiteSecurity.SECURE -> colors.securityIconSecure
Toolbar.SiteSecurity.ONION -> colors.securityIconSecure
} }
if (color == Color.TRANSPARENT) { if (color == Color.TRANSPARENT) {
views.securityIndicator.clearColorFilter() views.securityIndicator.clearColorFilter()
......
...@@ -43,6 +43,11 @@ internal class SiteSecurityIconView @JvmOverloads constructor( ...@@ -43,6 +43,11 @@ internal class SiteSecurityIconView @JvmOverloads constructor(
View.mergeDrawableStates(drawableState, intArrayOf(R.attr.state_site_secure)) View.mergeDrawableStates(drawableState, intArrayOf(R.attr.state_site_secure))
drawableState drawableState
} }
SiteSecurity.ONION -> {
val drawableState = super.onCreateDrawableState(extraSpace + 1)
View.mergeDrawableStates(drawableState, intArrayOf(R.attr.state_site_onion))
drawableState
}
} }
} }
} }
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
- License, v. 2.0. If a copy of the MPL was not distributed with this - License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ac="http://schemas.android.com/apk/res-auto"> <selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ac="http://schemas.android.com/apk/res-auto">
<item
android:drawable="@drawable/mozac_ic_onion"
ac:state_site_onion="true" />
<item <item
android:drawable="@drawable/mozac_ic_lock" android:drawable="@drawable/mozac_ic_lock"
ac:state_site_secure="true" /> ac:state_site_secure="true" />
......
...@@ -27,6 +27,10 @@ ...@@ -27,6 +27,10 @@
<attr name="state_site_secure" format="boolean"/> <attr name="state_site_secure" format="boolean"/>
</declare-styleable> </declare-styleable>
<declare-styleable name="BrowserToolbarSiteOnionState">
<attr name="state_site_onion" format="boolean"/>
</declare-styleable>
<declare-styleable name="ActionContainer"> <declare-styleable name="ActionContainer">
<attr name="actionContainerItemSize" format="dimension" /> <attr name="actionContainerItemSize" format="dimension" />
</declare-styleable> </declare-styleable>
......
...@@ -9,6 +9,7 @@ import android.graphics.Bitmap ...@@ -9,6 +9,7 @@ import android.graphics.Bitmap
import androidx.annotation.CallSuper import androidx.annotation.CallSuper
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.CookiePolicy.ACCEPT_ALL import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.CookiePolicy.ACCEPT_ALL
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.CookiePolicy.ACCEPT_NON_TRACKERS import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.CookiePolicy.ACCEPT_NON_TRACKERS
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.CookiePolicy.ACCEPT_ONLY_FIRST_PARTY
import mozilla.components.concept.engine.content.blocking.Tracker import mozilla.components.concept.engine.content.blocking.Tracker
import mozilla.components.concept.engine.history.HistoryItem import mozilla.components.concept.engine.history.HistoryItem
import mozilla.components.concept.engine.manifest.WebAppManifest import mozilla.components.concept.engine.manifest.WebAppManifest
...@@ -384,7 +385,9 @@ abstract class EngineSession( ...@@ -384,7 +385,9 @@ abstract class EngineSession(
companion object { companion object {
fun none() = TrackingProtectionPolicy( fun none() = TrackingProtectionPolicy(
trackingCategories = arrayOf(TrackingCategory.NONE), trackingCategories = arrayOf(TrackingCategory.NONE),
cookiePolicy = ACCEPT_ALL useForPrivateSessions = false,
useForRegularSessions = false,
cookiePolicy = ACCEPT_ONLY_FIRST_PARTY
) )
/** /**
......
...@@ -184,6 +184,13 @@ abstract class Settings { ...@@ -184,6 +184,13 @@ abstract class Settings {
* Setting to control whether enterprise root certs are enabled. * Setting to control whether enterprise root certs are enabled.
*/ */
open var enterpriseRootsEnabled: Boolean by UnsupportedSetting() open var enterpriseRootsEnabled: Boolean by UnsupportedSetting()
/**
* Setting to control the current security level
*/
open var torSecurityLevel: Int by UnsupportedSetting()
open var spoofEnglish: Boolean by UnsupportedSetting()
} }
/** /**
...@@ -220,7 +227,9 @@ data class DefaultSettings( ...@@ -220,7 +227,9 @@ data class DefaultSettings(
override var forceUserScalableContent: Boolean = false, override var forceUserScalableContent: Boolean = false,
override var loginAutofillEnabled: Boolean = false, override var loginAutofillEnabled: Boolean = false,
override var clearColor: Int? = null, override var clearColor: Int? = null,
override var enterpriseRootsEnabled: Boolean = false override var enterpriseRootsEnabled: Boolean = false,
override var torSecurityLevel: Int = 4,
override var spoofEnglish: Boolean = false
) : Settings() ) : Settings()
class UnsupportedSetting<T> { class UnsupportedSetting<T> {
......
...@@ -48,7 +48,8 @@ data class Request( ...@@ -48,7 +48,8 @@ data class Request(
val redirect: Redirect = Redirect.FOLLOW, val redirect: Redirect = Redirect.FOLLOW,
val cookiePolicy: CookiePolicy = CookiePolicy.INCLUDE, val cookiePolicy: CookiePolicy = CookiePolicy.INCLUDE,
val useCaches: Boolean = true, val useCaches: Boolean = true,
val private: Boolean = false val private: Boolean = false,
val origin: String? = null
) { ) {
/** /**
* A [Body] to be send with the [Request]. * A [Body] to be send with the [Request].
......
...@@ -407,6 +407,7 @@ interface Toolbar { ...@@ -407,6 +407,7 @@ interface Toolbar {
enum class SiteSecurity { enum class SiteSecurity {
INSECURE, INSECURE,
SECURE, SECURE,
ONION,
} }
/** /**
......
...@@ -58,7 +58,7 @@ internal const val PAGE_SIZE = 50 ...@@ -58,7 +58,7 @@ internal const val PAGE_SIZE = 50
* cache is being used by default * cache is being used by default
*/ */
@Suppress("LongParameterList") @Suppress("LongParameterList")
class AddonCollectionProvider( open class AddonCollectionProvider(
private val context: Context, private val context: Context,
private val client: Client, private val client: Client,
private val serverURL: String = DEFAULT_SERVER_URL, private val serverURL: String = DEFAULT_SERVER_URL,
...@@ -173,7 +173,7 @@ class AddonCollectionProvider( ...@@ -173,7 +173,7 @@ class AddonCollectionProvider(
* a connectivity problem or a timeout. * a connectivity problem or a timeout.
*/ */
@Throws(IOException::class) @Throws(IOException::class)
suspend fun getAddonIconBitmap(addon: Addon): Bitmap? { open suspend fun getAddonIconBitmap(addon: Addon): Bitmap? {
var bitmap: Bitmap? = null var bitmap: Bitmap? = null
if (addon.iconUrl != "") { if (addon.iconUrl != "") {
client.fetch( client.fetch(
...@@ -191,7 +191,7 @@ class AddonCollectionProvider( ...@@ -191,7 +191,7 @@ class AddonCollectionProvider(
} }
@VisibleForTesting @VisibleForTesting
internal fun writeToDiskCache(collectionResponse: String, language: String?) { protected fun writeToDiskCache(collectionResponse: String, language: String?) {
synchronized(diskCacheLock) { synchronized(diskCacheLock) {
getCacheFile(context, language, useFallbackFile = false).writeString { collectionResponse } getCacheFile(context, language, useFallbackFile = false).writeString { collectionResponse }
} }
......
...@@ -63,6 +63,7 @@ ...@@ -63,6 +63,7 @@
/> />
<androidx.appcompat.widget.AppCompatCheckBox <androidx.appcompat.widget.AppCompatCheckBox
android:visibility="gone"
android:id="@+id/allow_in_private_browsing" android:id="@+id/allow_in_private_browsing"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
......
...@@ -42,6 +42,7 @@ dependencies { ...@@ -42,6 +42,7 @@ dependencies {
implementation Dependencies.kotlin_stdlib implementation Dependencies.kotlin_stdlib
implementation Dependencies.kotlin_coroutines implementation Dependencies.kotlin_coroutines
implementation project(path: ':support-utils')
testImplementation project(':support-test') testImplementation project(':support-test')
testImplementation project(':support-test-libstate') testImplementation project(':support-test-libstate')
......
...@@ -100,7 +100,7 @@ class AppLinksFeature( ...@@ -100,7 +100,7 @@ class AppLinksFeature(
) )
} }
if (!tab.content.private || fragmentManager == null) { if (true || !tab.content.private || fragmentManager == null) {
doOpenApp() doOpenApp()
return return
} }
......