diff --git a/patches/disable-contile.patch b/patches/disable-contile.patch new file mode 100644 index 0000000..e476ee8 --- /dev/null +++ b/patches/disable-contile.patch @@ -0,0 +1,45 @@ +diff --git a/mobile/android/android-components/components/service/mars/src/main/java/mozilla/components/service/mars/contile/ContileTopSitesProvider.kt b/mobile/android/android-components/components/service/mars/src/main/java/mozilla/components/service/mars/contile/ContileTopSitesProvider.kt +index 89230fb4c1..4faeb9ee77 100644 +--- a/mobile/android/android-components/components/service/mars/src/main/java/mozilla/components/service/mars/contile/ContileTopSitesProvider.kt ++++ b/mobile/android/android-components/components/service/mars/src/main/java/mozilla/components/service/mars/contile/ContileTopSitesProvider.kt +@@ -29,8 +29,8 @@ import java.io.File + import java.io.IOException + import java.util.Date + +-internal const val CONTILE_ENDPOINT_URL = "https://contile.services.mozilla.com/v1/tiles" +-internal const val CACHE_FILE_NAME = "mozilla_components_service_contile.json" ++internal const val CONTILE_ENDPOINT_URL = "" ++internal const val CACHE_FILE_NAME = "" + internal const val CACHE_VALID_FOR_KEY = "valid_for" + internal const val CACHE_TOP_SITES_KEY = "tiles" + +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +index 7f19ba4304..28d1db5781 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +@@ -1814,10 +1814,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates if the Contile functionality should be visible. + */ +- var showContileFeature by booleanPreference( +- key = appContext.getPreferenceKey(R.string.pref_key_enable_contile), +- default = true, +- ) ++ var showContileFeature = false + + /** + * Indicates if the Unified Search feature should be visible. +diff --git a/mobile/android/fenix/app/src/main/res/xml/home_preferences.xml b/mobile/android/fenix/app/src/main/res/xml/home_preferences.xml +index 4fd1f8945a..d8586426ab 100644 +--- a/mobile/android/fenix/app/src/main/res/xml/home_preferences.xml ++++ b/mobile/android/fenix/app/src/main/res/xml/home_preferences.xml +@@ -13,7 +13,8 @@ + android:dependency="@string/pref_key_show_top_sites" + android:layout="@layout/checkbox_left_sub_preference" + android:key="@string/pref_key_enable_contile" +- android:title="@string/customize_toggle_contile" /> ++ android:title="@string/customize_toggle_contile" ++ app:isPreferenceVisible="false" /> + + (R.string.pref_key_pocket_content_recommendations).apply { -+ isVisible = false - isChecked = context.settings().showContentRecommendations - onPreferenceChangeListener = object : SharedPreferenceUpdater() { - override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { -@@ -130,7 +131,7 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { - } - - requirePreference(R.string.pref_key_enable_trending_searches).apply { -- isVisible = true -+ isVisible = false - isChecked = context.settings().isTrendingSearchesVisible - onPreferenceChangeListener = SharedPreferenceUpdater() - } -@@ -148,7 +149,7 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { +@@ -148,7 +148,7 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { } requirePreference(R.string.pref_key_enable_fxsuggest).apply { - isVisible = FeatureFlags.FX_SUGGEST -+ isVisible = false ++ isVisible = true isChecked = context.settings().enableFxSuggest onPreferenceChangeListener = object : Preference.OnPreferenceChangeListener { override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 7f19ba4304..1cc301ca1b 100644 +index 7f19ba4304..bde6a5e041 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -1158,10 +1158,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { - * Indicates if the user have enabled trending search in search suggestions. - */ - @VisibleForTesting -- internal var trendingSearchSuggestionsEnabled by booleanPreference( -- appContext.getPreferenceKey(R.string.pref_key_show_trending_search_suggestions), -- default = true, -- ) -+ internal var trendingSearchSuggestionsEnabled = false - - /** - * Indicates if the user have enabled recent search in the search suggestions setting preference. -@@ -1764,11 +1761,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { - /** - * Indicates if Merino content recommendations should be shown. - */ -- var showContentRecommendations by lazyFeatureFlagPreference( -- key = appContext.getPreferenceKey(R.string.pref_key_pocket_content_recommendations), -- default = { FxNimbus.features.merinoRecommendations.value().enabled }, -- featureFlag = ContentRecommendationsFeatureHelper.isContentRecommendationsFeatureEnabled(appContext), -- ) -+ var showContentRecommendations = false - - /** - * Whether or not to display the Pocket sponsored stories parameter secret settings. -@@ -2029,11 +2022,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { - /** - * Indicates if Trending Search Suggestions are enabled. - */ -- var isTrendingSearchesVisible by lazyFeatureFlagPreference( -- key = appContext.getPreferenceKey(R.string.pref_key_enable_trending_searches), -- default = { FxNimbus.features.trendingSearches.value().enabled }, -- featureFlag = true, -- ) -+ var isTrendingSearchesVisible = false - - /** - * Indicates if Recent Search Suggestions are enabled. -@@ -2099,17 +2088,12 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -2099,17 +2099,15 @@ class Settings(private val appContext: Context) : PreferencesHolder { /** * Indicates if Firefox Suggest is enabled. */ - var enableFxSuggest by lazyFeatureFlagPreference( -- key = appContext.getPreferenceKey(R.string.pref_key_enable_fxsuggest), ++ var enableFxSuggest by booleanPreference( + key = appContext.getPreferenceKey(R.string.pref_key_enable_fxsuggest), - default = { FxNimbus.features.fxSuggest.value().enabled }, - featureFlag = FeatureFlags.FX_SUGGEST, -- ) -+ var enableFxSuggest = false ++ default = false, + ) /** * Indicates if boosting AMP/wiki suggestions is enabled. @@ -90,7 +36,7 @@ index 7f19ba4304..1cc301ca1b 100644 /** * Indicates first time engaging with signup -@@ -2123,22 +2107,14 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -2123,21 +2121,16 @@ class Settings(private val appContext: Context) : PreferencesHolder { * Indicates if the user has chosen to show sponsored search suggestions in the awesomebar. * The default value is computed lazily, and based on whether Firefox Suggest is enabled. */ @@ -107,42 +53,19 @@ index 7f19ba4304..1cc301ca1b 100644 * is enabled. */ - var showNonSponsoredSuggestions by lazyFeatureFlagPreference( -- key = appContext.getPreferenceKey(R.string.pref_key_show_nonsponsored_suggestions), ++ var showNonSponsoredSuggestions by booleanPreference( + key = appContext.getPreferenceKey(R.string.pref_key_show_nonsponsored_suggestions), - default = { enableFxSuggest }, - featureFlag = FeatureFlags.FX_SUGGEST, -- ) -+ var showNonSponsoredSuggestions = false ++ default = false, + ) /** - * Indicates that the user does not want warned of a translations diff --git a/mobile/android/fenix/app/src/main/res/xml/search_settings_preferences.xml b/mobile/android/fenix/app/src/main/res/xml/search_settings_preferences.xml -index f7ca109331..0c88b25fb5 100644 +index f7ca109331..1bcf31ac06 100644 --- a/mobile/android/fenix/app/src/main/res/xml/search_settings_preferences.xml +++ b/mobile/android/fenix/app/src/main/res/xml/search_settings_preferences.xml -@@ -38,12 +38,13 @@ - android:title="@string/preferences_show_search_suggestions_in_private" - app:iconSpaceReserved="false" /> - -+ app:iconSpaceReserved="false" -+ app:isPreferenceVisible="false" /> - -+ android:summary="@string/preferences_show_nonsponsored_suggestions_summary" -+ app:isPreferenceVisible="false" /> - -+ android:title="@string/preference_search_learn_about_fx_suggest" -+ app:isPreferenceVisible="false" /> - - - (R.string.pref_key_mars_api_enabled).apply { ++ isVisible = false + isChecked = context.settings().marsAPIEnabled + onPreferenceChangeListener = object : SharedPreferenceUpdater() { + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +index 7f19ba4304..cf15320899 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +@@ -1805,11 +1805,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates if the MARS API integration is used for sponsored content. + */ +- var marsAPIEnabled by lazyFeatureFlagPreference( +- key = appContext.getPreferenceKey(R.string.pref_key_mars_api_enabled), +- default = { FxNimbus.features.mars.value().enabled }, +- featureFlag = true, +- ) ++ var marsAPIEnabled = false + + /** + * Indicates if the Contile functionality should be visible. diff --git a/patches/disable-pocket.patch b/patches/disable-pocket.patch index 085ba02..35b760a 100644 --- a/patches/disable-pocket.patch +++ b/patches/disable-pocket.patch @@ -1,39 +1,3 @@ -diff --git a/mobile/android/android-components/components/service/mars/src/main/java/mozilla/components/service/mars/MarsTopSitesProvider.kt b/mobile/android/android-components/components/service/mars/src/main/java/mozilla/components/service/mars/MarsTopSitesProvider.kt -index b8430171ec..63f92e4dde 100644 ---- a/mobile/android/android-components/components/service/mars/src/main/java/mozilla/components/service/mars/MarsTopSitesProvider.kt -+++ b/mobile/android/android-components/components/service/mars/src/main/java/mozilla/components/service/mars/MarsTopSitesProvider.kt -@@ -29,14 +29,14 @@ import java.io.File - import java.io.IOException - import java.util.Date - --private const val MARS_ENDPOINT_URL = "https://ads.mozilla.org/v1/ads" -+private const val MARS_ENDPOINT_URL = "" - - private const val REQUEST_BODY_CONTEXT_ID_KEY = "context_id" - private const val REQUEST_BODY_PLACEMENTS_KEY = "placements" - private const val REQUEST_BODY_PLACEMENT_KEY = "placement" - private const val REQUEST_BODY_COUNT_KEY = "count" - --internal const val CACHE_FILE_NAME = "mozilla_components_service_mars_tiles.json" -+internal const val CACHE_FILE_NAME = "" - - /** - * Provides access to the MARS API for fetching top sites tile. -diff --git a/mobile/android/android-components/components/service/mars/src/main/java/mozilla/components/service/mars/contile/ContileTopSitesProvider.kt b/mobile/android/android-components/components/service/mars/src/main/java/mozilla/components/service/mars/contile/ContileTopSitesProvider.kt -index 6f1de67d54..5037c18b66 100644 ---- a/mobile/android/android-components/components/service/mars/src/main/java/mozilla/components/service/mars/contile/ContileTopSitesProvider.kt -+++ b/mobile/android/android-components/components/service/mars/src/main/java/mozilla/components/service/mars/contile/ContileTopSitesProvider.kt -@@ -29,8 +29,8 @@ import java.io.File - import java.io.IOException - import java.util.Date - --internal const val CONTILE_ENDPOINT_URL = "https://contile.services.mozilla.com/v1/tiles" --internal const val CACHE_FILE_NAME = "mozilla_components_service_contile.json" -+internal const val CONTILE_ENDPOINT_URL = "" -+internal const val CACHE_FILE_NAME = "" - internal const val CACHE_VALID_FOR_KEY = "valid_for" - internal const val CACHE_TOP_SITES_KEY = "tiles" - diff --git a/mobile/android/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/spocs/api/SpocsEndpointRaw.kt b/mobile/android/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/spocs/api/SpocsEndpointRaw.kt index 81bf2dd7e2..7a43fac926 100644 --- a/mobile/android/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/spocs/api/SpocsEndpointRaw.kt @@ -49,71 +13,19 @@ index 81bf2dd7e2..7a43fac926 100644 private const val SPOCS_ENDPOINT_DOWNLOAD_SPOCS_PATH = "spocs" private const val SPOCS_ENDPOINT_DELETE_PROFILE_PATH = "user" private const val SPOCS_PROXY_VERSION_KEY = "version" -diff --git a/mobile/android/fenix/app/nimbus.fml.yaml b/mobile/android/fenix/app/nimbus.fml.yaml -index 1a47d3dcdf..1af778a12a 100644 ---- a/mobile/android/fenix/app/nimbus.fml.yaml -+++ b/mobile/android/fenix/app/nimbus.fml.yaml -@@ -48,8 +48,8 @@ features: - "jump-back-in": true, - "bookmarks": true, - "recent-explorations": true, -- "pocket": true, -- "pocket-sponsored-stories": true, -+ "pocket": false, -+ "pocket-sponsored-stories": false, - "synced-tabs": true, - } - defaults: -@@ -60,7 +60,7 @@ features: - "jump-back-in": true, - "bookmarks": true, - "recent-explorations": true, -- "pocket": true, -+ "pocket": false, - "synced-tabs": true, - } - } -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt -index 8b96400722..4d1b0a6f88 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt -@@ -34,17 +34,17 @@ object FeatureFlags { - /** - * Show Pocket recommended stories on home. - */ -+ @Suppress("UNUSED_PARAMETER") - fun isPocketRecommendationsFeatureEnabled(context: Context): Boolean { -- val langTag = LocaleManager.getCurrentLocale(context) -- ?.toLanguageTag() ?: getSystemDefault().toLanguageTag() -- return listOf("en-US", "en-CA").contains(langTag) -+ return false - } - - /** - * Show Pocket sponsored stories in between Pocket recommended stories on home. - */ -+ @Suppress("UNUSED_PARAMETER") - fun isPocketSponsoredStoriesFeatureEnabled(context: Context): Boolean { -- return isPocketRecommendationsFeatureEnabled(context) -+ return false - } - - /** diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt -index b74145eb21..042fa13c21 100644 +index 43bea16286..84ac3c7d2b 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt -@@ -115,7 +115,8 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { +@@ -114,6 +114,7 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { } - requirePreference(R.string.pref_key_mars_api_enabled).apply { -- isChecked = context.settings().marsAPIEnabled + requirePreference(R.string.pref_key_pocket_content_recommendations).apply { + isVisible = false -+ isChecked = false + isChecked = context.settings().showContentRecommendations onPreferenceChangeListener = object : SharedPreferenceUpdater() { override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { - activity?.recreate() -@@ -210,7 +211,7 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { +@@ -199,7 +200,7 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { } requirePreference(R.string.pref_key_custom_sponsored_stories_parameters).apply { @@ -123,28 +35,16 @@ index b74145eb21..042fa13c21 100644 requirePreference(R.string.pref_key_remote_server_prod).apply { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 72493a2c21..7ed1866ea5 100644 +index 7f19ba4304..5e483a4ea5 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -375,10 +375,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { - default = false, - ) - -- var showCollectionsPlaceholderOnHome by booleanPreference( -- appContext.getPreferenceKey(R.string.pref_key_show_collections_placeholder_home), -- default = true, -- ) -+ var showCollectionsPlaceholderOnHome = false - - val isCrashReportingEnabled: Boolean - get() = isCrashReportEnabledInBuild && -@@ -1739,20 +1736,12 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -1728,21 +1728,12 @@ class Settings(private val appContext: Context) : PreferencesHolder { /** * Indicates if the Pocket recommended stories homescreen section should be shown. */ - var showPocketRecommendationsFeature by lazyFeatureFlagPreference( - appContext.getPreferenceKey(R.string.pref_key_pocket_homescreen_recommendations), -- featureFlag = FeatureFlags.isPocketRecommendationsFeatureEnabled(appContext), +- featureFlag = ContentRecommendationsFeatureHelper.isPocketRecommendationsFeatureEnabled(appContext), - default = { homescreenSections[HomeScreenSection.POCKET] == true }, - ) + var showPocketRecommendationsFeature = false @@ -155,54 +55,36 @@ index 72493a2c21..7ed1866ea5 100644 - val showPocketSponsoredStories by lazyFeatureFlagPreference( - key = appContext.getPreferenceKey(R.string.pref_key_pocket_sponsored_stories), - default = { homescreenSections[HomeScreenSection.POCKET_SPONSORED_STORIES] == true }, -- featureFlag = FeatureFlags.isPocketSponsoredStoriesFeatureEnabled(appContext), +- featureFlag = ContentRecommendationsFeatureHelper.isPocketSponsoredStoriesFeatureEnabled(appContext), - ) +- + val showPocketSponsoredStories = false - /** * Get the profile id to use in the sponsored stories communications with the Pocket endpoint. -@@ -1816,19 +1805,12 @@ class Settings(private val appContext: Context) : PreferencesHolder { - /** - * Indicates if the MARS API integration is used for sponsored content. */ -- var marsAPIEnabled by lazyFeatureFlagPreference( -- key = appContext.getPreferenceKey(R.string.pref_key_mars_api_enabled), -- default = { FxNimbus.features.mars.value().enabled }, -- featureFlag = true, +@@ -1764,11 +1755,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates if Merino content recommendations should be shown. + */ +- var showContentRecommendations by lazyFeatureFlagPreference( +- key = appContext.getPreferenceKey(R.string.pref_key_pocket_content_recommendations), +- default = { FxNimbus.features.merinoRecommendations.value().enabled }, +- featureFlag = ContentRecommendationsFeatureHelper.isContentRecommendationsFeatureEnabled(appContext), - ) -+ var marsAPIEnabled = false ++ var showContentRecommendations = false /** - * Indicates if the Contile functionality should be visible. - */ -- var showContileFeature by booleanPreference( -- key = appContext.getPreferenceKey(R.string.pref_key_enable_contile), -- default = true, -- ) -+ var showContileFeature = false - - /** - * Indicates if the Unified Search feature should be visible. + * Whether or not to display the Pocket sponsored stories parameter secret settings. diff --git a/mobile/android/fenix/app/src/main/res/xml/home_preferences.xml b/mobile/android/fenix/app/src/main/res/xml/home_preferences.xml -index 5ca4cff86d..3507b6d24e 100644 +index 4fd1f8945a..0044115440 100644 --- a/mobile/android/fenix/app/src/main/res/xml/home_preferences.xml +++ b/mobile/android/fenix/app/src/main/res/xml/home_preferences.xml -@@ -13,7 +13,8 @@ - android:dependency="@string/pref_key_show_top_sites" - android:layout="@layout/checkbox_left_sub_preference" - android:key="@string/pref_key_enable_contile" -- android:title="@string/customize_toggle_contile" /> -+ android:title="@string/customize_toggle_contile" -+ app:isPreferenceVisible="false" /> +@@ -29,13 +29,15 @@ - -+ android:summary="@string/customize_toggle_pocket_summary" +- android:title="@string/customize_toggle_pocket_3" /> ++ android:title="@string/customize_toggle_pocket_3" + app:isPreferenceVisible="false" /> ? = null, - ) : PingCause() { - override fun setMetrics() { -- GleanCrash.cause.set("java_exception") -- GleanCrash.javaException.set( -- Json.decodeFromJsonElement(throwableJson), -- ) - } - } - } -@@ -319,43 +309,6 @@ class GleanCrashReporterService( - val startup: Boolean = false, - ) : GleanCrashAction() { - override fun submit() { -- GleanEnvironment.uptime.setRawNanos(uptimeNanos) -- GleanCrash.processType.set(processType) -- GleanCrash.time.set(Date(timeMillis)) -- GleanCrash.startup.set(startup) -- cause.setMetrics() -- -- if (breadcrumbs.isNotEmpty()) { -- GleanCrash.breadcrumbs.set( -- Json.decodeFromJsonElement( -- JsonArray( -- breadcrumbs.map { breadcrumb -> -- JsonObject( -- mapOf( -- "timestamp" to JsonPrimitive(breadcrumb.timestamp), -- "category" to JsonPrimitive(breadcrumb.category), -- "type" to JsonPrimitive(breadcrumb.type), -- "level" to JsonPrimitive(breadcrumb.level), -- "message" to JsonPrimitive(breadcrumb.message), -- "data" to JsonArray( -- breadcrumb.data.map { -- JsonObject( -- mapOf( -- "key" to JsonPrimitive(it.key), -- "value" to JsonPrimitive(it.value), -- ), -- ) -- }, -- ), -- ), -- ) -- }, -- ), -- ), -- ) -- } -- -- Pings.crash.submit(reason) - } - } - } -@@ -493,17 +446,6 @@ class GleanCrashReporterService( - } - - override fun record(crash: Crash.UncaughtExceptionCrash) { -- recordCrashAction(GleanCrashAction.Count(UNCAUGHT_EXCEPTION_KEY)) -- recordCrashAction( -- GleanCrashAction.Ping( -- uptimeNanos = uptime(), -- processType = "main", -- timeMillis = crash.timestamp, -- reason = Pings.crashReasonCodes.crash, -- cause = GleanCrashAction.PingCause.JavaException(crash.throwable.toJson()), -- breadcrumbs = crash.breadcrumbs.map { it.toBreadcrumb() }, -- ), -- ) - } - - private fun getExtrasJson(path: String): JsonObject? { -@@ -582,72 +524,8 @@ class GleanCrashReporterService( - } - - override fun record(crash: Crash.NativeCodeCrash) { -- when (crash.processType) { -- Crash.NativeCodeCrash.PROCESS_TYPE_MAIN -> -- recordCrashAction(GleanCrashAction.Count(MAIN_PROCESS_NATIVE_CODE_CRASH_KEY)) -- Crash.NativeCodeCrash.PROCESS_TYPE_FOREGROUND_CHILD -> -- recordCrashAction( -- GleanCrashAction.Count( -- FOREGROUND_CHILD_PROCESS_NATIVE_CODE_CRASH_KEY, -- ), -- ) -- Crash.NativeCodeCrash.PROCESS_TYPE_BACKGROUND_CHILD -> -- recordCrashAction( -- GleanCrashAction.Count( -- BACKGROUND_CHILD_PROCESS_NATIVE_CODE_CRASH_KEY, -- ), -- ) -- } -- -- // The `processType` property on a crash is a bit confusing because it does not map to the actual process types -- // (like main, content, gpu, etc.). This property indicates what UI we should show to users given that "main" -- // crashes essentially kill the app, "foreground child" crashes are likely tab crashes, and "background child" -- // crashes are occurring in other processes (like GPU and extensions) for which users shouldn't notice anything -- // (because there shouldn't be any noticeable impact in the app and the processes will be recreated -- // automatically). -- val processType = when (crash.processType) { -- Crash.NativeCodeCrash.PROCESS_TYPE_MAIN -> "main" -- -- Crash.NativeCodeCrash.PROCESS_TYPE_BACKGROUND_CHILD -> { -- when (crash.remoteType) { -- // The extensions process is a content process as per: -- // https://firefox-source-docs.mozilla.org/dom/ipc/process_model.html#webextensions -- "extension" -> "content" -- -- else -> "utility" -- } -- } -- -- Crash.NativeCodeCrash.PROCESS_TYPE_FOREGROUND_CHILD -> "content" -- -- else -> "main" -- } -- -- if (crash.minidumpPath != null && crash.extrasPath != null) { -- MinidumpAnalyzer.load()?.run(crash.minidumpPath, crash.extrasPath, false) -- } -- -- val extrasJson = crash.extrasPath?.let { getExtrasJson(it) } -- -- val minidumpHash = crash.minidumpPath?.let { calculateMinidumpHash(it) } -- -- recordCrashAction( -- GleanCrashAction.Ping( -- uptimeNanos = uptime(), -- processType = processType, -- timeMillis = crash.timestamp, -- reason = Pings.crashReasonCodes.crash, -- cause = GleanCrashAction.PingCause.OsFault( -- remoteType = crash.remoteType, -- extras = extrasJson, -- minidumpHash = minidumpHash, -- ), -- breadcrumbs = crash.breadcrumbs.map { it.toBreadcrumb() }, -- ), -- ) - } - - override fun record(throwable: Throwable) { -- recordCrashAction(GleanCrashAction.Count(CAUGHT_EXCEPTION_KEY)) - } - } -diff --git a/mobile/android/android-components/components/lib/crash/src/main/java/mozilla/components/lib/crash/service/MozillaSocorroService.kt b/mobile/android/android-components/components/lib/crash/src/main/java/mozilla/components/lib/crash/service/MozillaSocorroService.kt -index 900fc5ebb6..ea5c0b2ad7 100644 ---- a/mobile/android/android-components/components/lib/crash/src/main/java/mozilla/components/lib/crash/service/MozillaSocorroService.kt -+++ b/mobile/android/android-components/components/lib/crash/src/main/java/mozilla/components/lib/crash/service/MozillaSocorroService.kt -@@ -103,7 +103,7 @@ class MozillaSocorroService( - override val name: String = "Socorro" - - override fun createCrashReportUrl(identifier: String): String? { -- return "https://crash-stats.mozilla.org/report/index/$identifier" -+ return "" - } - - init { -@@ -556,7 +556,7 @@ class MozillaSocorroService( - } - - internal fun buildServerUrl(versionName: String): String = -- "https://crash-reports.mozilla.com/submit".toUri() -+ "".toUri() - .buildUpon() - .appendQueryParameter("id", appId) - .appendQueryParameter("version", versionName) -diff --git a/mobile/android/android-components/components/lib/crash-sentry/src/main/java/mozilla/components/lib/crash/sentry/SentryService.kt b/mobile/android/android-components/components/lib/crash-sentry/src/main/java/mozilla/components/lib/crash/sentry/SentryService.kt -index bc9ae7fe5b..e89859e038 100644 ---- a/mobile/android/android-components/components/lib/crash-sentry/src/main/java/mozilla/components/lib/crash/sentry/SentryService.kt -+++ b/mobile/android/android-components/components/lib/crash-sentry/src/main/java/mozilla/components/lib/crash/sentry/SentryService.kt -@@ -44,7 +44,7 @@ class SentryService( - private val environment: String? = null, - private val sendEventForNativeCrashes: Boolean = false, - private val sentryProjectUrl: String? = null, -- private val sendCaughtExceptions: Boolean = true, -+ private val sendCaughtExceptions: Boolean = false, - ) : CrashReporterService { - - override val id: String = "new-sentry-instance" -diff --git a/mobile/android/fenix/app/build.gradle b/mobile/android/fenix/app/build.gradle -index bdbc2336e3..8fe75f4fd1 100644 ---- a/mobile/android/fenix/app/build.gradle -+++ b/mobile/android/fenix/app/build.gradle -@@ -301,7 +301,7 @@ android.applicationVariants.configureEach { variant -> - project.logger.debug("Application ID: " + [variant.applicationId, variant.buildType.applicationIdSuffix].findAll().join()) - project.logger.debug("Build type: " + variant.buildType.name) - project.logger.debug("Flavor: " + variant.flavorName) -- project.logger.debug("Telemetry enabled: " + !isDebug) -+ project.logger.debug("Telemetry enabled: " + false) - - if (useReleaseVersioning) { - // The Google Play Store does not allow multiple APKs for the same app that all have the -@@ -343,7 +343,7 @@ android.applicationVariants.configureEach { variant -> - - buildConfigField 'String', 'SENTRY_TOKEN', 'null' - if (!isDebug) { -- buildConfigField 'boolean', 'CRASH_REPORTING', 'true' -+ buildConfigField 'boolean', 'CRASH_REPORTING', 'false' - // Reading sentry token from local file (if it exists). In a release task on taskcluster it will be available. - try { - def token = new File("${rootDir}/.sentry_token").text.trim() -@@ -354,7 +354,7 @@ android.applicationVariants.configureEach { variant -> - } - - if (!isDebug) { -- buildConfigField 'boolean', 'TELEMETRY', 'true' -+ buildConfigField 'boolean', 'TELEMETRY', 'false' - } else { - buildConfigField 'boolean', 'TELEMETRY', 'false' - } -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt -index 8b96400722..c8a88c0629 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt -@@ -66,7 +66,7 @@ object FeatureFlags { - /** - * Enable Meta attribution. - */ -- const val META_ATTRIBUTION_ENABLED = true -+ const val META_ATTRIBUTION_ENABLED = false - - /** - * Enables Homepage as a New Tab. -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt -index 9e7842dfd5..fa80f938ec 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt -@@ -496,10 +496,6 @@ open class FenixApplication : LocaleAwareApplication(), Provider { - } - - private fun setupCrashReporting() { -- components -- .analytics -- .crashReporter -- .install(this) - } - - protected open fun initializeNimbus() { -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Analytics.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Analytics.kt -index 1ad6a264c7..c9ea9932ca 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Analytics.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Analytics.kt -@@ -16,7 +16,6 @@ import mozilla.components.lib.crash.service.GleanCrashReporterService - import mozilla.components.lib.crash.service.MozillaSocorroService - import mozilla.components.support.ktx.android.content.isMainProcess - import mozilla.components.support.utils.BrowsersCache --import mozilla.components.support.utils.RunWhenReadyQueue - import org.mozilla.fenix.BuildConfig - import org.mozilla.fenix.Config - import org.mozilla.fenix.HomeActivity -@@ -45,7 +44,6 @@ import org.mozilla.geckoview.BuildConfig.MOZ_UPDATE_CHANNEL - */ - class Analytics( - private val context: Context, -- private val runWhenReadyQueue: RunWhenReadyQueue, - ) { - val crashReporter: CrashReporter by lazyMonitored { - val services = mutableListOf() -@@ -57,7 +55,7 @@ class Analytics( - // we get most value out of nightly/beta logging anyway. - val shouldSendCaughtExceptions = when (Config.channel) { - ReleaseChannel.Release -> false -- else -> true -+ else -> false - } - val sentryService = SentryService( - context, -@@ -74,12 +72,7 @@ class Analytics( - - // We only want to initialize Sentry on startup on the main process. - if (context.isMainProcess()) { -- runWhenReadyQueue.runIfReadyOrQueue { -- sentryService.initIfNeeded() -- } - } -- -- services.add(sentryService) - } - - // The name "Fenix" here matches the product name on Socorro and is unrelated to the actual app name: -@@ -93,7 +86,6 @@ class Analytics( - releaseChannel = MOZ_UPDATE_CHANNEL, - distributionId = distributionId, - ) -- services.add(socorroService) - - val intent = Intent(context, HomeActivity::class.java).apply { - flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP -@@ -119,7 +111,7 @@ class Analytics( - appName = context.getString(R.string.app_name), - organizationName = "Mozilla", - ), -- enabled = true, -+ enabled = false, - nonFatalCrashIntent = pendingIntent, - useLegacyReporting = !context.settings().crashReportAlwaysSend && - !context.settings().useNewCrashReporterDialog, -@@ -161,10 +153,10 @@ class Analytics( - } - } - --private fun isSentryEnabled() = !BuildConfig.SENTRY_TOKEN.isNullOrEmpty() -+private fun isSentryEnabled() = false - - private fun getSentryProjectUrl(): String? { -- val baseUrl = "https://sentry.io/organizations/mozilla/issues" -+ val baseUrl = "" - return when (Config.channel) { - ReleaseChannel.Nightly -> "$baseUrl/?project=6295546" - ReleaseChannel.Release -> "$baseUrl/?project=6375561" -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt -index 72acbf329a..ccc0bf6e42 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt -@@ -184,7 +184,7 @@ class Components(private val context: Context) { - AddonManager(core.store, core.engine, addonsProvider, addonUpdater) - } - -- val analytics by lazyMonitored { Analytics(context, performance.visualCompletenessQueue.queue) } -+ val analytics by lazyMonitored { Analytics(context) } - val nimbus by lazyMonitored { NimbusComponents(context) } - val publicSuffixList by lazyMonitored { PublicSuffixList(context) } - val clipboardHandler by lazyMonitored { ClipboardHandler(context) } -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt -index e57302c306..fb6ac9c9c9 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt -@@ -60,14 +60,11 @@ import mozilla.components.feature.pwa.WebAppShortcutManager - import mozilla.components.feature.readerview.ReaderViewMiddleware - import mozilla.components.feature.recentlyclosed.RecentlyClosedMiddleware - import mozilla.components.feature.recentlyclosed.RecentlyClosedTabsStorage --import mozilla.components.feature.search.middleware.AdsTelemetryMiddleware -+import mozilla.components.feature.search.ext.createApplicationSearchEngine - import mozilla.components.feature.search.middleware.SearchExtraParams - import mozilla.components.feature.search.middleware.SearchMiddleware - import mozilla.components.feature.search.region.RegionMiddleware - import mozilla.components.feature.search.storage.SearchEngineSelectorConfig --import mozilla.components.feature.search.telemetry.SerpTelemetryRepository --import mozilla.components.feature.search.telemetry.ads.AdsTelemetry --import mozilla.components.feature.search.telemetry.incontent.InContentTelemetry - import mozilla.components.feature.session.HistoryDelegate - import mozilla.components.feature.session.middleware.LastAccessMiddleware - import mozilla.components.feature.session.middleware.undo.UndoMiddleware -@@ -129,7 +126,6 @@ import org.mozilla.fenix.settings.advanced.getSelectedLocale - import org.mozilla.fenix.share.DefaultSentFromFirefoxManager - import org.mozilla.fenix.share.DefaultSentFromStorage - import org.mozilla.fenix.share.SaveToPDFMiddleware --import org.mozilla.fenix.telemetry.TelemetryMiddleware - import org.mozilla.fenix.utils.getUndoDelay - import org.mozilla.geckoview.GeckoRuntime - import java.util.UUID -@@ -306,7 +302,6 @@ class Core( - RecentlyClosedMiddleware(recentlyClosedTabsStorage, RECENTLY_CLOSED_MAX), - DownloadMiddleware(context, DownloadService::class.java), - ReaderViewMiddleware(), -- TelemetryMiddleware(context, context.settings(), metrics, crashReporter), - ThumbnailsMiddleware(thumbnailStorage), - UndoMiddleware(context.getUndoDelay()), - RegionMiddleware(context, locationService), -@@ -319,7 +314,6 @@ class Core( - ), - RecordingDevicesMiddleware(context, context.components.notificationsDelegate), - PromptMiddleware(), -- AdsTelemetryMiddleware(adsTelemetry), - LastMediaAccessMiddleware(), - HistoryMetadataMiddleware(historyMetadataService), - SessionPrioritizationMiddleware(), -@@ -354,26 +348,6 @@ class Core( - // Install the "icons" WebExtension to automatically load icons for every visited website. - icons.install(engine, this) - -- CoroutineScope(Dispatchers.Main).launch { -- val readJson = { context.assets.readJSONObject("search/search_telemetry_v2.json") } -- val providerList = withContext(Dispatchers.IO) { -- SerpTelemetryRepository( -- rootStorageDirectory = context.filesDir, -- readJson = readJson, -- collectionName = COLLECTION_NAME, -- serverUrl = if (context.settings().useProductionRemoteSettingsServer) { -- REMOTE_PROD_ENDPOINT_URL -- } else { -- REMOTE_STAGE_ENDPOINT_URL -- }, -- ).updateProviderList() -- } -- // Install the "ads" WebExtension to get the links in an partner page. -- adsTelemetry.install(engine, this@apply, providerList) -- // Install the "cookies" WebExtension and tracks user interaction with SERPs. -- searchTelemetry.install(engine, this@apply, providerList) -- } -- - WebNotificationFeature( - context, - engine, -@@ -419,18 +393,6 @@ class Core( - BrowserIcons(context, client) - } - -- val metrics by lazyMonitored { -- context.components.analytics.metrics -- } -- -- val adsTelemetry by lazyMonitored { -- AdsTelemetry() -- } -- -- val searchTelemetry by lazyMonitored { -- InContentTelemetry() -- } -- - /** - * Shortcut component for managing shortcuts on the device home screen. - */ -@@ -720,7 +682,7 @@ class Core( - const val METADATA_SHORTCUT_SUGGESTION_LIMIT = 20 - - // collection name to fetch from server for SERP telemetry -- const val COLLECTION_NAME = "search-telemetry-v2" -+ const val COLLECTION_NAME = "" - internal const val REMOTE_PROD_ENDPOINT_URL = "https://firefox.settings.services.mozilla.com" - internal const val REMOTE_STAGE_ENDPOINT_URL = "https://firefox.settings.services.allizom.org" - } -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/GleanHelper.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/GleanHelper.kt -index a708898f06..736e6dfcf8 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/GleanHelper.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/GleanHelper.kt -@@ -29,20 +29,13 @@ import org.mozilla.fenix.nimbus.FxNimbus - fun initializeGlean(applicationContext: Context, logger: Logger, isTelemetryUploadEnabled: Boolean, client: Client) { - logger.debug("Initializing Glean (uploadEnabled=$isTelemetryUploadEnabled})") - -- // for performance reasons, this is only available in Nightly or Debug builds -- val customEndpoint = if (Config.channel.isNightlyOrDebug) { -- // for testing, if custom glean server url is set in the secret menu, use it to initialize Glean -- getCustomGleanServerUrlIfAvailable(applicationContext) -- } else { -- null -- } -- - val configuration = Configuration( -+ serverEndpoint = "", - channel = BuildConfig.BUILD_TYPE, - httpClient = ConceptFetchHttpUploader( - lazy(LazyThreadSafetyMode.NONE) { client }, - ), -- enableEventTimestamps = FxNimbus.features.glean.value().enableEventTimestamps, -+ enableEventTimestamps = false, - delayPingLifetimeIo = FxNimbus.features.glean.value().delayPingLifetimeIo, - pingLifetimeThreshold = FxNimbus.features.glean.value().pingLifetimeThreshold, - pingLifetimeMaxTime = FxNimbus.features.glean.value().pingLifetimeMaxTime, -@@ -58,8 +51,8 @@ fun initializeGlean(applicationContext: Context, logger: Logger, isTelemetryUplo - - Glean.initialize( - applicationContext = applicationContext, -- configuration = configuration.setCustomEndpointIfAvailable(customEndpoint), -- uploadEnabled = isTelemetryUploadEnabled, -+ configuration = configuration, -+ uploadEnabled = false, - buildInfo = GleanBuildInfo.buildInfo, - ) - } -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt -index ea4ff1e0dd..84f04bd06d 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt -@@ -70,9 +70,9 @@ class GleanMetricsService( - private val activationPing = ActivationPing(context) - - override fun start() { -- logger.debug("Enabling Glean.") -+ logger.debug("Not Enabling Glean.") - // Initialization of Glean already happened in FenixApplication. -- Glean.setCollectionEnabled(true) -+ Glean.setCollectionEnabled(false) - - if (initialized) return - initialized = true -@@ -86,8 +86,6 @@ class GleanMetricsService( - // These two things actually happen in parallel, but that should be ok because Glean - // can handle events being recorded before it's initialized. - Glean.registerPings(Pings) -- -- activationPing.checkAndSend() - } - } - -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt -index a5457b56e7..e7532771eb 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt -@@ -273,9 +273,9 @@ internal class DefaultMetricsStorage( - * - user has installed as a result of a campaign - * - tracking is still enabled through Nimbus - */ -+ @Suppress("UNUSED_PARAMETER") - fun shouldSendGenerally(context: Context): Boolean { -- return context.settings().adjustCampaignId.isNotEmpty() && -- FxNimbus.features.growthData.value().enabled -+ return false - } - - fun getInstalledTime(context: Context): Long = context.packageManager -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt -index 36d4b4c349..af2ba6479e 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt -@@ -102,10 +102,7 @@ private fun Context.reportError(message: String, e: Throwable) { - * This fix should be upstreamed as part of: https://github.com/mozilla/application-services/issues/4333 - */ - fun NimbusException.isReportableError(): Boolean { -- return when (this) { -- is NimbusException.ClientException -> false -- else -> true -- } -+ return false - } - - /** -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/nimbus/controller/NimbusBranchesController.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/nimbus/controller/NimbusBranchesController.kt -index c1b54d7f27..01fd0d7427 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/nimbus/controller/NimbusBranchesController.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/nimbus/controller/NimbusBranchesController.kt -@@ -42,34 +42,7 @@ class NimbusBranchesController( - ) : NimbusBranchesAdapterDelegate { - - override fun onBranchItemClicked(branch: Branch) { -- val telemetryEnabled = context.settings().isTelemetryEnabled -- val experimentsEnabled = context.settings().isExperimentationEnabled -- - updateOptInState(branch) -- -- if (!telemetryEnabled && !experimentsEnabled) { -- context.getRootView()?.let { v -> -- Snackbar.make( -- snackBarParentView = v, -- snackbarState = SnackbarState( -- message = context.getString(R.string.experiments_snackbar), -- duration = SnackbarState.Duration.Preset.Long, -- action = Action( -- label = context.getString(R.string.experiments_snackbar_button), -- onClick = { -- navController.navigateWithBreadcrumb( -- directions = NimbusBranchesFragmentDirections -- .actionNimbusBranchesFragmentToDataChoicesFragment(), -- navigateFrom = "NimbusBranchesController", -- navigateTo = "ActionNimbusBranchesFragmentToDataChoicesFragment", -- crashReporter = context.components.analytics.crashReporter, -- ) -- }, -- ), -- ), -- ).show() -- } -- } - } - - private fun updateOptInState(branch: Branch) { -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt -index 64d09acb1a..f67ade3fbb 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt -@@ -367,8 +367,7 @@ class OnboardingFragment : Fragment() { - requireComponents.core.client, - ) - if (!settings.isTelemetryEnabled) { -- Pings.onboardingOptOut.setEnabled(true) -- Pings.onboardingOptOut.submit() -+ Pings.onboardingOptOut.setEnabled(false) - } - - startMetricsIfEnabled( -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 72493a2c21..a202120a9d 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -180,8 +180,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { - } - - @VisibleForTesting -- internal val isCrashReportEnabledInBuild: Boolean = -- BuildConfig.CRASH_REPORTING && Config.channel.isReleased -+ internal val isCrashReportEnabledInBuild: Boolean = false - - override val preferences: SharedPreferences = - appContext.getSharedPreferences(FENIX_PREFERENCES, MODE_PRIVATE) -@@ -380,37 +379,20 @@ class Settings(private val appContext: Context) : PreferencesHolder { - default = true, - ) - -- val isCrashReportingEnabled: Boolean -- get() = isCrashReportEnabledInBuild && -- preferences.getBoolean( -- appContext.getPreferenceKey(R.string.pref_key_crash_reporter), -- true, -- ) -+ val isCrashReportingEnabled: Boolean = false - - val isRemoteDebuggingEnabled by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_remote_debugging), - default = false, - ) - -- var isTelemetryEnabled by booleanPreference( -- appContext.getPreferenceKey(R.string.pref_key_telemetry), -- default = true, -- ) -+ var isTelemetryEnabled = false - -- var isMarketingTelemetryEnabled by booleanPreference( -- appContext.getPreferenceKey(R.string.pref_key_marketing_telemetry), -- default = false, -- ) -+ var isMarketingTelemetryEnabled = false - -- var hasMadeMarketingTelemetrySelection by booleanPreference( -- appContext.getPreferenceKey(R.string.pref_key_marketing_telemetry_selection_made), -- default = false, -- ) -+ var hasMadeMarketingTelemetrySelection = true - -- var hasAcceptedTermsOfService by booleanPreference( -- appContext.getPreferenceKey(R.string.pref_key_terms_accepted), -- default = false, -- ) -+ var hasAcceptedTermsOfService = true - - /** - * The daily usage ping is not normally tied to normal telemetry. We set the default value to -@@ -418,16 +400,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { - * sure that users who upgrade and had telemetry disabled don't start sending the - * daily usage ping telemetry. - */ -- var isDailyUsagePingEnabled by booleanPreference( -- appContext.getPreferenceKey(R.string.pref_key_daily_usage_ping), -- default = isTelemetryEnabled, -- persistDefaultIfNotExists = true, -- ) -+ var isDailyUsagePingEnabled = false - -- var isExperimentationEnabled by booleanPreference( -- appContext.getPreferenceKey(R.string.pref_key_experimentation_v2), -- default = isTelemetryEnabled, -- ) -+ var isExperimentationEnabled = false - - var isOverrideTPPopupsForPerformanceTest = false - -@@ -2370,10 +2345,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { - * A user preference indicating that crash reports should always be automatically sent. This can be updated - * through the unsubmitted crash dialog or through data choice preferences. - */ -- var crashReportAlwaysSend by booleanPreference( -- appContext.getPreferenceKey(R.string.pref_key_crash_reporting_always_report), -- default = false, -- ) -+ var crashReportAlwaysSend = false - - /** - * Indicates whether or not we should use the new crash reporter dialog. -diff --git a/mobile/android/fenix/app/src/main/res/xml/preferences.xml b/mobile/android/fenix/app/src/main/res/xml/preferences.xml -index 4c6b14bf87..e6399548b9 100644 ---- a/mobile/android/fenix/app/src/main/res/xml/preferences.xml -+++ b/mobile/android/fenix/app/src/main/res/xml/preferences.xml -@@ -141,11 +141,6 @@ - app:iconSpaceReserved="false" - android:title="@string/preferences_notifications" /> - -- -- - - - -- - - nsresult { -- // On Android always enable Glean upload. -- let upload_enabled = true; -+ // On Android always disable Glean upload. -+ let upload_enabled = false; - // Don't set up an uploader. - let uploader = None; - -@@ -155,7 +155,7 @@ fn build_configuration( - if app_id_override == "thunderbird.desktop" { - String::from("https://incoming.thunderbird.net") - } else { -- String::from("https://incoming.telemetry.mozilla.org") -+ String::from("") - } - }; - -@@ -190,9 +190,9 @@ fn build_configuration( - trim_data_to_registered_pings: true, - log_level: None, - rate_limit, -- enable_event_timestamps: true, -+ enable_event_timestamps: false, - experimentation_id: None, -- enable_internal_pings: true, -+ enable_internal_pings: false, - ping_schedule: pings::ping_schedule(), - ping_lifetime_threshold: 0, - ping_lifetime_max_time: Duration::ZERO, -@@ -373,8 +373,8 @@ fn fog_test_reset_internal( - ) -> Result<(), nsresult> { - let (mut conf, client_info) = build_configuration(data_path_override, app_id_override)?; - -- // On Android always enable Glean upload. -- conf.upload_enabled = true; -+ // On Android always disable Glean upload. -+ conf.upload_enabled = false; - - // Don't accidentally send "main" pings during tests. - conf.use_core_mps = false; -diff --git a/toolkit/components/glean/src/init/viaduct_uploader.rs b/toolkit/components/glean/src/init/viaduct_uploader.rs -index b61d7e2036..cc8e1feb48 100644 ---- a/toolkit/components/glean/src/init/viaduct_uploader.rs -+++ b/toolkit/components/glean/src/init/viaduct_uploader.rs -@@ -117,7 +117,7 @@ fn ohttp_upload(upload_request: PingUploadRequest) -> Result Result Result, ViaductUploaderError> { - const OHTTP_CONFIG_URL: &str = -- "https://prod.ohttp-gateway.prod.webservices.mozgcp.net/ohttp-configs"; -+ ""; - log::trace!("Getting OHTTP config from {}", OHTTP_CONFIG_URL); - let parsed_config_url = Url::parse(OHTTP_CONFIG_URL)?; - Ok(Request::get(parsed_config_url).send()?.body) -diff --git a/toolkit/components/telemetry/app/TelemetryControllerBase.sys.mjs b/toolkit/components/telemetry/app/TelemetryControllerBase.sys.mjs -index cf0a7bd372..62215f9a6b 100644 ---- a/toolkit/components/telemetry/app/TelemetryControllerBase.sys.mjs -+++ b/toolkit/components/telemetry/app/TelemetryControllerBase.sys.mjs -@@ -87,28 +87,8 @@ export var TelemetryControllerBase = Object.freeze({ - setTelemetryRecordingFlags() { - // Enable extended Telemetry on pre-release channels and disable it - // on Release/ESR. -- let prereleaseChannels = [ -- "nightly", -- "nightly-autoland", -- "nightly-try", -- "aurora", -- "beta", -- ]; -- if (!AppConstants.MOZILLA_OFFICIAL) { -- // Turn extended telemetry for local developer builds. -- prereleaseChannels.push("default"); -- } -- const isPrereleaseChannel = prereleaseChannels.includes( -- AppConstants.MOZ_UPDATE_CHANNEL -- ); -- const isReleaseCandidateOnBeta = -- AppConstants.MOZ_UPDATE_CHANNEL === "release" && -- Services.prefs.getCharPref("app.update.channel", null) === "beta"; -- Services.telemetry.canRecordBase = true; -- Services.telemetry.canRecordExtended = -- isPrereleaseChannel || -- isReleaseCandidateOnBeta || -- Services.prefs.getBoolPref(this.Preferences.OverridePreRelease, false); -+ Services.telemetry.canRecordBase = false; -+ Services.telemetry.canRecordExtended = false; - }, - - /** -diff --git a/toolkit/components/telemetry/app/TelemetryReportingPolicy.sys.mjs b/toolkit/components/telemetry/app/TelemetryReportingPolicy.sys.mjs -index 349d7097f0..993f038a14 100644 ---- a/toolkit/components/telemetry/app/TelemetryReportingPolicy.sys.mjs -+++ b/toolkit/components/telemetry/app/TelemetryReportingPolicy.sys.mjs -@@ -279,11 +279,7 @@ var TelemetryReportingPolicyImpl = { - * false, we never request upload or deletion. - */ - get dataSubmissionEnabled() { -- // Default is true because we are opt-out. -- return Services.prefs.getBoolPref( -- TelemetryUtils.Preferences.DataSubmissionEnabled, -- true -- ); -+ return false; - }, - - get currentPolicyVersion() { -@@ -716,7 +712,7 @@ var TelemetryReportingPolicyImpl = { - return this._ensureUserIsNotifiedPromise.then(() => { - // The user has been notified and interacted with the modal. - // Glean can now init on shutdown if necessary. -- Services.prefs.setBoolPref("telemetry.fog.init_on_shutdown", true); -+ Services.prefs.setBoolPref("telemetry.fog.init_on_shutdown", false); - }); - }, - -diff --git a/toolkit/components/telemetry/app/UsageReporting.sys.mjs b/toolkit/components/telemetry/app/UsageReporting.sys.mjs -index 4a3e1de32d..baeff11b29 100644 ---- a/toolkit/components/telemetry/app/UsageReporting.sys.mjs -+++ b/toolkit/components/telemetry/app/UsageReporting.sys.mjs -@@ -45,7 +45,7 @@ export var UsageReporting = { - - // Usage deletion requests can always be sent. They are - // always sent in response to user action. -- GleanPings.usageDeletionRequest.setEnabled(true); -+ GleanPings.usageDeletionRequest.setEnabled(false); - - // Usage pings should only be sent when upload is enabled. - // Eventually, Glean will persist this setting. -diff --git a/toolkit/components/telemetry/core/Telemetry.cpp b/toolkit/components/telemetry/core/Telemetry.cpp -index 8b7ac7a40f..9edac397ea 100644 ---- a/toolkit/components/telemetry/core/Telemetry.cpp -+++ b/toolkit/components/telemetry/core/Telemetry.cpp -@@ -1119,7 +1119,7 @@ NS_IMETHODIMP - TelemetryImpl::GetIsOfficialTelemetry(bool* ret) { - #if defined(MOZILLA_OFFICIAL) && defined(MOZ_TELEMETRY_REPORTING) && \ - !defined(DEBUG) -- *ret = true; -+ *ret = false; - #else - *ret = false; - #endif -@@ -1138,7 +1138,7 @@ already_AddRefed TelemetryImpl::CreateTelemetryInstance() { - #ifndef FUZZING - if (XRE_IsParentProcess() || XRE_IsContentProcess() || XRE_IsGPUProcess() || - XRE_IsRDDProcess() || XRE_IsSocketProcess() || XRE_IsUtilityProcess()) { -- useTelemetry = true; -+ useTelemetry = false; - } - #endif - #ifdef MOZ_BACKGROUNDTASKS -diff --git a/toolkit/components/telemetry/core/TelemetryCommon.cpp b/toolkit/components/telemetry/core/TelemetryCommon.cpp -index a52d8e0a64..9bec7accff 100644 ---- a/toolkit/components/telemetry/core/TelemetryCommon.cpp -+++ b/toolkit/components/telemetry/core/TelemetryCommon.cpp -@@ -50,14 +50,13 @@ bool CanRecordDataset(uint32_t aDataset, bool aCanRecordBase, - // If we are extended telemetry is enabled, we are allowed to record - // regardless of the dataset. - if (aCanRecordExtended) { -- return true; -+ return false; - } - - // If base telemetry data is enabled and we're trying to record base - // telemetry, allow it. -- if (aCanRecordBase && -- IsInDataset(aDataset, nsITelemetry::DATASET_ALL_CHANNELS)) { -- return true; -+ if (aCanRecordBase) { -+ return false; - } - - // We're not recording extended telemetry or this is not the base -diff --git a/toolkit/library/rust/gkrust-features.mozbuild b/toolkit/library/rust/gkrust-features.mozbuild -index a19af5bd9d..66d8947acd 100644 ---- a/toolkit/library/rust/gkrust-features.mozbuild -+++ b/toolkit/library/rust/gkrust-features.mozbuild -@@ -60,8 +60,7 @@ if CONFIG["MOZ_WEBRTC"]: - # We need to tell Glean it is being built with Gecko. - gkrust_features += ["glean_with_gecko"] - --if not CONFIG["MOZILLA_OFFICIAL"]: -- gkrust_features += ["glean_disable_upload"] -+gkrust_features += ["glean_disable_upload"] - - if CONFIG["MOZ_ENABLE_DBUS"]: - gkrust_features += ["with_dbus"] -diff --git a/toolkit/modules/AppConstants.sys.mjs b/toolkit/modules/AppConstants.sys.mjs -index a794e82288..46b698a1ec 100644 ---- a/toolkit/modules/AppConstants.sys.mjs -+++ b/toolkit/modules/AppConstants.sys.mjs -@@ -35,13 +35,13 @@ export var AppConstants = Object.freeze({ - - MOZ_SERVICES_SYNC: @MOZ_SERVICES_SYNC_BOOL@, - -- MOZ_DATA_REPORTING: @MOZ_DATA_REPORTING_BOOL@, -+ MOZ_DATA_REPORTING: false, - - MOZ_SANDBOX: @MOZ_SANDBOX_BOOL@, - - MOZ_TELEMETRY_REPORTING: - #ifdef MOZ_TELEMETRY_REPORTING -- true, -+ false, - #else - false, - #endif -@@ -114,9 +114,9 @@ export var AppConstants = Object.freeze({ - Services.vc.compare(platformVersion, version) <= 0; - }, - -- MOZ_CRASHREPORTER: @MOZ_CRASHREPORTER_BOOL@, -+ MOZ_CRASHREPORTER: false, - -- MOZ_NORMANDY: @MOZ_NORMANDY_BOOL@, -+ MOZ_NORMANDY: false, - - MOZ_MAINTENANCE_SERVICE: @MOZ_MAINTENANCE_SERVICE_BOOL@, - -@@ -130,7 +130,7 @@ export var AppConstants = Object.freeze({ - - ASAN: @MOZ_ASAN_BOOL@, - -- ASAN_REPORTER: @MOZ_ASAN_REPORTER_BOOL@, -+ ASAN_REPORTER: false, - - TSAN: @MOZ_TSAN_BOOL@, - -diff --git a/tools/@types/subs/AppConstants.sys.d.mts b/tools/@types/subs/AppConstants.sys.d.mts -index 04273576bd..8dc11902b0 100644 ---- a/tools/@types/subs/AppConstants.sys.d.mts -+++ b/tools/@types/subs/AppConstants.sys.d.mts -@@ -32,12 +32,12 @@ export const AppConstants: Readonly<{ - - MOZ_SERVICES_SYNC: boolean; - -- MOZ_DATA_REPORTING: boolean; -+ MOZ_DATA_REPORTING: false; - - MOZ_SANDBOX: boolean; - - // #ifdef MOZ_TELEMETRY_REPORTING -- MOZ_TELEMETRY_REPORTING: boolean; -+ MOZ_TELEMETRY_REPORTING: false; - - MOZ_UPDATER: boolean; - -@@ -66,9 +66,9 @@ export const AppConstants: Readonly<{ - isPlatformAndVersionAtLeast(platform: Platform, version: string): boolean; - isPlatformAndVersionAtMost(platform: Platform, version: string): boolean; - -- MOZ_CRASHREPORTER: boolean; -+ MOZ_CRASHREPORTER: false; - -- MOZ_NORMANDY: boolean; -+ MOZ_NORMANDY: false; - - MOZ_MAINTENANCE_SERVICE: boolean; - -@@ -82,7 +82,7 @@ export const AppConstants: Readonly<{ - - ASAN: boolean; - -- ASAN_REPORTER: boolean; -+ ASAN_REPORTER: false; - - TSAN: boolean; - diff --git a/patches/disable-trending-search-suggestions.patch b/patches/disable-trending-search-suggestions.patch new file mode 100644 index 0000000..48f8b40 --- /dev/null +++ b/patches/disable-trending-search-suggestions.patch @@ -0,0 +1,39 @@ +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +index 7f19ba4304..47c8b933db 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +@@ -1160,7 +1160,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + @VisibleForTesting + internal var trendingSearchSuggestionsEnabled by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_show_trending_search_suggestions), +- default = true, ++ default = false, + ) + + /** +@@ -2029,10 +2029,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates if Trending Search Suggestions are enabled. + */ +- var isTrendingSearchesVisible by lazyFeatureFlagPreference( ++ var isTrendingSearchesVisible by booleanPreference( + key = appContext.getPreferenceKey(R.string.pref_key_enable_trending_searches), +- default = { FxNimbus.features.trendingSearches.value().enabled }, +- featureFlag = true, ++ default = true, + ) + + /** +diff --git a/mobile/android/fenix/app/src/main/res/xml/search_settings_preferences.xml b/mobile/android/fenix/app/src/main/res/xml/search_settings_preferences.xml +index f7ca109331..67d00840f8 100644 +--- a/mobile/android/fenix/app/src/main/res/xml/search_settings_preferences.xml ++++ b/mobile/android/fenix/app/src/main/res/xml/search_settings_preferences.xml +@@ -38,7 +38,7 @@ + android:title="@string/preferences_show_search_suggestions_in_private" + app:iconSpaceReserved="false" /> + (R.string.pref_key_toolbar_show_navigation_toolbar).apply { -- isVisible = Config.channel.isNightlyOrDebug -+ isVisible = true - isChecked = context.settings().navigationToolbarEnabled - onPreferenceChangeListener = SharedPreferenceUpdater() +@@ -64,7 +64,7 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { } requirePreference(R.string.pref_key_enable_composable_toolbar).apply { @@ -31,14 +24,7 @@ index b74145eb21..92addde4db 100644 isChecked = context.settings().shouldUseComposableToolbar onPreferenceChangeListener = SharedPreferenceUpdater() } - - requirePreference(R.string.pref_key_enable_compose_top_sites).apply { -- isVisible = Config.channel.isNightlyOrDebug -+ isVisible = true - isChecked = context.settings().enableComposeTopSites - onPreferenceChangeListener = SharedPreferenceUpdater() - } -@@ -87,29 +87,31 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { +@@ -76,29 +76,31 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { } requirePreference(R.string.pref_key_enable_compose_logins).apply { @@ -73,7 +59,7 @@ index b74145eb21..92addde4db 100644 isChecked = context.settings().enableHomepageAsNewTab onPreferenceChangeListener = SharedPreferenceUpdater() } -@@ -135,7 +137,7 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { +@@ -124,7 +126,7 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { } requirePreference(R.string.pref_key_enable_unified_trust_panel).apply { @@ -83,10 +69,10 @@ index b74145eb21..92addde4db 100644 onPreferenceChangeListener = SharedPreferenceUpdater() } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 72493a2c21..65de7dbb17 100644 +index 7f19ba4304..6c95b1d7d4 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -1877,18 +1877,14 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -1866,18 +1866,14 @@ class Settings(private val appContext: Context) : PreferencesHolder { default = true, ) @@ -101,7 +87,7 @@ index 72493a2c21..65de7dbb17 100644 ) - var shouldUseComposableToolbar by lazyFeatureFlagPreference( -+ var shouldUseComposableToolbar by booleanPreference( ++ var shouldUseComposableToolbar by booleanPreference( key = appContext.getPreferenceKey(R.string.pref_key_enable_composable_toolbar), - default = { FxNimbus.features.composableToolbar.value().enabled }, - featureFlag = true, @@ -109,14 +95,7 @@ index 72493a2c21..65de7dbb17 100644 ) /** -@@ -2013,25 +2009,23 @@ class Settings(private val appContext: Context) : PreferencesHolder { - */ - var enableComposeTopSites by booleanPreference( - key = appContext.getPreferenceKey(R.string.pref_key_enable_compose_top_sites), -- default = FeatureFlags.COMPOSE_TOP_SITES, -+ default = false, - ) - +@@ -1985,37 +1981,33 @@ class Settings(private val appContext: Context) : PreferencesHolder { /** * Indicates if the Compose Homepage is enabled. */ @@ -140,11 +119,13 @@ index 72493a2c21..65de7dbb17 100644 ) /** -@@ -2039,16 +2033,15 @@ class Settings(private val appContext: Context) : PreferencesHolder { + * Indicates if the Homepage as a New Tab is enabled. */ - var enableHomepageAsNewTab by booleanPreference( +- var enableHomepageAsNewTab by lazyFeatureFlagPreference( ++ var enableHomepageAsNewTab by booleanPreference( key = appContext.getPreferenceKey(R.string.pref_key_enable_homepage_as_new_tab), -- default = FeatureFlags.HOMEPAGE_AS_NEW_TAB, +- default = { FxNimbus.features.homepageAsNewTab.value().enabled }, +- featureFlag = true, + default = false, ) @@ -160,7 +141,7 @@ index 72493a2c21..65de7dbb17 100644 ) /** -@@ -2056,7 +2049,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -2023,7 +2015,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { */ var enableUnifiedTrustPanel by booleanPreference( key = appContext.getPreferenceKey(R.string.pref_key_enable_unified_trust_panel), @@ -168,17 +149,4 @@ index 72493a2c21..65de7dbb17 100644 + default = false, ) - /** -@@ -2269,10 +2262,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { - /** - * Indicates if the user is shown the new navigation toolbar. - */ -- var navigationToolbarEnabled by lazyFeatureFlagPreference( -+ var navigationToolbarEnabled by booleanPreference( - key = appContext.getPreferenceKey(R.string.pref_key_toolbar_show_navigation_toolbar), -- default = { FxNimbus.features.navigationToolbar.value().enabled }, -- featureFlag = true, -+ default = false, - ) - /** diff --git a/patches/expose-aboutconfig.patch b/patches/expose-aboutconfig.patch index e8dc013..64474f2 100644 --- a/patches/expose-aboutconfig.patch +++ b/patches/expose-aboutconfig.patch @@ -1,5 +1,5 @@ diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp -index 77491402cb..fc64d6c537 100644 +index df5658c723..984c99c8cf 100644 --- a/docshell/base/nsAboutRedirector.cpp +++ b/docshell/base/nsAboutRedirector.cpp @@ -101,8 +101,7 @@ static const RedirEntry kRedirMap[] = { diff --git a/patches/fenix-disable-crash-reporting.patch b/patches/fenix-disable-crash-reporting.patch new file mode 100644 index 0000000..9d55e73 --- /dev/null +++ b/patches/fenix-disable-crash-reporting.patch @@ -0,0 +1,357 @@ +diff --git a/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/worker/Extensions.kt b/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/worker/Extensions.kt +index d897b9af6f..2fb1be3150 100644 +--- a/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/worker/Extensions.kt ++++ b/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/worker/Extensions.kt +@@ -12,9 +12,5 @@ import java.io.IOException + * Indicates if an exception should be reported to the crash reporter. + */ + internal fun Exception.shouldReport(): Boolean { +- val isRecoverable = (this as? WebExtensionException)?.isRecoverable ?: true +- return cause !is IOException && +- cause !is CancellationException && +- this !is CancellationException && +- isRecoverable ++ return false + } +diff --git a/mobile/android/android-components/components/lib/crash/src/main/java/mozilla/components/lib/crash/service/GleanCrashReporterService.kt b/mobile/android/android-components/components/lib/crash/src/main/java/mozilla/components/lib/crash/service/GleanCrashReporterService.kt +index 8efdd24f23..9600f952ed 100644 +--- a/mobile/android/android-components/components/lib/crash/src/main/java/mozilla/components/lib/crash/service/GleanCrashReporterService.kt ++++ b/mobile/android/android-components/components/lib/crash/src/main/java/mozilla/components/lib/crash/service/GleanCrashReporterService.kt +@@ -100,7 +100,6 @@ class GleanCrashReporterService( + @SerialName("count") + data class Count(val label: String) : GleanCrashAction() { + override fun submit() { +- CrashMetrics.crashCount[label].add() + } + } + +@@ -151,11 +150,6 @@ class GleanCrashReporterService( + val minidumpHash: String?, + ) : PingCause() { + override fun setMetricsLater() { +- GleanCrash.cause.setLater("os_fault") +- remoteType?.let { GleanCrash.remoteType.setLater(it) } +- minidumpHash?.let { GleanCrash.minidumpSha256Hash.setLater(it) } +- +- extras?.let(::setExtraMetrics) + } + + private fun setExtraMetrics(extras: JsonObject) { +@@ -336,10 +330,6 @@ class GleanCrashReporterService( + val breadcrumbs: List? = null, + ) : PingCause() { + override fun setMetricsLater() { +- GleanCrash.cause.setLater("java_exception") +- GleanCrash.javaException.setLater( +- Json.decodeFromJsonElement(throwableJson), +- ) + } + } + } +@@ -356,49 +346,6 @@ class GleanCrashReporterService( + val startup: Boolean = false, + ) : GleanCrashAction() { + override fun submit() { +- // Perform all processing up-front in case an unexpected exception occurs. We don't +- // want to partially set Glean metrics. The Glean metric functions do not throw +- // exceptions. +- val setMetrics = cause.prepareSetMetrics() +- var setBreadcrumbs = {} +- if (breadcrumbs.isNotEmpty()) { +- val value = Json.decodeFromJsonElement( +- JsonArray( +- breadcrumbs.map { breadcrumb -> +- JsonObject( +- mapOf( +- "timestamp" to JsonPrimitive(breadcrumb.timestamp), +- "category" to JsonPrimitive(breadcrumb.category), +- "type" to JsonPrimitive(breadcrumb.type), +- "level" to JsonPrimitive(breadcrumb.level), +- "message" to JsonPrimitive(breadcrumb.message), +- "data" to JsonArray( +- breadcrumb.data.map { +- JsonObject( +- mapOf( +- "key" to JsonPrimitive(it.key), +- "value" to JsonPrimitive(it.value), +- ), +- ) +- }, +- ), +- ), +- ) +- }, +- ), +- ) +- setBreadcrumbs = { GleanCrash.breadcrumbs.set(value) } +- } +- +- // Set all metrics and submit the ping. We are guaranteed to not throw any +- // exceptions here, so the metrics will never be partially set. +- GleanEnvironment.uptime.setRawNanos(uptimeNanos) +- GleanCrash.processType.set(processType) +- GleanCrash.time.set(Date(timeMillis)) +- GleanCrash.startup.set(startup) +- setMetrics() +- setBreadcrumbs() +- Pings.crash.submit(reason) + } + } + } +@@ -544,17 +491,6 @@ class GleanCrashReporterService( + } + + override fun record(crash: Crash.UncaughtExceptionCrash) { +- recordCrashAction(GleanCrashAction.Count(UNCAUGHT_EXCEPTION_KEY)) +- recordCrashAction( +- GleanCrashAction.Ping( +- uptimeNanos = uptime(), +- processType = "main", +- timeMillis = crash.timestamp, +- reason = Pings.crashReasonCodes.crash, +- cause = GleanCrashAction.PingCause.JavaException(crash.throwable.toJson()), +- breadcrumbs = crash.breadcrumbs.map { it.toBreadcrumb() }, +- ), +- ) + } + + private fun getExtrasJson(path: String): JsonObject? { +@@ -633,50 +569,8 @@ class GleanCrashReporterService( + } + + override fun record(crash: Crash.NativeCodeCrash) { +- when (crash.processVisibility) { +- Crash.NativeCodeCrash.PROCESS_VISIBILITY_MAIN -> +- recordCrashAction(GleanCrashAction.Count(MAIN_PROCESS_NATIVE_CODE_CRASH_KEY)) +- Crash.NativeCodeCrash.PROCESS_VISIBILITY_FOREGROUND_CHILD -> +- recordCrashAction( +- GleanCrashAction.Count( +- FOREGROUND_CHILD_PROCESS_NATIVE_CODE_CRASH_KEY, +- ), +- ) +- Crash.NativeCodeCrash.PROCESS_VISIBILITY_BACKGROUND_CHILD -> +- recordCrashAction( +- GleanCrashAction.Count( +- BACKGROUND_CHILD_PROCESS_NATIVE_CODE_CRASH_KEY, +- ), +- ) +- } +- +- val processType = crash.processType ?: "main" +- +- if (crash.minidumpPath != null && crash.extrasPath != null) { +- MinidumpAnalyzer.load()?.run(crash.minidumpPath, crash.extrasPath, false) +- } +- +- val extrasJson = crash.extrasPath?.let { getExtrasJson(it) } +- +- val minidumpHash = crash.minidumpPath?.let { calculateMinidumpHash(it) } +- +- recordCrashAction( +- GleanCrashAction.Ping( +- uptimeNanos = uptime(), +- processType = processType, +- timeMillis = crash.timestamp, +- reason = Pings.crashReasonCodes.crash, +- cause = GleanCrashAction.PingCause.OsFault( +- remoteType = crash.remoteType, +- extras = extrasJson, +- minidumpHash = minidumpHash, +- ), +- breadcrumbs = crash.breadcrumbs.map { it.toBreadcrumb() }, +- ), +- ) + } + + override fun record(throwable: Throwable) { +- recordCrashAction(GleanCrashAction.Count(CAUGHT_EXCEPTION_KEY)) + } + } +diff --git a/mobile/android/android-components/components/lib/crash/src/main/java/mozilla/components/lib/crash/service/MozillaSocorroService.kt b/mobile/android/android-components/components/lib/crash/src/main/java/mozilla/components/lib/crash/service/MozillaSocorroService.kt +index 37fa83d76a..c18428dc85 100644 +--- a/mobile/android/android-components/components/lib/crash/src/main/java/mozilla/components/lib/crash/service/MozillaSocorroService.kt ++++ b/mobile/android/android-components/components/lib/crash/src/main/java/mozilla/components/lib/crash/service/MozillaSocorroService.kt +@@ -103,7 +103,7 @@ class MozillaSocorroService( + override val name: String = "Socorro" + + override fun createCrashReportUrl(identifier: String): String? { +- return "https://crash-stats.mozilla.org/report/index/$identifier" ++ return "" + } + + init { +@@ -556,7 +556,7 @@ class MozillaSocorroService( + } + + internal fun buildServerUrl(versionName: String): String = +- "https://crash-reports.mozilla.com/submit".toUri() ++ "".toUri() + .buildUpon() + .appendQueryParameter("id", appId) + .appendQueryParameter("version", versionName) +diff --git a/mobile/android/android-components/components/lib/crash-sentry/src/main/java/mozilla/components/lib/crash/sentry/SentryService.kt b/mobile/android/android-components/components/lib/crash-sentry/src/main/java/mozilla/components/lib/crash/sentry/SentryService.kt +index 5b057f2579..7613b7ac06 100644 +--- a/mobile/android/android-components/components/lib/crash-sentry/src/main/java/mozilla/components/lib/crash/sentry/SentryService.kt ++++ b/mobile/android/android-components/components/lib/crash-sentry/src/main/java/mozilla/components/lib/crash/sentry/SentryService.kt +@@ -44,7 +44,7 @@ class SentryService( + private val environment: String? = null, + private val sendEventForNativeCrashes: Boolean = false, + private val sentryProjectUrl: String? = null, +- private val sendCaughtExceptions: Boolean = true, ++ private val sendCaughtExceptions: Boolean = false, + ) : CrashReporterService { + + override val id: String = "new-sentry-instance" +diff --git a/mobile/android/fenix/app/build.gradle b/mobile/android/fenix/app/build.gradle +index d9a6045423..2f788179ee 100644 +--- a/mobile/android/fenix/app/build.gradle ++++ b/mobile/android/fenix/app/build.gradle +@@ -355,7 +355,7 @@ android.applicationVariants.configureEach { variant -> + + buildConfigField 'String', 'SENTRY_TOKEN', 'null' + if (!isDebug) { +- buildConfigField 'boolean', 'CRASH_REPORTING', 'true' ++ buildConfigField 'boolean', 'CRASH_REPORTING', 'false' + // Reading sentry token from local file (if it exists). In a release task on taskcluster it will be available. + try { + def token = new File("${rootDir}/.sentry_token").text.trim() +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +index 13db9f3c83..66ccccf955 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +@@ -504,10 +504,6 @@ open class FenixApplication : LocaleAwareApplication(), Provider { + } + + private fun setupCrashReporting() { +- components +- .analytics +- .crashReporter +- .install(this) + } + + protected open fun initializeNimbus() { +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Analytics.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Analytics.kt +index 1ad6a264c7..c9ea9932ca 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Analytics.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Analytics.kt +@@ -16,7 +16,6 @@ import mozilla.components.lib.crash.service.GleanCrashReporterService + import mozilla.components.lib.crash.service.MozillaSocorroService + import mozilla.components.support.ktx.android.content.isMainProcess + import mozilla.components.support.utils.BrowsersCache +-import mozilla.components.support.utils.RunWhenReadyQueue + import org.mozilla.fenix.BuildConfig + import org.mozilla.fenix.Config + import org.mozilla.fenix.HomeActivity +@@ -45,7 +44,6 @@ import org.mozilla.geckoview.BuildConfig.MOZ_UPDATE_CHANNEL + */ + class Analytics( + private val context: Context, +- private val runWhenReadyQueue: RunWhenReadyQueue, + ) { + val crashReporter: CrashReporter by lazyMonitored { + val services = mutableListOf() +@@ -57,7 +55,7 @@ class Analytics( + // we get most value out of nightly/beta logging anyway. + val shouldSendCaughtExceptions = when (Config.channel) { + ReleaseChannel.Release -> false +- else -> true ++ else -> false + } + val sentryService = SentryService( + context, +@@ -74,12 +72,7 @@ class Analytics( + + // We only want to initialize Sentry on startup on the main process. + if (context.isMainProcess()) { +- runWhenReadyQueue.runIfReadyOrQueue { +- sentryService.initIfNeeded() +- } + } +- +- services.add(sentryService) + } + + // The name "Fenix" here matches the product name on Socorro and is unrelated to the actual app name: +@@ -93,7 +86,6 @@ class Analytics( + releaseChannel = MOZ_UPDATE_CHANNEL, + distributionId = distributionId, + ) +- services.add(socorroService) + + val intent = Intent(context, HomeActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP +@@ -119,7 +111,7 @@ class Analytics( + appName = context.getString(R.string.app_name), + organizationName = "Mozilla", + ), +- enabled = true, ++ enabled = false, + nonFatalCrashIntent = pendingIntent, + useLegacyReporting = !context.settings().crashReportAlwaysSend && + !context.settings().useNewCrashReporterDialog, +@@ -161,10 +153,10 @@ class Analytics( + } + } + +-private fun isSentryEnabled() = !BuildConfig.SENTRY_TOKEN.isNullOrEmpty() ++private fun isSentryEnabled() = false + + private fun getSentryProjectUrl(): String? { +- val baseUrl = "https://sentry.io/organizations/mozilla/issues" ++ val baseUrl = "" + return when (Config.channel) { + ReleaseChannel.Nightly -> "$baseUrl/?project=6295546" + ReleaseChannel.Release -> "$baseUrl/?project=6375561" +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +index 7f19ba4304..fde794e31b 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +@@ -167,8 +167,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + } + + @VisibleForTesting +- internal val isCrashReportEnabledInBuild: Boolean = +- BuildConfig.CRASH_REPORTING && Config.channel.isReleased ++ internal val isCrashReportEnabledInBuild: Boolean = false + + override val preferences: SharedPreferences = + appContext.getSharedPreferences(FENIX_PREFERENCES, MODE_PRIVATE) +@@ -363,12 +362,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + default = true, + ) + +- val isCrashReportingEnabled: Boolean +- get() = isCrashReportEnabledInBuild && +- preferences.getBoolean( +- appContext.getPreferenceKey(R.string.pref_key_crash_reporter), +- true, +- ) ++ val isCrashReportingEnabled: Boolean = false + + val isRemoteDebuggingEnabled by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_remote_debugging), +@@ -2310,10 +2304,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + * A user preference indicating that crash reports should always be automatically sent. This can be updated + * through the unsubmitted crash dialog or through data choice preferences. + */ +- var crashReportAlwaysSend by booleanPreference( +- appContext.getPreferenceKey(R.string.pref_key_crash_reporting_always_report), +- default = false, +- ) ++ var crashReportAlwaysSend = false + + /** + * Indicates whether or not we should use the new crash reporter dialog. +diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/CrashHandler.java b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/CrashHandler.java +index 8e4b210580..e838c11913 100644 +--- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/CrashHandler.java ++++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/CrashHandler.java +@@ -38,7 +38,7 @@ public class CrashHandler implements Thread.UncaughtExceptionHandler { + private static final String LOGTAG = "GeckoCrashHandler"; + private static final Thread MAIN_THREAD = Thread.currentThread(); + private static final String DEFAULT_SERVER_URL = +- "https://crash-reports.mozilla.com/submit?id=%1$s&version=%2$s&buildid=%3$s"; ++ ""; + + // Context for getting device information + private @Nullable final Context mAppContext; diff --git a/patches/disable-nimbus.patch b/patches/fenix-disable-nimbus.patch similarity index 76% rename from patches/disable-nimbus.patch rename to patches/fenix-disable-nimbus.patch index 84b0f86..455d160 100644 --- a/patches/disable-nimbus.patch +++ b/patches/fenix-disable-nimbus.patch @@ -1,8 +1,8 @@ diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt -index 299d0c8ca1..2ade1e3835 100644 +index 1dfd8e2b51..0f11708e6d 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt -@@ -55,7 +55,6 @@ import org.mozilla.fenix.ext.requireComponents +@@ -53,7 +53,6 @@ import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.runIfFragmentIsAttached import org.mozilla.fenix.ext.settings import org.mozilla.fenix.home.HomeFragment @@ -10,7 +10,7 @@ index 299d0c8ca1..2ade1e3835 100644 import org.mozilla.fenix.settings.quicksettings.protections.cookiebanners.getCookieBannerUIMode import org.mozilla.fenix.shortcut.PwaOnboardingObserver import org.mozilla.fenix.theme.ThemeManager -@@ -175,11 +174,6 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { +@@ -167,10 +166,6 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { } private fun initTranslationsAction(context: Context, view: View) { @@ -18,11 +18,10 @@ index 299d0c8ca1..2ade1e3835 100644 - !FxNimbus.features.translations.value().mainFlowToolbarEnabled - ) { - return -- } + } val translationsAction = Toolbar.ActionButton( - AppCompatResources.getDrawable( -@@ -679,7 +673,6 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { +@@ -598,7 +593,6 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { override fun navToQuickSettingsSheet(tab: SessionState, sitePermissions: SitePermissions?) { val useCase = requireComponents.useCases.trackingProtectionUseCases @@ -31,7 +30,7 @@ index 299d0c8ca1..2ade1e3835 100644 lifecycleScope.launch { val cookieBannersStorage = requireComponents.core.cookieBannersStorage diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt -index 965c09e29b..0313634f86 100644 +index 1443661bb8..046ab28a6b 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt @@ -76,7 +76,6 @@ import org.mozilla.fenix.components.menu.store.MenuStore @@ -42,7 +41,7 @@ index 965c09e29b..0313634f86 100644 import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.deletebrowsingdata.deleteAndQuit import org.mozilla.fenix.theme.FirefoxTheme -@@ -305,8 +304,7 @@ class MenuDialogFragment : BottomSheetDialogFragment() { +@@ -306,8 +305,7 @@ class MenuDialogFragment : BottomSheetDialogFragment() { val isTranslationEngineSupported = browserStore.state.translationEngine.isEngineSupported ?: false val isTranslationSupported = @@ -53,10 +52,10 @@ index 965c09e29b..0313634f86 100644 val isWebCompatEnabled by store.observeAsState(store.state.isWebCompatEnabled) { it.isWebCompatEnabled diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt -index 6fb2b9ef98..ab22458d0e 100644 +index e7e19273f9..0de9fdf86d 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt -@@ -42,7 +42,6 @@ import org.mozilla.fenix.R +@@ -43,7 +43,6 @@ import org.mozilla.fenix.automotive.isAndroidAutomotiveAvailable import org.mozilla.fenix.components.accounts.FenixAccountManager import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings @@ -82,11 +81,17 @@ index 6fb2b9ef98..ab22458d0e 100644 } ?: false } -@@ -454,7 +451,7 @@ open class DefaultToolbarMenu( +@@ -454,13 +451,7 @@ open class DefaultToolbarMenu( addAppToHomeScreenItem.apply { visible = ::canAddAppToHomescreen }, if (shouldShowTopSites) addRemoveTopSitesItem else null, saveToCollectionItem, -- if (FxNimbus.features.print.value().browserPrintEnabled) printPageItem else null, +- if (FxNimbus.features.print.value().browserPrintEnabled && +- !context.isAndroidAutomotiveAvailable() +- ) { +- printPageItem +- } else { +- null +- }, + printPageItem, BrowserMenuDivider(), settingsItem, @@ -104,33 +109,29 @@ index a6f3b77a47..b2ce30c78f 100644 } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt -index b74145eb21..d01bd13d3d 100644 +index 43bea16286..5b239c74b3 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt -@@ -57,8 +57,8 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { +@@ -58,7 +58,7 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { } requirePreference(R.string.pref_key_nimbus_use_preview).apply { - isVisible = true -- isChecked = context.settings().nimbusUsePreview + isVisible = false -+ isChecked = false + isChecked = context.settings().nimbusUsePreview onPreferenceChangeListener = SharedPreferenceUpdater() } - -@@ -236,8 +236,8 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { +@@ -225,7 +225,7 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { } requirePreference(R.string.pref_key_use_remote_search_configuration).apply { - isVisible = true -- isChecked = context.settings().useRemoteSearchConfiguration + isVisible = false -+ isChecked = false + isChecked = context.settings().useRemoteSearchConfiguration onPreferenceChangeListener = object : SharedPreferenceUpdater() { override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { - if (newValue as? Boolean == true) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt -index 64492271c3..0d070de84d 100644 +index 325e5d2141..f9a3a663b4 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt @@ -65,7 +65,6 @@ import org.mozilla.fenix.ext.openSetDefaultBrowserOption @@ -151,11 +152,10 @@ index 64492271c3..0d070de84d 100644 } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { -@@ -206,11 +204,8 @@ class SettingsFragment : PreferenceFragmentCompat() { - override fun onResume() { +@@ -207,10 +205,8 @@ class SettingsFragment : PreferenceFragmentCompat() { super.onResume() -- // Use nimbus to set the title, and a trivial addition + // Use nimbus to set the title, and a trivial addition - val nimbusValidation = FxNimbus.features.nimbusValidation.value() - - val title = nimbusValidation.settingsTitle @@ -165,7 +165,7 @@ index 64492271c3..0d070de84d 100644 showToolbar("$title$suffix") -@@ -713,7 +708,6 @@ class SettingsFragment : PreferenceFragmentCompat() { +@@ -713,7 +709,6 @@ class SettingsFragment : PreferenceFragmentCompat() { @VisibleForTesting internal fun setupCookieBannerPreference() { @@ -229,23 +229,10 @@ index 472e3bf5a8..9cf2df1b14 100644 initialFrom = translationsDialogState?.initialFrom, onBackClicked = { translationsVisibility = true }, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 72493a2c21..e2778071b6 100644 +index 7f19ba4304..fa1bbae2c5 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -189,10 +189,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { - /** - * Indicates whether or not top sites should be shown on the home screen. - */ -- var showTopSitesFeature by lazyFeatureFlagPreference( -+ var showTopSitesFeature by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_show_top_sites), -- featureFlag = true, -- default = { homescreenSections[HomeScreenSection.TOP_SITES] == true }, -+ default = true, - ) - - var numberOfAppLaunches by intPreference( -@@ -238,10 +237,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -225,10 +225,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { default = "", ) @@ -257,7 +244,7 @@ index 72493a2c21..e2778071b6 100644 var utmParamsKnown by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_utm_params_known), -@@ -329,10 +325,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -316,10 +313,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { /** * Indicates if the wallpaper onboarding dialog should be shown. */ @@ -270,7 +257,19 @@ index 72493a2c21..e2778071b6 100644 ) var openLinksInAPrivateTab by booleanPreference( -@@ -546,10 +541,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -407,10 +403,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + persistDefaultIfNotExists = true, + ) + +- var isExperimentationEnabled by booleanPreference( +- appContext.getPreferenceKey(R.string.pref_key_experimentation_v2), +- default = isTelemetryEnabled, +- ) ++ var isExperimentationEnabled = false + + var isOverrideTPPopupsForPerformanceTest = false + +@@ -529,10 +522,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { default = false, ) @@ -282,29 +281,7 @@ index 72493a2c21..e2778071b6 100644 var isFirstNimbusRun: Boolean by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_is_first_run), -@@ -1186,7 +1178,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { - @VisibleForTesting - internal var recentSearchSuggestionsEnabled by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_show_recent_search_suggestions), -- default = true, -+ default = false, - ) - - /** -@@ -1667,10 +1659,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { - get() = - FxNimbus.features.homescreen.value().sectionsEnabled - -- var historyMetadataUIFeature by lazyFeatureFlagPreference( -+ var historyMetadataUIFeature by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_history_metadata_feature), -- default = { homescreenSections[HomeScreenSection.RECENT_EXPLORATIONS] == true }, -- featureFlag = true, -+ default = true, - ) - - /** -@@ -1685,28 +1676,25 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -1674,10 +1664,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { /** * Indicates if home onboarding dialog should be shown. */ @@ -317,29 +294,7 @@ index 72493a2c21..e2778071b6 100644 ) /** - * Indicates if the recent tabs functionality should be visible. - */ -- var showRecentTabsFeature by lazyFeatureFlagPreference( -+ var showRecentTabsFeature by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_recent_tabs), -- featureFlag = true, -- default = { homescreenSections[HomeScreenSection.JUMP_BACK_IN] == true }, -+ default = true, - ) - - /** - * Indicates if the recent saved bookmarks functionality should be visible. - */ -- var showBookmarksHomeFeature by lazyFeatureFlagPreference( -+ var showBookmarksHomeFeature by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_customization_bookmarks), -- default = { homescreenSections[HomeScreenSection.BOOKMARKS] == true }, -- featureFlag = true, -+ default = true, - ) - - var signedInFxaAccount by booleanPreference( -@@ -1857,7 +1845,6 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -1846,7 +1835,6 @@ class Settings(private val appContext: Context) : PreferencesHolder { isLauncherIntent: Boolean, ): Boolean { return if (featureEnabled && !hasUserBeenOnboarded && isLauncherIntent) { @@ -347,32 +302,20 @@ index 72493a2c21..e2778071b6 100644 true } else { false -@@ -1918,10 +1905,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -1891,11 +1879,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { /** * Indicates whether or not to use remote server search configuration. */ -- var useRemoteSearchConfiguration by booleanPreference( +- var useRemoteSearchConfiguration by lazyFeatureFlagPreference( - key = appContext.getPreferenceKey(R.string.pref_key_use_remote_search_configuration), -- default = FxNimbus.features.remoteSearchConfiguration.value().enabled, +- default = { FxNimbus.features.remoteSearchConfiguration.value().enabled }, +- featureFlag = true, - ) + var useRemoteSearchConfiguration = false /** * Indicates if the menu CFR should be displayed to the user. -@@ -2071,10 +2055,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { - /** - * Indicates if Recent Search Suggestions are enabled. - */ -- var isRecentSearchesVisible by lazyFeatureFlagPreference( -+ var isRecentSearchesVisible by booleanPreference( - key = appContext.getPreferenceKey(R.string.pref_key_enable_recent_searches), -- default = { FxNimbus.features.recentSearches.value().enabled }, -- featureFlag = true, -+ default = true, - ) - - /** -@@ -2185,8 +2168,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -2152,8 +2136,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { /** * Indicates if the feature to close synced tabs is enabled. */ @@ -382,19 +325,6 @@ index 72493a2c21..e2778071b6 100644 /** * Returns the height of the bottom toolbar. -@@ -2386,10 +2368,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { - /** - * Indicates whether or not we should use the new bookmarks UI. - */ -- var useNewBookmarks by lazyFeatureFlagPreference( -+ var useNewBookmarks by booleanPreference( - key = appContext.getPreferenceKey(R.string.pref_key_use_new_bookmarks_ui), -- default = { true }, -- featureFlag = true, -+ default = true, - ) - - var bookmarkListSortOrder by stringPreference( diff --git a/mobile/android/fenix/app/src/main/res/xml/preferences.xml b/mobile/android/fenix/app/src/main/res/xml/preferences.xml index 4c6b14bf87..08eda05d0c 100644 --- a/mobile/android/fenix/app/src/main/res/xml/preferences.xml diff --git a/patches/fenix-disable-telemetry.patch b/patches/fenix-disable-telemetry.patch new file mode 100644 index 0000000..cc15d96 --- /dev/null +++ b/patches/fenix-disable-telemetry.patch @@ -0,0 +1,371 @@ +diff --git a/mobile/android/android-components/components/browser/engine-gecko/build.gradle b/mobile/android/android-components/components/browser/engine-gecko/build.gradle +index 7941343807..e56e90a005 100644 +--- a/mobile/android/android-components/components/browser/engine-gecko/build.gradle ++++ b/mobile/android/android-components/components/browser/engine-gecko/build.gradle +@@ -58,7 +58,7 @@ android { + // Set configuration for the Glean parser to extract metrics.yaml + // file from AAR dependencies of this project rather than look + // for it into the project directory. +-ext.allowMetricsFromAAR = true ++ext.allowMetricsFromAAR = false + + dependencies { + implementation project(':concept-engine') +diff --git a/mobile/android/fenix/app/build.gradle b/mobile/android/fenix/app/build.gradle +index d9a6045423..84073eaeee 100644 +--- a/mobile/android/fenix/app/build.gradle ++++ b/mobile/android/fenix/app/build.gradle +@@ -313,7 +313,7 @@ android.applicationVariants.configureEach { variant -> + project.logger.debug("Application ID: " + [variant.applicationId, variant.buildType.applicationIdSuffix].findAll().join()) + project.logger.debug("Build type: " + variant.buildType.name) + project.logger.debug("Flavor: " + variant.flavorName) +- project.logger.debug("Telemetry enabled: " + !isDebug) ++ project.logger.debug("Telemetry enabled: " + false) + + if (useReleaseVersioning) { + // The Google Play Store does not allow multiple APKs for the same app that all have the +@@ -366,7 +366,7 @@ android.applicationVariants.configureEach { variant -> + } + + if (!isDebug) { +- buildConfigField 'boolean', 'TELEMETRY', 'true' ++ buildConfigField 'boolean', 'TELEMETRY', 'false' + } else { + buildConfigField 'boolean', 'TELEMETRY', 'false' + } +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +index 5ba4561291..d1307b220c 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +@@ -41,7 +41,7 @@ object FeatureFlags { + /** + * Enable Meta attribution. + */ +- const val META_ATTRIBUTION_ENABLED = true ++ const val META_ATTRIBUTION_ENABLED = false + + /** + * Enables the Unified Trust Panel. +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt +index d3b21828c2..edea7b4d0d 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt +@@ -188,7 +188,7 @@ class Components(private val context: Context) { + AddonManager(core.store, core.engine, addonsProvider, addonUpdater) + } + +- val analytics by lazyMonitored { Analytics(context, performance.visualCompletenessQueue.queue) } ++ val analytics by lazyMonitored { Analytics(context) } + val nimbus by lazyMonitored { NimbusComponents(context) } + val publicSuffixList by lazyMonitored { PublicSuffixList(context) } + val clipboardHandler by lazyMonitored { ClipboardHandler(context) } +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt +index cfbdaba62c..e8c4289841 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt +@@ -64,14 +64,10 @@ import mozilla.components.feature.search.SearchApplicationName + import mozilla.components.feature.search.SearchDeviceType + import mozilla.components.feature.search.SearchEngineSelector + import mozilla.components.feature.search.SearchUpdateChannel +-import mozilla.components.feature.search.middleware.AdsTelemetryMiddleware + import mozilla.components.feature.search.middleware.SearchExtraParams + import mozilla.components.feature.search.middleware.SearchMiddleware + import mozilla.components.feature.search.region.RegionMiddleware + import mozilla.components.feature.search.storage.SearchEngineSelectorConfig +-import mozilla.components.feature.search.telemetry.SerpTelemetryRepository +-import mozilla.components.feature.search.telemetry.ads.AdsTelemetry +-import mozilla.components.feature.search.telemetry.incontent.InContentTelemetry + import mozilla.components.feature.session.HistoryDelegate + import mozilla.components.feature.session.middleware.LastAccessMiddleware + import mozilla.components.feature.session.middleware.undo.UndoMiddleware +@@ -133,7 +129,6 @@ import org.mozilla.fenix.settings.advanced.getSelectedLocale + import org.mozilla.fenix.share.DefaultSentFromFirefoxManager + import org.mozilla.fenix.share.DefaultSentFromStorage + import org.mozilla.fenix.share.SaveToPDFMiddleware +-import org.mozilla.fenix.telemetry.TelemetryMiddleware + import org.mozilla.fenix.utils.getUndoDelay + import org.mozilla.geckoview.GeckoRuntime + import java.util.UUID +@@ -312,7 +307,6 @@ class Core( + RecentlyClosedMiddleware(recentlyClosedTabsStorage, RECENTLY_CLOSED_MAX), + DownloadMiddleware(context, DownloadService::class.java), + ReaderViewMiddleware(), +- TelemetryMiddleware(context, context.settings(), metrics, crashReporter), + ThumbnailsMiddleware(thumbnailStorage), + UndoMiddleware(context.getUndoDelay()), + RegionMiddleware(context, locationService), +@@ -325,7 +319,6 @@ class Core( + ), + RecordingDevicesMiddleware(context, context.components.notificationsDelegate), + PromptMiddleware(), +- AdsTelemetryMiddleware(adsTelemetry), + LastMediaAccessMiddleware(), + HistoryMetadataMiddleware(historyMetadataService), + SessionPrioritizationMiddleware(), +@@ -364,26 +357,6 @@ class Core( + // Install the "icons" WebExtension to automatically load icons for every visited website. + icons.install(engine, this) + +- CoroutineScope(Dispatchers.Main).launch { +- val readJson = { context.assets.readJSONObject("search/search_telemetry_v2.json") } +- val providerList = withContext(Dispatchers.IO) { +- SerpTelemetryRepository( +- rootStorageDirectory = context.filesDir, +- readJson = readJson, +- collectionName = COLLECTION_NAME, +- serverUrl = if (context.settings().useProductionRemoteSettingsServer) { +- REMOTE_PROD_ENDPOINT_URL +- } else { +- REMOTE_STAGE_ENDPOINT_URL +- }, +- ).updateProviderList() +- } +- // Install the "ads" WebExtension to get the links in an partner page. +- adsTelemetry.install(engine, this@apply, providerList) +- // Install the "cookies" WebExtension and tracks user interaction with SERPs. +- searchTelemetry.install(engine, this@apply, providerList) +- } +- + WebNotificationFeature( + context, + engine, +@@ -434,18 +407,6 @@ class Core( + BrowserIcons(context, client) + } + +- val metrics by lazyMonitored { +- context.components.analytics.metrics +- } +- +- val adsTelemetry by lazyMonitored { +- AdsTelemetry() +- } +- +- val searchTelemetry by lazyMonitored { +- InContentTelemetry() +- } +- + /** + * Shortcut component for managing shortcuts on the device home screen. + */ +@@ -735,7 +696,7 @@ class Core( + const val METADATA_SHORTCUT_SUGGESTION_LIMIT = 20 + + // collection name to fetch from server for SERP telemetry +- const val COLLECTION_NAME = "search-telemetry-v2" ++ const val COLLECTION_NAME = "" + internal const val REMOTE_PROD_ENDPOINT_URL = "https://firefox.settings.services.mozilla.com" + internal const val REMOTE_STAGE_ENDPOINT_URL = "https://firefox.settings.services.allizom.org" + } +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/GleanHelper.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/GleanHelper.kt +index d218b89663..fc9bdc4561 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/GleanHelper.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/GleanHelper.kt +@@ -29,21 +29,14 @@ import org.mozilla.fenix.nimbus.FxNimbus + fun initializeGlean(applicationContext: Context, logger: Logger, isTelemetryUploadEnabled: Boolean, client: Client) { + logger.debug("Initializing Glean (uploadEnabled=$isTelemetryUploadEnabled})") + +- // for performance reasons, this is only available in Nightly or Debug builds +- val customEndpoint = if (Config.channel.isNightlyOrDebug) { +- // for testing, if custom glean server url is set in the secret menu, use it to initialize Glean +- getCustomGleanServerUrlIfAvailable(applicationContext) +- } else { +- null +- } +- + val configuration = Configuration( ++ serverEndpoint = "", + channel = BuildConfig.BUILD_TYPE, + httpClient = ConceptFetchHttpUploader( + lazy(LazyThreadSafetyMode.NONE) { client }, + supportsOhttp = true, + ), +- enableEventTimestamps = FxNimbus.features.glean.value().enableEventTimestamps, ++ enableEventTimestamps = false, + delayPingLifetimeIo = FxNimbus.features.glean.value().delayPingLifetimeIo, + pingLifetimeThreshold = FxNimbus.features.glean.value().pingLifetimeThreshold, + pingLifetimeMaxTime = FxNimbus.features.glean.value().pingLifetimeMaxTime, +@@ -59,8 +52,8 @@ fun initializeGlean(applicationContext: Context, logger: Logger, isTelemetryUplo + + Glean.initialize( + applicationContext = applicationContext, +- configuration = configuration.setCustomEndpointIfAvailable(customEndpoint), +- uploadEnabled = isTelemetryUploadEnabled, ++ configuration = configuration, ++ uploadEnabled = false, + buildInfo = GleanBuildInfo.buildInfo, + ) + } +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +index ea4ff1e0dd..84f04bd06d 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +@@ -70,9 +70,9 @@ class GleanMetricsService( + private val activationPing = ActivationPing(context) + + override fun start() { +- logger.debug("Enabling Glean.") ++ logger.debug("Not Enabling Glean.") + // Initialization of Glean already happened in FenixApplication. +- Glean.setCollectionEnabled(true) ++ Glean.setCollectionEnabled(false) + + if (initialized) return + initialized = true +@@ -86,8 +86,6 @@ class GleanMetricsService( + // These two things actually happen in parallel, but that should be ok because Glean + // can handle events being recorded before it's initialized. + Glean.registerPings(Pings) +- +- activationPing.checkAndSend() + } + } + +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt +index 9d54f66a65..9b239216b2 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt +@@ -273,9 +273,9 @@ internal class DefaultMetricsStorage( + * - user has installed as a result of a campaign + * - tracking is still enabled through Nimbus + */ ++ @Suppress("UNUSED_PARAMETER") + fun shouldSendGenerally(context: Context): Boolean { +- return context.settings().adjustCampaignId.isNotEmpty() && +- FxNimbus.features.growthData.value().enabled ++ return false + } + + fun getInstalledTime(context: Context): Long = context.packageManager +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt +index 36d4b4c349..af2ba6479e 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt +@@ -102,10 +102,7 @@ private fun Context.reportError(message: String, e: Throwable) { + * This fix should be upstreamed as part of: https://github.com/mozilla/application-services/issues/4333 + */ + fun NimbusException.isReportableError(): Boolean { +- return when (this) { +- is NimbusException.ClientException -> false +- else -> true +- } ++ return false + } + + /** +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/nimbus/controller/NimbusBranchesController.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/nimbus/controller/NimbusBranchesController.kt +index c1b54d7f27..7dd953d504 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/nimbus/controller/NimbusBranchesController.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/nimbus/controller/NimbusBranchesController.kt +@@ -42,34 +42,8 @@ class NimbusBranchesController( + ) : NimbusBranchesAdapterDelegate { + + override fun onBranchItemClicked(branch: Branch) { +- val telemetryEnabled = context.settings().isTelemetryEnabled +- val experimentsEnabled = context.settings().isExperimentationEnabled + + updateOptInState(branch) +- +- if (!telemetryEnabled && !experimentsEnabled) { +- context.getRootView()?.let { v -> +- Snackbar.make( +- snackBarParentView = v, +- snackbarState = SnackbarState( +- message = context.getString(R.string.experiments_snackbar), +- duration = SnackbarState.Duration.Preset.Long, +- action = Action( +- label = context.getString(R.string.experiments_snackbar_button), +- onClick = { +- navController.navigateWithBreadcrumb( +- directions = NimbusBranchesFragmentDirections +- .actionNimbusBranchesFragmentToDataChoicesFragment(), +- navigateFrom = "NimbusBranchesController", +- navigateTo = "ActionNimbusBranchesFragmentToDataChoicesFragment", +- crashReporter = context.components.analytics.crashReporter, +- ) +- }, +- ), +- ), +- ).show() +- } +- } + } + + private fun updateOptInState(branch: Branch) { +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt +index e5ab956ac3..0356328074 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt +@@ -330,8 +330,7 @@ class OnboardingFragment : Fragment() { + } + + if (!settings.isTelemetryEnabled) { +- Pings.onboardingOptOut.setEnabled(true) +- Pings.onboardingOptOut.submit() ++ Pings.onboardingOptOut.setEnabled(false) + } + + startMetricsIfEnabled( +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +index 7f19ba4304..28e2b0178d 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +@@ -375,25 +375,13 @@ class Settings(private val appContext: Context) : PreferencesHolder { + default = false, + ) + +- var isTelemetryEnabled by booleanPreference( +- appContext.getPreferenceKey(R.string.pref_key_telemetry), +- default = true, +- ) ++ var isTelemetryEnabled = false + +- var isMarketingTelemetryEnabled by booleanPreference( +- appContext.getPreferenceKey(R.string.pref_key_marketing_telemetry), +- default = false, +- ) ++ var isMarketingTelemetryEnabled = false + +- var hasMadeMarketingTelemetrySelection by booleanPreference( +- appContext.getPreferenceKey(R.string.pref_key_marketing_telemetry_selection_made), +- default = false, +- ) ++ var hasMadeMarketingTelemetrySelection = true + +- var hasAcceptedTermsOfService by booleanPreference( +- appContext.getPreferenceKey(R.string.pref_key_terms_accepted), +- default = false, +- ) ++ var hasAcceptedTermsOfService = true + + /** + * The daily usage ping is not normally tied to normal telemetry. We set the default value to +@@ -401,11 +389,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + * sure that users who upgrade and had telemetry disabled don't start sending the + * daily usage ping telemetry. + */ +- var isDailyUsagePingEnabled by booleanPreference( +- appContext.getPreferenceKey(R.string.pref_key_daily_usage_ping), +- default = isTelemetryEnabled, +- persistDefaultIfNotExists = true, +- ) ++ var isDailyUsagePingEnabled = false + + var isExperimentationEnabled by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_experimentation_v2), +diff --git a/mobile/android/fenix/app/src/main/res/xml/preferences.xml b/mobile/android/fenix/app/src/main/res/xml/preferences.xml +index 4c6b14bf87..0d4b59ca91 100644 +--- a/mobile/android/fenix/app/src/main/res/xml/preferences.xml ++++ b/mobile/android/fenix/app/src/main/res/xml/preferences.xml +@@ -141,11 +141,6 @@ + app:iconSpaceReserved="false" + android:title="@string/preferences_notifications" /> + +- +- + + + +- + + nsresult { +- // On Android always enable Glean upload. +- let upload_enabled = true; ++ // On Android always disable Glean upload. ++ let upload_enabled = false; + // Don't set up an uploader. + let uploader = None; + +@@ -155,7 +155,7 @@ fn build_configuration( + if app_id_override == "thunderbird.desktop" { + String::from("https://incoming.thunderbird.net") + } else { +- String::from("https://incoming.telemetry.mozilla.org") ++ String::from("") + } + }; + +@@ -190,9 +190,9 @@ fn build_configuration( + trim_data_to_registered_pings: true, + log_level: None, + rate_limit, +- enable_event_timestamps: true, ++ enable_event_timestamps: false, + experimentation_id: None, +- enable_internal_pings: true, ++ enable_internal_pings: false, + ping_schedule: pings::ping_schedule(), + ping_lifetime_threshold: 0, + ping_lifetime_max_time: Duration::ZERO, +@@ -373,8 +373,8 @@ fn fog_test_reset_internal( + ) -> Result<(), nsresult> { + let (mut conf, client_info) = build_configuration(data_path_override, app_id_override)?; + +- // On Android always enable Glean upload. +- conf.upload_enabled = true; ++ // On Android always disable Glean upload. ++ conf.upload_enabled = false; + + // Don't accidentally send "main" pings during tests. + conf.use_core_mps = false; +diff --git a/toolkit/components/glean/src/init/viaduct_uploader.rs b/toolkit/components/glean/src/init/viaduct_uploader.rs +index b61d7e2036..cc8e1feb48 100644 +--- a/toolkit/components/glean/src/init/viaduct_uploader.rs ++++ b/toolkit/components/glean/src/init/viaduct_uploader.rs +@@ -117,7 +117,7 @@ fn ohttp_upload(upload_request: PingUploadRequest) -> Result Result Result, ViaductUploaderError> { + const OHTTP_CONFIG_URL: &str = +- "https://prod.ohttp-gateway.prod.webservices.mozgcp.net/ohttp-configs"; ++ ""; + log::trace!("Getting OHTTP config from {}", OHTTP_CONFIG_URL); + let parsed_config_url = Url::parse(OHTTP_CONFIG_URL)?; + Ok(Request::get(parsed_config_url).send()?.body) +diff --git a/toolkit/components/telemetry/app/TelemetryControllerBase.sys.mjs b/toolkit/components/telemetry/app/TelemetryControllerBase.sys.mjs +index cf0a7bd372..a4a9db33cf 100644 +--- a/toolkit/components/telemetry/app/TelemetryControllerBase.sys.mjs ++++ b/toolkit/components/telemetry/app/TelemetryControllerBase.sys.mjs +@@ -85,30 +85,8 @@ export var TelemetryControllerBase = Object.freeze({ + * Set the Telemetry core recording flag for Unified Telemetry. + */ + setTelemetryRecordingFlags() { +- // Enable extended Telemetry on pre-release channels and disable it +- // on Release/ESR. +- let prereleaseChannels = [ +- "nightly", +- "nightly-autoland", +- "nightly-try", +- "aurora", +- "beta", +- ]; +- if (!AppConstants.MOZILLA_OFFICIAL) { +- // Turn extended telemetry for local developer builds. +- prereleaseChannels.push("default"); +- } +- const isPrereleaseChannel = prereleaseChannels.includes( +- AppConstants.MOZ_UPDATE_CHANNEL +- ); +- const isReleaseCandidateOnBeta = +- AppConstants.MOZ_UPDATE_CHANNEL === "release" && +- Services.prefs.getCharPref("app.update.channel", null) === "beta"; +- Services.telemetry.canRecordBase = true; +- Services.telemetry.canRecordExtended = +- isPrereleaseChannel || +- isReleaseCandidateOnBeta || +- Services.prefs.getBoolPref(this.Preferences.OverridePreRelease, false); ++ Services.telemetry.canRecordBase = false; ++ Services.telemetry.canRecordExtended = false; + }, + + /** +diff --git a/toolkit/components/telemetry/app/TelemetryReportingPolicy.sys.mjs b/toolkit/components/telemetry/app/TelemetryReportingPolicy.sys.mjs +index 1e45187924..116e93ca05 100644 +--- a/toolkit/components/telemetry/app/TelemetryReportingPolicy.sys.mjs ++++ b/toolkit/components/telemetry/app/TelemetryReportingPolicy.sys.mjs +@@ -279,11 +279,7 @@ var TelemetryReportingPolicyImpl = { + * false, we never request upload or deletion. + */ + get dataSubmissionEnabled() { +- // Default is true because we are opt-out. +- return Services.prefs.getBoolPref( +- TelemetryUtils.Preferences.DataSubmissionEnabled, +- true +- ); ++ return false; + }, + + get currentPolicyVersion() { +@@ -715,8 +711,8 @@ var TelemetryReportingPolicyImpl = { + + return this._ensureUserIsNotifiedPromise.then(() => { + // The user has been notified and interacted with the modal. +- // Glean can now init on shutdown if necessary. +- Services.prefs.setBoolPref("telemetry.fog.init_on_shutdown", true); ++ // Glean can not init on shutdown if necessary. ++ Services.prefs.setBoolPref("telemetry.fog.init_on_shutdown", false); + }); + }, + +diff --git a/toolkit/components/telemetry/app/UsageReporting.sys.mjs b/toolkit/components/telemetry/app/UsageReporting.sys.mjs +index 4a3e1de32d..90819b39da 100644 +--- a/toolkit/components/telemetry/app/UsageReporting.sys.mjs ++++ b/toolkit/components/telemetry/app/UsageReporting.sys.mjs +@@ -43,9 +43,8 @@ export var UsageReporting = { + `${SLUG}: uploadEnabled=${uploadEnabled}, profileID='${profileID}', profileGroupID='${profileGroupID}'` + ); + +- // Usage deletion requests can always be sent. They are +- // always sent in response to user action. +- GleanPings.usageDeletionRequest.setEnabled(true); ++ // Usage deletion requests can never be sent. ++ GleanPings.usageDeletionRequest.setEnabled(false); + + // Usage pings should only be sent when upload is enabled. + // Eventually, Glean will persist this setting. +diff --git a/toolkit/components/telemetry/core/Telemetry.cpp b/toolkit/components/telemetry/core/Telemetry.cpp +index 64c53be02c..b4940c3aac 100644 +--- a/toolkit/components/telemetry/core/Telemetry.cpp ++++ b/toolkit/components/telemetry/core/Telemetry.cpp +@@ -885,7 +885,7 @@ NS_IMETHODIMP + TelemetryImpl::GetIsOfficialTelemetry(bool* ret) { + #if defined(MOZILLA_OFFICIAL) && defined(MOZ_TELEMETRY_REPORTING) && \ + !defined(DEBUG) +- *ret = true; ++ *ret = false; + #else + *ret = false; + #endif +@@ -904,7 +904,7 @@ already_AddRefed TelemetryImpl::CreateTelemetryInstance() { + #ifndef FUZZING + if (XRE_IsParentProcess() || XRE_IsContentProcess() || XRE_IsGPUProcess() || + XRE_IsRDDProcess() || XRE_IsSocketProcess() || XRE_IsUtilityProcess()) { +- useTelemetry = true; ++ useTelemetry = false; + } + #endif + #ifdef MOZ_BACKGROUNDTASKS +diff --git a/toolkit/components/telemetry/core/TelemetryCommon.cpp b/toolkit/components/telemetry/core/TelemetryCommon.cpp +index a52d8e0a64..f759be66d4 100644 +--- a/toolkit/components/telemetry/core/TelemetryCommon.cpp ++++ b/toolkit/components/telemetry/core/TelemetryCommon.cpp +@@ -47,17 +47,16 @@ bool IsInDataset(uint32_t aDataset, uint32_t aContainingDataset) { + + bool CanRecordDataset(uint32_t aDataset, bool aCanRecordBase, + bool aCanRecordExtended) { +- // If we are extended telemetry is enabled, we are allowed to record ++ // If we are extended telemetry is enabled, we are not allowed to record + // regardless of the dataset. + if (aCanRecordExtended) { +- return true; ++ return false; + } + + // If base telemetry data is enabled and we're trying to record base +- // telemetry, allow it. +- if (aCanRecordBase && +- IsInDataset(aDataset, nsITelemetry::DATASET_ALL_CHANNELS)) { +- return true; ++ // telemetry, do not allow it. ++ if (aCanRecordBase) { ++ return false; + } + + // We're not recording extended telemetry or this is not the base +diff --git a/toolkit/library/rust/gkrust-features.mozbuild b/toolkit/library/rust/gkrust-features.mozbuild +index a19af5bd9d..66d8947acd 100644 +--- a/toolkit/library/rust/gkrust-features.mozbuild ++++ b/toolkit/library/rust/gkrust-features.mozbuild +@@ -60,8 +60,7 @@ if CONFIG["MOZ_WEBRTC"]: + # We need to tell Glean it is being built with Gecko. + gkrust_features += ["glean_with_gecko"] + +-if not CONFIG["MOZILLA_OFFICIAL"]: +- gkrust_features += ["glean_disable_upload"] ++gkrust_features += ["glean_disable_upload"] + + if CONFIG["MOZ_ENABLE_DBUS"]: + gkrust_features += ["with_dbus"] +diff --git a/toolkit/modules/AppConstants.sys.mjs b/toolkit/modules/AppConstants.sys.mjs +index a794e82288..33949b2b02 100644 +--- a/toolkit/modules/AppConstants.sys.mjs ++++ b/toolkit/modules/AppConstants.sys.mjs +@@ -35,13 +35,13 @@ export var AppConstants = Object.freeze({ + + MOZ_SERVICES_SYNC: @MOZ_SERVICES_SYNC_BOOL@, + +- MOZ_DATA_REPORTING: @MOZ_DATA_REPORTING_BOOL@, ++ MOZ_DATA_REPORTING: false, + + MOZ_SANDBOX: @MOZ_SANDBOX_BOOL@, + + MOZ_TELEMETRY_REPORTING: + #ifdef MOZ_TELEMETRY_REPORTING +- true, ++ false, + #else + false, + #endif +diff --git a/tools/@types/subs/AppConstants.sys.d.mts b/tools/@types/subs/AppConstants.sys.d.mts +index 04273576bd..25e3bab7cd 100644 +--- a/tools/@types/subs/AppConstants.sys.d.mts ++++ b/tools/@types/subs/AppConstants.sys.d.mts +@@ -32,12 +32,12 @@ export const AppConstants: Readonly<{ + + MOZ_SERVICES_SYNC: boolean; + +- MOZ_DATA_REPORTING: boolean; ++ MOZ_DATA_REPORTING: false; + + MOZ_SANDBOX: boolean; + + // #ifdef MOZ_TELEMETRY_REPORTING +- MOZ_TELEMETRY_REPORTING: boolean; ++ MOZ_TELEMETRY_REPORTING: false; + + MOZ_UPDATER: boolean; + diff --git a/patches/gecko-liberate.patch b/patches/gecko-liberate.patch index 9447037..e8bf526 100644 --- a/patches/gecko-liberate.patch +++ b/patches/gecko-liberate.patch @@ -1,5 +1,5 @@ diff --git a/mobile/android/geckoview/build.gradle b/mobile/android/geckoview/build.gradle -index 4afaf2493b..458ef0d0b1 100644 +index b6305f62be..8b5708dc1b 100644 --- a/mobile/android/geckoview/build.gradle +++ b/mobile/android/geckoview/build.gradle @@ -218,7 +218,7 @@ dependencies { @@ -11,95 +11,11 @@ index 4afaf2493b..458ef0d0b1 100644 implementation "org.yaml:snakeyaml:2.2" implementation libs.androidx.lifecycle.common -diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/WebAuthnTokenManager.java b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/WebAuthnTokenManager.java -index d688ff87f2..80b049ccac 100644 ---- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/WebAuthnTokenManager.java -+++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/WebAuthnTokenManager.java -@@ -193,27 +193,14 @@ import org.mozilla.gecko.util.WebAuthnUtils; - - final Task intentTask; - -- if (BuildConfig.MOZILLA_OFFICIAL) { -- // Certain Fenix builds and signing keys are whitelisted for Web Authentication. -- // See https://wiki.mozilla.org/Security/Web_Authentication -- // -- // Third party apps will need to get whitelisted themselves. -- final Fido2PrivilegedApiClient fidoClient = -- Fido.getFido2PrivilegedApiClient(GeckoAppShell.getApplicationContext()); -- -- intentTask = fidoClient.getRegisterPendingIntent(browserOptions); -- } else { -- // For non-official builds, websites have to opt-in to permit the -- // particular version of Gecko to perform WebAuthn operations on -- // them. See https://developers.google.com/digital-asset-links -- // for the general form, and Step 1 of -- // https://developers.google.com/identity/fido/android/native-apps -- // for details about doing this correctly for the FIDO2 API. -- final Fido2ApiClient fidoClient = -- Fido.getFido2ApiClient(GeckoAppShell.getApplicationContext()); -- -- intentTask = fidoClient.getRegisterPendingIntent(requestOptions); -- } -+ // The privileged FIDO2 API normally is restricted to apps with package -+ // names and signatures that Google knows to be a browser. microG does not -+ // have such a list, instead it asks the user to confirm that the app doing -+ // the request is indeed a browser app (only for the first request from -+ // that app). -+ final Fido2PrivilegedApiClient fidoClient = -+ Fido.getFido2PrivilegedApiClient(GeckoAppShell.getApplicationContext()); -+ intentTask = fidoClient.getRegisterPendingIntent(browserOptions); - - intentTask.addOnSuccessListener( - pendingIntent -> { -@@ -411,19 +398,12 @@ import org.mozilla.gecko.util.WebAuthnUtils; - .build(); - - final Task intentTask; -- // See the makeCredential method for documentation about this -- // conditional. -- if (BuildConfig.MOZILLA_OFFICIAL) { -- final Fido2PrivilegedApiClient fidoClient = -- Fido.getFido2PrivilegedApiClient(GeckoAppShell.getApplicationContext()); -- -- intentTask = fidoClient.getSignPendingIntent(browserOptions); -- } else { -- final Fido2ApiClient fidoClient = -- Fido.getFido2ApiClient(GeckoAppShell.getApplicationContext()); -+ // See the makeCredential method for documentation about the FIDO2 API and -+ // microG. -+ final Fido2PrivilegedApiClient fidoClient = -+ Fido.getFido2PrivilegedApiClient(GeckoAppShell.getApplicationContext()); - -- intentTask = fidoClient.getSignPendingIntent(requestOptions); -- } -+ intentTask = fidoClient.getSignPendingIntent(browserOptions); - - intentTask.addOnSuccessListener( - pendingIntent -> { -@@ -557,15 +537,9 @@ import org.mozilla.gecko.util.WebAuthnUtils; - @WrapForJNI(calledFrom = "gecko") - private static GeckoResult webAuthnIsUserVerifyingPlatformAuthenticatorAvailable() { - final Task task; -- if (BuildConfig.MOZILLA_OFFICIAL) { -- final Fido2PrivilegedApiClient fidoClient = -- Fido.getFido2PrivilegedApiClient(GeckoAppShell.getApplicationContext()); -- task = fidoClient.isUserVerifyingPlatformAuthenticatorAvailable(); -- } else { -- final Fido2ApiClient fidoClient = -- Fido.getFido2ApiClient(GeckoAppShell.getApplicationContext()); -- task = fidoClient.isUserVerifyingPlatformAuthenticatorAvailable(); -- } -+ final Fido2PrivilegedApiClient fidoClient = -+ Fido.getFido2PrivilegedApiClient(GeckoAppShell.getApplicationContext()); -+ task = fidoClient.isUserVerifyingPlatformAuthenticatorAvailable(); - - final GeckoResult res = new GeckoResult<>(); - task.addOnSuccessListener( diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn -index d3c34b7de2..7874643f0a 100644 +index f94b88f8d8..c06a5f1b45 100644 --- a/toolkit/content/jar.mn +++ b/toolkit/content/jar.mn -@@ -158,9 +158,6 @@ toolkit.jar: +@@ -166,9 +166,6 @@ toolkit.jar: #ifdef XP_MACOSX content/global/macWindowMenu.js #endif diff --git a/patches/gecko-localize_maven.patch b/patches/gecko-localize_maven.patch index 45906cd..6fb2593 100644 --- a/patches/gecko-localize_maven.patch +++ b/patches/gecko-localize_maven.patch @@ -1,8 +1,8 @@ diff --git a/build.gradle b/build.gradle -index 9646a2b7cb..e616444284 100644 +index 3c6eb9e4c4..9b7621a44e 100644 --- a/build.gradle +++ b/build.gradle -@@ -4,14 +4,9 @@ import org.tomlj.TomlTable +@@ -5,14 +5,9 @@ import org.tomlj.TomlTable buildscript { repositories { @@ -20,7 +20,7 @@ index 9646a2b7cb..e616444284 100644 } dependencies { -@@ -128,14 +123,9 @@ allprojects { +@@ -129,14 +124,9 @@ allprojects { } repositories { @@ -39,7 +39,7 @@ index 9646a2b7cb..e616444284 100644 // Use the semanticdb-javac and semanticdb-kotlinc plugins to generate semanticdb files for Searchfox diff --git a/mobile/android/android-components/build.gradle b/mobile/android/android-components/build.gradle -index 2cbb2e3312..6216170348 100644 +index 00c059ffd5..936dda52d7 100644 --- a/mobile/android/android-components/build.gradle +++ b/mobile/android/android-components/build.gradle @@ -9,14 +9,9 @@ import static org.gradle.api.tasks.testing.TestResult.ResultType @@ -123,7 +123,7 @@ index 3e2c155de0..ae4ed0d52c 100644 dependencies { diff --git a/mobile/android/android-components/components/service/nimbus/build.gradle b/mobile/android/android-components/components/service/nimbus/build.gradle -index ec4777457e..b998b42868 100644 +index 9aa45d5115..208a7a1076 100644 --- a/mobile/android/android-components/components/service/nimbus/build.gradle +++ b/mobile/android/android-components/components/service/nimbus/build.gradle @@ -4,14 +4,9 @@ @@ -145,7 +145,7 @@ index ec4777457e..b998b42868 100644 dependencies { diff --git a/mobile/android/android-components/components/support/remotesettings/build.gradle b/mobile/android/android-components/components/support/remotesettings/build.gradle -index de57de08cb..3d7fc89f82 100644 +index 87e6954947..437580979a 100644 --- a/mobile/android/android-components/components/support/remotesettings/build.gradle +++ b/mobile/android/android-components/components/support/remotesettings/build.gradle @@ -3,14 +3,9 @@ @@ -189,7 +189,7 @@ index 3728558208..8cb258a793 100644 gradlePlugin { diff --git a/mobile/android/android-components/plugins/config/settings.gradle b/mobile/android/android-components/plugins/config/settings.gradle -index b826d02d17..06bac06ffa 100644 +index b826d02d17..8580140364 100644 --- a/mobile/android/android-components/plugins/config/settings.gradle +++ b/mobile/android/android-components/plugins/config/settings.gradle @@ -11,14 +11,9 @@ pluginManagement { @@ -233,7 +233,7 @@ index 9a79d65de7..27df676741 100644 gradlePlugin { diff --git a/mobile/android/android-components/plugins/dependencies/settings.gradle b/mobile/android/android-components/plugins/dependencies/settings.gradle -index b826d02d17..06bac06ffa 100644 +index b826d02d17..8580140364 100644 --- a/mobile/android/android-components/plugins/dependencies/settings.gradle +++ b/mobile/android/android-components/plugins/dependencies/settings.gradle @@ -11,14 +11,9 @@ pluginManagement { @@ -299,7 +299,7 @@ index 84ca151cdc..a03568e09c 100644 includeBuild("../dependencies") diff --git a/mobile/android/android-components/samples/glean/build.gradle b/mobile/android/android-components/samples/glean/build.gradle -index fee42ed346..f61f7811e6 100644 +index 3287dacaaa..e13d0f3a6a 100644 --- a/mobile/android/android-components/samples/glean/build.gradle +++ b/mobile/android/android-components/samples/glean/build.gradle @@ -4,14 +4,9 @@ @@ -319,9 +319,9 @@ index fee42ed346..f61f7811e6 100644 + google() dependencies { - classpath "org.mozilla.telemetry:glean-gradle-plugin:${libs.versions.mozilla.glean.get()}" + classpath libs.glean.gradle.plugin diff --git a/mobile/android/android-components/samples/glean/samples-glean-library/build.gradle b/mobile/android/android-components/samples/glean/samples-glean-library/build.gradle -index 22871851d3..0aa57fbdaa 100644 +index 092aa2f460..62b6083e86 100644 --- a/mobile/android/android-components/samples/glean/samples-glean-library/build.gradle +++ b/mobile/android/android-components/samples/glean/samples-glean-library/build.gradle @@ -4,14 +4,9 @@ @@ -341,7 +341,7 @@ index 22871851d3..0aa57fbdaa 100644 + google() dependencies { - classpath "org.mozilla.telemetry:glean-gradle-plugin:${libs.versions.mozilla.glean.get()}" + classpath libs.glean.gradle.plugin diff --git a/mobile/android/android-components/settings.gradle b/mobile/android/android-components/settings.gradle index 19dc9e9ccf..6adb734ad5 100644 --- a/mobile/android/android-components/settings.gradle @@ -365,10 +365,10 @@ index 19dc9e9ccf..6adb734ad5 100644 includeBuild("plugins/dependencies") diff --git a/mobile/android/fenix/app/build.gradle b/mobile/android/fenix/app/build.gradle -index 7535453460..95d8c3149f 100644 +index d9a6045423..262a5e483c 100644 --- a/mobile/android/fenix/app/build.gradle +++ b/mobile/android/fenix/app/build.gradle -@@ -3,14 +3,9 @@ import org.apache.tools.ant.util.StringUtils +@@ -3,14 +3,9 @@ import java.time.format.DateTimeFormatter buildscript { repositories { @@ -387,10 +387,10 @@ index 7535453460..95d8c3149f 100644 dependencies { diff --git a/mobile/android/fenix/build.gradle b/mobile/android/fenix/build.gradle -index ed1180a452..44bcdece34 100644 +index e34e870acc..f86a22a45c 100644 --- a/mobile/android/fenix/build.gradle +++ b/mobile/android/fenix/build.gradle -@@ -10,14 +10,9 @@ import java.nio.file.StandardCopyOption +@@ -8,14 +8,9 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile buildscript { // This logic is duplicated in the allprojects block: I don't know how to fix that. repositories { @@ -408,7 +408,7 @@ index ed1180a452..44bcdece34 100644 } dependencies { -@@ -45,14 +40,9 @@ plugins { +@@ -43,14 +38,9 @@ plugins { allprojects { // This logic is duplicated in the buildscript block: I don't know how to fix that. repositories { @@ -471,7 +471,7 @@ index 8704f1f4b3..8580140364 100644 } diff --git a/mobile/android/fenix/settings.gradle b/mobile/android/fenix/settings.gradle -index 372f828814..609ea043fe 100644 +index 7e461f97cc..65f0b42b0f 100644 --- a/mobile/android/fenix/settings.gradle +++ b/mobile/android/fenix/settings.gradle @@ -10,14 +10,9 @@ pluginManagement { @@ -493,7 +493,7 @@ index 372f828814..609ea043fe 100644 includeBuild("../android-components/plugins/publicsuffixlist") diff --git a/mobile/android/focus-android/build.gradle b/mobile/android/focus-android/build.gradle -index 9b0a399f10..0b9ff0c922 100644 +index 80f726f82f..9daac463f6 100644 --- a/mobile/android/focus-android/build.gradle +++ b/mobile/android/focus-android/build.gradle @@ -7,14 +7,9 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -555,10 +555,10 @@ index 0f5dbd50a0..3143f62c77 100644 includeBuild("../android-components/plugins/publicsuffixlist") diff --git a/mobile/android/shared-settings.gradle b/mobile/android/shared-settings.gradle -index 74ac75285e..fbae2670bf 100644 +index eb9e1e36b3..92981dce83 100644 --- a/mobile/android/shared-settings.gradle +++ b/mobile/android/shared-settings.gradle -@@ -12,14 +12,9 @@ buildscript { +@@ -13,14 +13,9 @@ buildscript { } repositories { @@ -577,7 +577,7 @@ index 74ac75285e..fbae2670bf 100644 dependencies { diff --git a/settings.gradle b/settings.gradle -index 48240aaf4f..663cadb134 100644 +index 35b1d35323..705a80ed96 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,14 +9,9 @@ pluginManagement { @@ -598,6 +598,3 @@ index 48240aaf4f..663cadb134 100644 } includeBuild("${rootProject.projectDir.absolutePath}/mobile/android/android-components/plugins/config") --- -2.49.0 - diff --git a/patches/harden-pdfjs.patch b/patches/harden-pdfjs.patch index 99e9686..2d33c68 100644 --- a/patches/harden-pdfjs.patch +++ b/patches/harden-pdfjs.patch @@ -1,21 +1,17 @@ diff --git a/toolkit/components/pdfjs/content/build/pdf.mjs b/toolkit/components/pdfjs/content/build/pdf.mjs -index d2af6ba929..335f8cfd5c 100644 +index bdf304a524..56667492ad 100644 --- a/toolkit/components/pdfjs/content/build/pdf.mjs +++ b/toolkit/components/pdfjs/content/build/pdf.mjs -@@ -456,19 +456,14 @@ function isLittleEndian() { - return view32[0] === 1; - } +@@ -469,7 +469,7 @@ function isLittleEndian() { function isEvalSupported() { -- try { -- new Function(""); + try { + new Function(""); - return true; -- } catch { -- return false; -- } -+ return false; - } - class util_FeatureTest { - static get isLittleEndian() { ++ return false; + } catch { + return false; + } +@@ -479,7 +479,7 @@ class util_FeatureTest { return shadow(this, "isLittleEndian", isLittleEndian()); } static get isEvalSupported() { @@ -24,7 +20,7 @@ index d2af6ba929..335f8cfd5c 100644 } static get isOffscreenCanvasSupported() { return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined"); -@@ -10010,7 +10005,7 @@ function getDocument(src = {}) { +@@ -10030,7 +10030,7 @@ function getDocument(src = {}) { const { docId } = task; @@ -33,7 +29,7 @@ index d2af6ba929..335f8cfd5c 100644 const data = src.data ? getDataProp(src.data) : null; const httpHeaders = src.httpHeaders || null; const withCredentials = src.withCredentials === true; -@@ -10020,17 +10015,17 @@ function getDocument(src = {}) { +@@ -10040,17 +10040,17 @@ function getDocument(src = {}) { let worker = src.worker instanceof PDFWorker ? src.worker : null; const verbosity = src.verbosity; const docBaseUrl = typeof src.docBaseUrl === "string" && !isDataScheme(src.docBaseUrl) ? src.docBaseUrl : null; @@ -56,7 +52,7 @@ index d2af6ba929..335f8cfd5c 100644 const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !isNodeJS; const isImageDecoderSupported = typeof src.isImageDecoderSupported === "boolean" ? src.isImageDecoderSupported : true; const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1; -@@ -10047,7 +10042,7 @@ function getDocument(src = {}) { +@@ -10067,7 +10067,7 @@ function getDocument(src = {}) { const enableHWA = src.enableHWA === true; const useWasm = src.useWasm !== false; const length = rangeTransport ? rangeTransport.length : src.length ?? NaN; @@ -66,23 +62,19 @@ index d2af6ba929..335f8cfd5c 100644 const styleElement = null; setVerbosityLevel(verbosity); diff --git a/toolkit/components/pdfjs/content/build/pdf.worker.mjs b/toolkit/components/pdfjs/content/build/pdf.worker.mjs -index 28157acd51..bee8773aec 100644 +index 7e2d0c53f5..cf9706d9ef 100644 --- a/toolkit/components/pdfjs/content/build/pdf.worker.mjs +++ b/toolkit/components/pdfjs/content/build/pdf.worker.mjs -@@ -456,19 +456,14 @@ function isLittleEndian() { - return view32[0] === 1; - } +@@ -469,7 +469,7 @@ function isLittleEndian() { function isEvalSupported() { -- try { -- new Function(""); + try { + new Function(""); - return true; -- } catch { -- return false; -- } -+ return false; - } - class FeatureTest { - static get isLittleEndian() { ++ return false; + } catch { + return false; + } +@@ -479,7 +479,7 @@ class FeatureTest { return shadow(this, "isLittleEndian", isLittleEndian()); } static get isEvalSupported() { @@ -91,7 +83,7 @@ index 28157acd51..bee8773aec 100644 } static get isOffscreenCanvasSupported() { return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined"); -@@ -28637,10 +28632,10 @@ class GlobalImageCache { +@@ -28711,10 +28711,10 @@ class GlobalImageCache { class PDFFunctionFactory { constructor({ xref, @@ -104,7 +96,7 @@ index 28157acd51..bee8773aec 100644 } create(fn, parseArray = false) { let fnRef, parsedFn; -@@ -30973,18 +30968,18 @@ const DefaultPartialEvaluatorOptions = Object.freeze({ +@@ -31054,18 +31054,18 @@ const DefaultPartialEvaluatorOptions = Object.freeze({ maxImageSize: -1, disableFontFace: false, ignoreErrors: false, @@ -141,10 +133,10 @@ index 5e0a113820..e89114242e 100644 PDF.js viewer diff --git a/toolkit/components/pdfjs/content/web/viewer-geckoview.mjs b/toolkit/components/pdfjs/content/web/viewer-geckoview.mjs -index 167c6472f4..553ab04b37 100644 +index 0bf80af004..6d2da8f9ff 100644 --- a/toolkit/components/pdfjs/content/web/viewer-geckoview.mjs +++ b/toolkit/components/pdfjs/content/web/viewer-geckoview.mjs -@@ -824,7 +824,7 @@ const defaultOptions = { +@@ -837,7 +837,7 @@ const defaultOptions = { kind: OptionKind.API }, isEvalSupported: { diff --git a/patches/https_only.patch b/patches/https_only.patch index 0aca26b..31e8a83 100644 --- a/patches/https_only.patch +++ b/patches/https_only.patch @@ -1,8 +1,8 @@ diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 72493a2c21..cff0c52e9d 100644 +index 7f19ba4304..530b3a737c 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -734,7 +734,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -717,7 +717,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { var shouldUseHttpsOnly by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_https_only), diff --git a/patches/include-fonts.patch b/patches/include-fonts.patch index 98a8e74..04ca199 100644 --- a/patches/include-fonts.patch +++ b/patches/include-fonts.patch @@ -1,5 +1,5 @@ diff --git a/mobile/android/moz.configure b/mobile/android/moz.configure -index c900501ee6..99a3b38bdd 100644 +index 0e2a6efdc9..c7bdcc383c 100644 --- a/mobile/android/moz.configure +++ b/mobile/android/moz.configure @@ -7,7 +7,7 @@ diff --git a/patches/install-ublock.patch b/patches/install-ublock.patch index 7f4cc23..556cc35 100644 --- a/patches/install-ublock.patch +++ b/patches/install-ublock.patch @@ -13,7 +13,7 @@ Signed-off-by: Akash Yadav create mode 100644 mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/AddonUtils.kt diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt -index 82e44d1abc..fe2c0dd3e3 100644 +index 82e44d1abc..fd1dd84132 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt @@ -121,6 +121,9 @@ class WebExtensionPromptFeature( @@ -26,7 +26,7 @@ index 82e44d1abc..fe2c0dd3e3 100644 showPostInstallationDialog(addon) } -@@ -128,6 +131,15 @@ class WebExtensionPromptFeature( +@@ -128,6 +131,14 @@ class WebExtensionPromptFeature( addon: Addon, promptRequest: WebExtensionPromptRequest.AfterInstallation.Permissions.Required, ) { @@ -38,11 +38,10 @@ index 82e44d1abc..fe2c0dd3e3 100644 + ) + return + } -+ showPermissionDialog( addon = addon, promptRequest = promptRequest, -@@ -141,6 +153,15 @@ class WebExtensionPromptFeature( +@@ -141,6 +152,14 @@ class WebExtensionPromptFeature( addon: Addon, promptRequest: WebExtensionPromptRequest.AfterInstallation.Permissions.Optional, ) { @@ -54,26 +53,14 @@ index 82e44d1abc..fe2c0dd3e3 100644 + ) + return + } -+ val shouldGrantWithoutPrompt = Addon.localizePermissions( promptRequest.permissions, context, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt -index 64d09acb1a..61599172ec 100644 +index e5ab956ac3..5522b6c023 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt -@@ -19,8 +19,10 @@ import androidx.annotation.RequiresApi - import androidx.compose.runtime.Composable - import androidx.compose.ui.platform.ComposeView - import androidx.fragment.app.Fragment -+import androidx.lifecycle.lifecycleScope - import androidx.localbroadcastmanager.content.LocalBroadcastManager - import androidx.navigation.fragment.findNavController -+import kotlinx.coroutines.launch - import mozilla.components.concept.engine.webextension.InstallationMethod - import mozilla.components.service.nimbus.evalJexlSafe - import mozilla.components.service.nimbus.messaging.use -@@ -118,6 +120,11 @@ class OnboardingFragment : Fragment() { +@@ -118,6 +118,11 @@ class OnboardingFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val context = requireContext() @@ -83,7 +70,7 @@ index 64d09acb1a..61599172ec 100644 + } + if (pagesToDisplay.isEmpty()) { - /* do not continue if there's no onboarding pages to display */ + // do not continue if there's no onboarding pages to display onFinish(null) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/AddonUtils.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/AddonUtils.kt new file mode 100644 diff --git a/patches/ironfox-content-settings.patch b/patches/ironfox-content-settings.patch index a1b2362..bba5e73 100644 --- a/patches/ironfox-content-settings.patch +++ b/patches/ironfox-content-settings.patch @@ -1,5 +1,5 @@ diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SiteSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SiteSettingsFragment.kt -index 3885a06691..0adf0acee1 100644 +index 3885a06691..ac2ec82df2 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SiteSettingsFragment.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SiteSettingsFragment.kt @@ -23,6 +23,10 @@ import org.mozilla.fenix.ext.settings @@ -17,7 +17,7 @@ index 3885a06691..0adf0acee1 100644 override fun onResume() { super.onResume() showToolbar(getString(R.string.preferences_site_settings)) -+ ++ + val javascriptEnabledPreference = requirePreference( + R.string.pref_key_javascript_enabled, + ) @@ -91,10 +91,10 @@ index 3885a06691..0adf0acee1 100644 + } } diff --git a/mobile/android/fenix/app/src/main/res/values/preference_keys.xml b/mobile/android/fenix/app/src/main/res/values/preference_keys.xml -index 4faefc7999..fa13b4420a 100644 +index a55bf0589b..a8d902ae9f 100644 --- a/mobile/android/fenix/app/src/main/res/values/preference_keys.xml +++ b/mobile/android/fenix/app/src/main/res/values/preference_keys.xml -@@ -444,6 +444,10 @@ +@@ -445,6 +445,10 @@ pref_key_app_cold_start_count pref_key_app_is_onboarding_set_as_default_displayed diff --git a/patches/ironfox-fingerprinting-protection-overrides.patch b/patches/ironfox-fingerprinting-protection-overrides.patch index df8f09d..06e8fbd 100644 --- a/patches/ironfox-fingerprinting-protection-overrides.patch +++ b/patches/ironfox-fingerprinting-protection-overrides.patch @@ -1,5 +1,5 @@ diff --git a/toolkit/components/resistfingerprinting/FingerprintingWebCompatService.sys.mjs b/toolkit/components/resistfingerprinting/FingerprintingWebCompatService.sys.mjs -index 676f06ea68..0cd6d64388 100644 +index cda12afb97..56aca55c79 100644 --- a/toolkit/components/resistfingerprinting/FingerprintingWebCompatService.sys.mjs +++ b/toolkit/components/resistfingerprinting/FingerprintingWebCompatService.sys.mjs @@ -47,6 +47,7 @@ const SCHEMA = `{ @@ -9,8 +9,8 @@ index 676f06ea68..0cd6d64388 100644 +const IF_COLLECTION_NAME = "ironfox-fingerprinting-protection-overrides"; const PREF_GRANULAR_OVERRIDES = "privacy.fingerprintingProtection.granularOverrides"; - const PREF_REMOTE_OVERRIDES_ENABLED = -@@ -104,6 +105,7 @@ export class FingerprintingWebCompatService { + const PREF_GRANULAR_OVERRIDES_BASELINE = +@@ -113,6 +114,7 @@ export class FingerprintingWebCompatService { this.#granularOverrides = new Set(); this.#rs = lazy.RemoteSettings(COLLECTION_NAME); diff --git a/patches/ironfox-home.patch b/patches/ironfox-home.patch new file mode 100644 index 0000000..86fbaeb --- /dev/null +++ b/patches/ironfox-home.patch @@ -0,0 +1,116 @@ +diff --git a/mobile/android/fenix/app/nimbus.fml.yaml b/mobile/android/fenix/app/nimbus.fml.yaml +index 5a31c7b80f..18f56da1f9 100644 +--- a/mobile/android/fenix/app/nimbus.fml.yaml ++++ b/mobile/android/fenix/app/nimbus.fml.yaml +@@ -45,23 +45,23 @@ features: + default: + { + "top-sites": true, +- "jump-back-in": true, ++ "jump-back-in": false, + "bookmarks": true, +- "recent-explorations": true, +- "pocket": true, +- "pocket-sponsored-stories": true, +- "synced-tabs": true, ++ "recent-explorations": false, ++ "pocket": false, ++ "pocket-sponsored-stories": false, ++ "synced-tabs": false, + } + defaults: + - channel: nightly + value: { + "sections-enabled": { + "top-sites": true, +- "jump-back-in": true, +- "bookmarks": true, +- "recent-explorations": true, +- "pocket": true, +- "synced-tabs": true, ++ "jump-back-in": false, ++ "bookmarks": false, ++ "recent-explorations": false, ++ "pocket": false, ++ "synced-tabs": false, + } + } + nimbus-validation: +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +index 7f19ba4304..9d462db9d2 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +@@ -176,10 +176,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates whether or not top sites should be shown on the home screen. + */ +- var showTopSitesFeature by lazyFeatureFlagPreference( ++ var showTopSitesFeature by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_show_top_sites), +- featureFlag = true, +- default = { homescreenSections[HomeScreenSection.TOP_SITES] == true }, ++ default = true, + ) + + var numberOfAppLaunches by intPreference( +@@ -358,10 +357,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + default = false, + ) + +- var showCollectionsPlaceholderOnHome by booleanPreference( +- appContext.getPreferenceKey(R.string.pref_key_show_collections_placeholder_home), +- default = true, +- ) ++ var showCollectionsPlaceholderOnHome = false + + val isCrashReportingEnabled: Boolean + get() = isCrashReportEnabledInBuild && +@@ -1144,10 +1140,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + default = true, + ) + +- var defaultTopSitesAdded by booleanPreference( +- appContext.getPreferenceKey(R.string.default_top_sites_added), +- default = false, +- ) ++ var defaultTopSitesAdded = true + + var shouldShowSearchSuggestionsInPrivate by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_show_search_suggestions_in_private), +@@ -1656,10 +1649,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { + get() = + FxNimbus.features.homescreen.value().sectionsEnabled + +- var historyMetadataUIFeature by lazyFeatureFlagPreference( ++ var historyMetadataUIFeature by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_history_metadata_feature), +- default = { homescreenSections[HomeScreenSection.RECENT_EXPLORATIONS] == true }, +- featureFlag = true, ++ default = false, + ) + + /** +@@ -1683,19 +1675,17 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates if the recent tabs functionality should be visible. + */ +- var showRecentTabsFeature by lazyFeatureFlagPreference( ++ var showRecentTabsFeature by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_recent_tabs), +- featureFlag = true, +- default = { homescreenSections[HomeScreenSection.JUMP_BACK_IN] == true }, ++ default = false, + ) + + /** + * Indicates if the recent saved bookmarks functionality should be visible. + */ +- var showBookmarksHomeFeature by lazyFeatureFlagPreference( ++ var showBookmarksHomeFeature by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_customization_bookmarks), +- default = { homescreenSections[HomeScreenSection.BOOKMARKS] == true }, +- featureFlag = true, ++ default = false, + ) + + var signedInFxaAccount by booleanPreference( diff --git a/patches/ironfox-static-strings.patch b/patches/ironfox-static-strings.patch index 6f8a688..904a50a 100644 --- a/patches/ironfox-static-strings.patch +++ b/patches/ironfox-static-strings.patch @@ -1,8 +1,8 @@ diff --git a/mobile/android/fenix/app/src/main/res/values/static_strings.xml b/mobile/android/fenix/app/src/main/res/values/static_strings.xml -index 55d4a54a5d..83bb2b2461 100644 +index f09ddd8dd5..509fa6c4b5 100644 --- a/mobile/android/fenix/app/src/main/res/values/static_strings.xml +++ b/mobile/android/fenix/app/src/main/res/values/static_strings.xml -@@ -233,4 +233,17 @@ +@@ -228,4 +228,17 @@ Send Ping Sent %1$s ping diff --git a/patches/js-settings.patch b/patches/js-settings.patch index 07e9864..4226f2d 100644 --- a/patches/js-settings.patch +++ b/patches/js-settings.patch @@ -1,8 +1,8 @@ diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt -index 916e432778..875dd0f48e 100644 +index 1612c570be..7f0a2efaa7 100644 --- a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +++ b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt -@@ -1091,7 +1091,75 @@ class GeckoEngine( +@@ -1088,7 +1088,75 @@ class GeckoEngine( override val settings: Settings = object : Settings() { override var javascriptEnabled: Boolean get() = runtime.settings.javaScriptEnabled @@ -79,7 +79,7 @@ index 916e432778..875dd0f48e 100644 override var webFontsEnabled: Boolean get() = runtime.settings.webFontsEnabled -@@ -1485,6 +1553,14 @@ class GeckoEngine( +@@ -1486,6 +1554,14 @@ class GeckoEngine( }.apply { defaultSettings?.let { this.javascriptEnabled = it.javascriptEnabled @@ -95,7 +95,7 @@ index 916e432778..875dd0f48e 100644 this.automaticFontSizeAdjustment = it.automaticFontSizeAdjustment this.automaticLanguageAdjustment = it.automaticLanguageAdjustment diff --git a/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt b/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt -index 8d90b168c7..b5b58b4104 100644 +index 24e8f76532..298a47c984 100644 --- a/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt +++ b/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt @@ -25,6 +25,46 @@ abstract class Settings { @@ -145,7 +145,7 @@ index 8d90b168c7..b5b58b4104 100644 /** * Setting to control whether or not DOM Storage is enabled. */ -@@ -352,6 +392,14 @@ abstract class Settings { +@@ -357,6 +397,14 @@ abstract class Settings { */ data class DefaultSettings( override var javascriptEnabled: Boolean = true, @@ -161,10 +161,10 @@ index 8d90b168c7..b5b58b4104 100644 override var webFontsEnabled: Boolean = true, override var automaticFontSizeAdjustment: Boolean = true, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt -index daf079c89b..98e210e053 100644 +index cfbdaba62c..931b6d6052 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt -@@ -152,6 +152,15 @@ class Core( +@@ -156,6 +156,15 @@ class Core( val engine: Engine by lazyMonitored { val defaultSettings = DefaultSettings( requestInterceptor = requestInterceptor, @@ -181,10 +181,10 @@ index daf079c89b..98e210e053 100644 Build.VERSION.SDK_INT >= Build.VERSION_CODES.M, testingModeEnabled = false, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 72493a2c21..15268939b0 100644 +index 7f19ba4304..0f370867f9 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -1360,6 +1360,21 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -1349,6 +1349,21 @@ class Settings(private val appContext: Context) : PreferencesHolder { } } @@ -207,10 +207,10 @@ index 72493a2c21..15268939b0 100644 appContext.getPreferenceKey(R.string.pref_key_show_voice_search), default = true, diff --git a/mobile/android/geckoview/api.txt b/mobile/android/geckoview/api.txt -index c7147b320b..17d829f12b 100644 +index a410550e60..3a29243465 100644 --- a/mobile/android/geckoview/api.txt +++ b/mobile/android/geckoview/api.txt -@@ -908,6 +908,14 @@ package org.mozilla.geckoview { +@@ -962,6 +962,14 @@ package org.mozilla.geckoview { method public boolean getGlobalPrivacyControlPrivateMode(); method public boolean getInputAutoZoomEnabled(); method public boolean getJavaScriptEnabled(); @@ -225,7 +225,7 @@ index c7147b320b..17d829f12b 100644 method @NonNull public int getLargeKeepaliveFactor(); method @Nullable public String[] getLocales(); method public boolean getLoginAutofillEnabled(); -@@ -956,6 +964,14 @@ package org.mozilla.geckoview { +@@ -1013,6 +1021,14 @@ package org.mozilla.geckoview { method @NonNull public GeckoRuntimeSettings setGlobalPrivacyControl(boolean); method @NonNull public GeckoRuntimeSettings setInputAutoZoomEnabled(boolean); method @NonNull public GeckoRuntimeSettings setJavaScriptEnabled(boolean); @@ -240,7 +240,7 @@ index c7147b320b..17d829f12b 100644 method @NonNull public GeckoRuntimeSettings setLargeKeepaliveFactor(int); method public void setLocales(@Nullable String[]); method @NonNull public GeckoRuntimeSettings setLoginAutofillEnabled(boolean); -@@ -1018,6 +1034,14 @@ package org.mozilla.geckoview { +@@ -1077,6 +1093,14 @@ package org.mozilla.geckoview { method @NonNull public GeckoRuntimeSettings.Builder globalPrivacyControlEnabled(boolean); method @NonNull public GeckoRuntimeSettings.Builder inputAutoZoomEnabled(boolean); method @NonNull public GeckoRuntimeSettings.Builder javaScriptEnabled(boolean); @@ -256,7 +256,7 @@ index c7147b320b..17d829f12b 100644 method @NonNull public GeckoRuntimeSettings.Builder locales(@Nullable String[]); method @NonNull public GeckoRuntimeSettings.Builder loginAutofillEnabled(boolean); diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java -index fe1e217dcb..35cc6456a4 100644 +index 25ea09c3f6..816946a586 100644 --- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java +++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java @@ -137,6 +137,94 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { @@ -354,7 +354,7 @@ index fe1e217dcb..35cc6456a4 100644 /** * Set whether Global Privacy Control should be enabled. GPC is a mechanism for people to tell * websites to respect their privacy rights. Once turned on, it sends a signal to the websites -@@ -629,6 +717,14 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { +@@ -656,6 +744,14 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { /* package */ final Pref mWebManifest = new Pref("dom.manifest.enabled", true); /* package */ final Pref mJavaScript = new Pref("javascript.enabled", true); @@ -369,7 +369,7 @@ index fe1e217dcb..35cc6456a4 100644 /* package */ final Pref mRemoteDebugging = new Pref("devtools.debugger.remote-enabled", false); /* package */ final Pref mWebFonts = -@@ -843,6 +939,166 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { +@@ -876,6 +972,166 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { return this; } diff --git a/patches/librewolf-rs-blocker.patch b/patches/librewolf-rs-blocker.patch index db96c7c..15d4d77 100644 --- a/patches/librewolf-rs-blocker.patch +++ b/patches/librewolf-rs-blocker.patch @@ -1,5 +1,5 @@ diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs -index 32dcdd45d8..fc1e8b0de1 100644 +index dfb23ec49a..45ea3c2412 100644 --- a/services/settings/RemoteSettingsClient.sys.mjs +++ b/services/settings/RemoteSettingsClient.sys.mjs @@ -228,6 +228,11 @@ class AttachmentDownloader extends Downloader { @@ -14,7 +14,7 @@ index 32dcdd45d8..fc1e8b0de1 100644 try { // Explicitly await here to ensure we catch a network error. return await super.download(record, options); -@@ -620,6 +625,10 @@ export class RemoteSettingsClient extends EventEmitter { +@@ -625,6 +630,10 @@ export class RemoteSettingsClient extends EventEmitter { return; } @@ -25,7 +25,7 @@ index 32dcdd45d8..fc1e8b0de1 100644 // We want to know which timestamp we are expected to obtain in order to leverage // cache busting. We don't provide ETag because we don't want a 304. const { changes } = await lazy.Utils.fetchLatestChanges( -@@ -981,6 +990,14 @@ export class RemoteSettingsClient extends EventEmitter { +@@ -992,6 +1001,14 @@ export class RemoteSettingsClient extends EventEmitter { * Import the JSON files from services/settings/dump into the local DB. */ async _importJSONDump() { @@ -150,82 +150,3 @@ index cbdf07bcda..cc2b12afdf 100644 currentEtag: `"${timestamp}"`, serverTimeMillis, backoffSeconds, -diff --git a/toolkit/components/crashes/RemoteSettingsCrashPull.sys.mjs b/toolkit/components/crashes/RemoteSettingsCrashPull.sys.mjs -index d634f9def5..05e8007f24 100644 ---- a/toolkit/components/crashes/RemoteSettingsCrashPull.sys.mjs -+++ b/toolkit/components/crashes/RemoteSettingsCrashPull.sys.mjs -@@ -12,7 +12,7 @@ ChromeUtils.defineESModuleGetters(lazy, { - "resource://services-settings/RemoteSettingsClient.sys.mjs", - }); - --const REMOTE_SETTINGS_CRASH_COLLECTION = "crash-reports-ondemand"; -+const REMOTE_SETTINGS_CRASH_COLLECTION = ""; - - // Remote Settings collections might want a different limit - const PENDING_REMOTE_CRASH_REPORT_DAYS = 90; -diff --git a/toolkit/components/nimbus/ExperimentAPI.sys.mjs b/toolkit/components/nimbus/ExperimentAPI.sys.mjs -index 6b16b629af..9b52f187f8 100644 ---- a/toolkit/components/nimbus/ExperimentAPI.sys.mjs -+++ b/toolkit/components/nimbus/ExperimentAPI.sys.mjs -@@ -34,7 +34,7 @@ const IS_MAIN_PROCESS = - Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_DEFAULT; - - const COLLECTION_ID_PREF = "messaging-system.rsexperimentloader.collection_id"; --const COLLECTION_ID_FALLBACK = "nimbus-desktop-experiments"; -+const COLLECTION_ID_FALLBACK = ""; - XPCOMUtils.defineLazyPreferenceGetter( - lazy, - "COLLECTION_ID", -diff --git a/toolkit/components/nimbus/lib/RemoteSettingsExperimentLoader.sys.mjs b/toolkit/components/nimbus/lib/RemoteSettingsExperimentLoader.sys.mjs -index 90f455de76..ffe28cc0f2 100644 ---- a/toolkit/components/nimbus/lib/RemoteSettingsExperimentLoader.sys.mjs -+++ b/toolkit/components/nimbus/lib/RemoteSettingsExperimentLoader.sys.mjs -@@ -37,7 +37,7 @@ XPCOMUtils.defineLazyServiceGetter( - ); - - const COLLECTION_ID_PREF = "messaging-system.rsexperimentloader.collection_id"; --const COLLECTION_ID_FALLBACK = "nimbus-desktop-experiments"; -+const COLLECTION_ID_FALLBACK = ""; - const TARGETING_CONTEXT_TELEMETRY_ENABLED_PREF = - "nimbus.telemetry.targetingContextEnabled"; - -@@ -51,10 +51,10 @@ const NIMBUS_APPID_PREF = "nimbus.appId"; - - const STUDIES_ENABLED_CHANGED = "nimbus:studies-enabled-changed"; - --const SECURE_EXPERIMENTS_COLLECTION_ID = "nimbus-secure-experiments"; -+const SECURE_EXPERIMENTS_COLLECTION_ID = ""; - --const EXPERIMENTS_COLLECTION = "experiments"; --const SECURE_EXPERIMENTS_COLLECTION = "secureExperiments"; -+const EXPERIMENTS_COLLECTION = ""; -+const SECURE_EXPERIMENTS_COLLECTION = ""; - - const RS_COLLECTION_OPTIONS = { - [EXPERIMENTS_COLLECTION]: { -diff --git a/toolkit/components/normandy/lib/RecipeRunner.sys.mjs b/toolkit/components/normandy/lib/RecipeRunner.sys.mjs -index 087e4ed51e..256972093f 100644 ---- a/toolkit/components/normandy/lib/RecipeRunner.sys.mjs -+++ b/toolkit/components/normandy/lib/RecipeRunner.sys.mjs -@@ -36,7 +36,7 @@ ChromeUtils.defineESModuleGetters(lazy, { - - const log = LogManager.getLogger("recipe-runner"); - const TIMER_NAME = "recipe-client-addon-run"; --const REMOTE_SETTINGS_COLLECTION = "normandy-recipes-capabilities"; -+const REMOTE_SETTINGS_COLLECTION = ""; - const PREF_CHANGED_TOPIC = "nsPref:changed"; - - const RUN_INTERVAL_PREF = "app.normandy.run_interval_seconds"; -diff --git a/toolkit/mozapps/extensions/AddonManager.sys.mjs b/toolkit/mozapps/extensions/AddonManager.sys.mjs -index e09ea87de8..a5ed88d538 100644 ---- a/toolkit/mozapps/extensions/AddonManager.sys.mjs -+++ b/toolkit/mozapps/extensions/AddonManager.sys.mjs -@@ -4591,8 +4591,6 @@ AMRemoteSettings = { - */ - RS_ENTRIES_MAP: { - installTriggerDeprecation: [ -- "extensions.InstallTriggerImpl.enabled", -- "extensions.InstallTrigger.enabled", - ], - quarantinedDomains: ["extensions.quarantinedDomains.list"], - }, diff --git a/patches/prevent-extensions-from-changing-browser-settings.patch b/patches/prevent-extensions-from-changing-browser-settings.patch index 5c4fed7..bfd2f0c 100644 --- a/patches/prevent-extensions-from-changing-browser-settings.patch +++ b/patches/prevent-extensions-from-changing-browser-settings.patch @@ -1,5 +1,5 @@ diff --git a/toolkit/components/extensions/parent/ext-browserSettings.js b/toolkit/components/extensions/parent/ext-browserSettings.js -index 7b292f76b8..479858229c 100644 +index 7b292f76b8..fcd040e44f 100644 --- a/toolkit/components/extensions/parent/ext-browserSettings.js +++ b/toolkit/components/extensions/parent/ext-browserSettings.js @@ -25,6 +25,7 @@ const PERM_DENY_ACTION = Services.perms.DENY_ACTION; @@ -42,7 +42,15 @@ index 7b292f76b8..479858229c 100644 setCallback(value) { return { [this.prefNames[0]]: value }; -@@ -138,6 +143,7 @@ ExtensionPreferencesManager.addSetting( +@@ -124,6 +129,7 @@ ExtensionPreferencesManager.addSetting( + { + permission: "browserSettings", + prefNames: ["gfx.webrender.compositor"], ++ readOnly: true, + + setCallback(value) { + return { [this.prefNames[0]]: value }; +@@ -138,6 +144,7 @@ ExtensionPreferencesManager.addSetting( ExtensionPreferencesManager.addSetting("contextMenuShowEvent", { permission: "browserSettings", prefNames: ["ui.context_menus.after_mouseup"], @@ -50,7 +58,7 @@ index 7b292f76b8..479858229c 100644 setCallback(value) { return { [this.prefNames[0]]: value === "mouseup" }; -@@ -158,6 +164,7 @@ ExtensionPreferencesManager.addSetting("contextMenuShowEvent", { +@@ -158,6 +165,7 @@ ExtensionPreferencesManager.addSetting("contextMenuShowEvent", { ExtensionPreferencesManager.addSetting("imageAnimationBehavior", { permission: "browserSettings", prefNames: ["image.animation_mode"], @@ -58,7 +66,7 @@ index 7b292f76b8..479858229c 100644 setCallback(value) { return { [this.prefNames[0]]: value }; -@@ -174,6 +181,7 @@ ExtensionPreferencesManager.addSetting("newTabPosition", { +@@ -174,6 +182,7 @@ ExtensionPreferencesManager.addSetting("newTabPosition", { "browser.tabs.insertRelatedAfterCurrent", "browser.tabs.insertAfterCurrent", ], @@ -66,7 +74,7 @@ index 7b292f76b8..479858229c 100644 setCallback(value) { return { -@@ -196,6 +204,7 @@ ExtensionPreferencesManager.addSetting("newTabPosition", { +@@ -196,6 +205,7 @@ ExtensionPreferencesManager.addSetting("newTabPosition", { ExtensionPreferencesManager.addSetting("openBookmarksInNewTabs", { permission: "browserSettings", prefNames: ["browser.tabs.loadBookmarksInTabs"], @@ -74,7 +82,7 @@ index 7b292f76b8..479858229c 100644 setCallback(value) { return { [this.prefNames[0]]: value }; -@@ -209,6 +218,7 @@ ExtensionPreferencesManager.addSetting("openBookmarksInNewTabs", { +@@ -209,6 +219,7 @@ ExtensionPreferencesManager.addSetting("openBookmarksInNewTabs", { ExtensionPreferencesManager.addSetting("openSearchResultsInNewTabs", { permission: "browserSettings", prefNames: ["browser.search.openintab"], @@ -82,7 +90,7 @@ index 7b292f76b8..479858229c 100644 setCallback(value) { return { [this.prefNames[0]]: value }; -@@ -222,6 +232,7 @@ ExtensionPreferencesManager.addSetting("openSearchResultsInNewTabs", { +@@ -222,6 +233,7 @@ ExtensionPreferencesManager.addSetting("openSearchResultsInNewTabs", { ExtensionPreferencesManager.addSetting("openUrlbarResultsInNewTabs", { permission: "browserSettings", prefNames: ["browser.urlbar.openintab"], @@ -90,7 +98,7 @@ index 7b292f76b8..479858229c 100644 setCallback(value) { return { [this.prefNames[0]]: value }; -@@ -235,6 +246,7 @@ ExtensionPreferencesManager.addSetting("openUrlbarResultsInNewTabs", { +@@ -235,6 +247,7 @@ ExtensionPreferencesManager.addSetting("openUrlbarResultsInNewTabs", { ExtensionPreferencesManager.addSetting("webNotificationsDisabled", { permission: "browserSettings", prefNames: ["permissions.default.desktop-notification"], @@ -98,7 +106,7 @@ index 7b292f76b8..479858229c 100644 setCallback(value) { return { [this.prefNames[0]]: value ? PERM_DENY_ACTION : undefined }; -@@ -252,6 +264,7 @@ ExtensionPreferencesManager.addSetting("webNotificationsDisabled", { +@@ -252,6 +265,7 @@ ExtensionPreferencesManager.addSetting("webNotificationsDisabled", { ExtensionPreferencesManager.addSetting("overrideDocumentColors", { permission: "browserSettings", prefNames: ["browser.display.document_color_use"], @@ -106,7 +114,7 @@ index 7b292f76b8..479858229c 100644 setCallback(value) { return { [this.prefNames[0]]: value }; -@@ -273,6 +286,7 @@ ExtensionPreferencesManager.addSetting("overrideDocumentColors", { +@@ -273,6 +287,7 @@ ExtensionPreferencesManager.addSetting("overrideDocumentColors", { ExtensionPreferencesManager.addSetting("overrideContentColorScheme", { permission: "browserSettings", prefNames: ["layout.css.prefers-color-scheme.content-override"], @@ -114,7 +122,7 @@ index 7b292f76b8..479858229c 100644 setCallback(value) { return { [this.prefNames[0]]: value }; -@@ -296,6 +310,7 @@ ExtensionPreferencesManager.addSetting("overrideContentColorScheme", { +@@ -296,6 +311,7 @@ ExtensionPreferencesManager.addSetting("overrideContentColorScheme", { ExtensionPreferencesManager.addSetting("useDocumentFonts", { permission: "browserSettings", prefNames: ["browser.display.use_document_fonts"], @@ -122,7 +130,7 @@ index 7b292f76b8..479858229c 100644 setCallback(value) { return { [this.prefNames[0]]: value }; -@@ -311,6 +326,7 @@ ExtensionPreferencesManager.addSetting("useDocumentFonts", { +@@ -311,6 +327,7 @@ ExtensionPreferencesManager.addSetting("useDocumentFonts", { ExtensionPreferencesManager.addSetting("zoomFullPage", { permission: "browserSettings", prefNames: ["browser.zoom.full"], @@ -130,7 +138,7 @@ index 7b292f76b8..479858229c 100644 setCallback(value) { return { [this.prefNames[0]]: value }; -@@ -324,6 +340,7 @@ ExtensionPreferencesManager.addSetting("zoomFullPage", { +@@ -324,6 +341,7 @@ ExtensionPreferencesManager.addSetting("zoomFullPage", { ExtensionPreferencesManager.addSetting("zoomSiteSpecific", { permission: "browserSettings", prefNames: ["browser.zoom.siteSpecific"], diff --git a/patches/remote-debugging.patch b/patches/remote-debugging.patch index a5f5ddc..c1800d2 100644 --- a/patches/remote-debugging.patch +++ b/patches/remote-debugging.patch @@ -1,8 +1,8 @@ diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 72493a2c21..e655406cde 100644 +index 7f19ba4304..2ef0f182bc 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -387,10 +387,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -370,10 +370,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { true, ) diff --git a/patches/remove-autoconfig-dependency.patch b/patches/remove-autoconfig-dependency.patch index 69c6a30..d7d3d89 100644 --- a/patches/remove-autoconfig-dependency.patch +++ b/patches/remove-autoconfig-dependency.patch @@ -1,8 +1,8 @@ diff --git a/mobile/android/installer/package-manifest.in b/mobile/android/installer/package-manifest.in -index 2c91d92d60..2ff8c96b5e 100644 +index 9535aae823..7a764ac4a0 100644 --- a/mobile/android/installer/package-manifest.in +++ b/mobile/android/installer/package-manifest.in -@@ -124,7 +124,6 @@ +@@ -125,7 +125,6 @@ @BINPATH@/*/greprefs.js @BINPATH@/@PREF_DIR@/*/geckoview-prefs.js #endif # !MOZ_ANDROID_FAT_AAR_ARCHITECTURES diff --git a/patches/remove-default-sites.patch b/patches/remove-default-sites.patch deleted file mode 100644 index 814d8e4..0000000 --- a/patches/remove-default-sites.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 72493a2c21..deaf775539 100644 ---- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -1161,10 +1161,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { - default = true, - ) - -- var defaultTopSitesAdded by booleanPreference( -- appContext.getPreferenceKey(R.string.default_top_sites_added), -- default = false, -- ) -+ var defaultTopSitesAdded = true - - var shouldShowSearchSuggestionsInPrivate by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_show_search_suggestions_in_private), diff --git a/patches/remove-webcompat-reporter.patch b/patches/remove-webcompat-reporter.patch index de7d8a9..9019a66 100644 --- a/patches/remove-webcompat-reporter.patch +++ b/patches/remove-webcompat-reporter.patch @@ -64,10 +64,10 @@ index b5aa2ce3a4..4aefd0fc43 100644 - lib-crash - lib-crash-sentry diff --git a/mobile/android/fenix/app/build.gradle b/mobile/android/fenix/app/build.gradle -index bdbc2336e3..5dadfbbce4 100644 +index d9a6045423..815ca73e77 100644 --- a/mobile/android/fenix/app/build.gradle +++ b/mobile/android/fenix/app/build.gradle -@@ -606,7 +606,6 @@ dependencies { +@@ -618,7 +618,6 @@ dependencies { implementation project(':feature-webauthn') implementation project(':feature-webcompat') implementation project(':feature-webnotifications') @@ -76,10 +76,10 @@ index bdbc2336e3..5dadfbbce4 100644 implementation project(':service-pocket') implementation project(':service-mars') diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt -index 965c09e29b..cc1a47ed6a 100644 +index 1443661bb8..ad53a8d609 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt -@@ -316,8 +316,7 @@ class MenuDialogFragment : BottomSheetDialogFragment() { +@@ -317,8 +317,7 @@ class MenuDialogFragment : BottomSheetDialogFragment() { val translateLanguageCode = selectedTab?.translationsState?.translationEngineState ?.requestedTranslationPair?.toLanguage val isExtensionsProcessDisabled = browserStore.state.extensionsProcessDisabled @@ -90,10 +90,10 @@ index 965c09e29b..cc1a47ed6a 100644 val isDesktopMode by store.observeAsState(initialValue = false) { state -> state.isDesktopMode diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MainMenu.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MainMenu.kt -index 136ddf0fda..40534be709 100644 +index 3221dddb98..f611287899 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MainMenu.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MainMenu.kt -@@ -396,7 +396,7 @@ private fun MenuDialogPreview() { +@@ -470,7 +470,7 @@ private fun MenuDialogPreview() { isDesktopMode = false, isPdf = false, isTranslationSupported = true, @@ -102,7 +102,7 @@ index 136ddf0fda..40534be709 100644 showQuitMenu = true, isExtensionsProcessDisabled = true, extensionsMenuItemDescription = "No extensions enabled", -@@ -439,7 +439,7 @@ private fun MenuDialogPrivatePreview() { +@@ -516,7 +516,7 @@ private fun MenuDialogPrivatePreview() { isDesktopMode = false, isPdf = false, isTranslationSupported = true, @@ -112,7 +112,7 @@ index 136ddf0fda..40534be709 100644 isExtensionsProcessDisabled = false, extensionsMenuItemDescription = "No extensions enabled", diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt -index 6fb2b9ef98..9bdfedd87a 100644 +index e7e19273f9..abe5ef5191 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt @@ -213,10 +213,7 @@ open class DefaultToolbarMenu( @@ -128,7 +128,7 @@ index 6fb2b9ef98..9bdfedd87a 100644 // End of predicates // diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt -index 9e7842dfd5..061409cf5e 100644 +index 13db9f3c83..b6b2682e3f 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -50,7 +50,6 @@ import mozilla.components.feature.search.ext.waitForSelectedOrDefaultSearchEngin @@ -139,7 +139,7 @@ index 9e7842dfd5..061409cf5e 100644 import mozilla.components.lib.crash.CrashReporter import mozilla.components.service.fxa.manager.SyncEnginesStorage import mozilla.components.service.sync.logins.LoginsApiException -@@ -687,15 +686,6 @@ open class FenixApplication : LocaleAwareApplication(), Provider { +@@ -692,15 +691,6 @@ open class FenixApplication : LocaleAwareApplication(), Provider { onExtensionsLoaded = { extensions -> components.addonUpdater.registerForFutureUpdates(extensions) subscribeForNewAddonsIfNeeded(components.supportedAddonsChecker, extensions) diff --git a/patches/rs-dumps.patch b/patches/rs-dumps.patch index c8f0618..aff5367 100644 --- a/patches/rs-dumps.patch +++ b/patches/rs-dumps.patch @@ -48,10 +48,10 @@ index 7f89890eb3..e94d348edf 100644 # These search config icons only apply to desktop. diff --git a/services/settings/dumps/security-state/moz.build b/services/settings/dumps/security-state/moz.build -index 6e92217dcb..d6c81e5643 100644 +index 6e92217dcb..a6783ff1a2 100644 --- a/services/settings/dumps/security-state/moz.build +++ b/services/settings/dumps/security-state/moz.build -@@ -8,7 +8,6 @@ FINAL_TARGET_FILES.defaults.settings["security-state"] += [ +@@ -8,7 +8,7 @@ FINAL_TARGET_FILES.defaults.settings["security-state"] += [ ] # Not packaged on android/ios currently - not crucial data for first load. @@ -59,6 +59,7 @@ index 6e92217dcb..d6c81e5643 100644 - FINAL_TARGET_FILES.defaults.settings["security-state"] += [ - "intermediates.json", - ] ++ +FINAL_TARGET_FILES.defaults.settings["security-state"] += [ + "intermediates.json", +] diff --git a/patches/safe-browsing.patch b/patches/safe-browsing.patch index 53134b7..b30b314 100644 --- a/patches/safe-browsing.patch +++ b/patches/safe-browsing.patch @@ -1,8 +1,8 @@ diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt -index 916e432778..7824b5a403 100644 +index 1612c570be..ee7992f43c 100644 --- a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +++ b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt -@@ -1115,6 +1115,22 @@ class GeckoEngine( +@@ -1112,6 +1112,22 @@ class GeckoEngine( runtime.settings.contentBlocking.setSafeBrowsing(policy) field = value } @@ -25,7 +25,7 @@ index 916e432778..7824b5a403 100644 override var trackingProtectionPolicy: TrackingProtectionPolicy? = null set(value) { -@@ -1490,6 +1506,8 @@ class GeckoEngine( +@@ -1491,6 +1507,8 @@ class GeckoEngine( this.automaticLanguageAdjustment = it.automaticLanguageAdjustment this.trackingProtectionPolicy = it.trackingProtectionPolicy this.safeBrowsingPolicy = arrayOf(SafeBrowsingPolicy.RECOMMENDED) @@ -35,7 +35,7 @@ index 916e432778..7824b5a403 100644 this.testingModeEnabled = it.testingModeEnabled this.userAgentString = it.userAgentString diff --git a/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt b/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt -index 8d90b168c7..ae6962e678 100644 +index 24e8f76532..1e5fe8f3d3 100644 --- a/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt +++ b/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt @@ -66,6 +66,16 @@ abstract class Settings { @@ -55,7 +55,7 @@ index 8d90b168c7..ae6962e678 100644 /** * Setting to control the cookie banner handling feature detect only mode. */ -@@ -395,6 +405,8 @@ data class DefaultSettings( +@@ -400,6 +410,8 @@ data class DefaultSettings( override var cookieBannerHandlingMode: CookieBannerHandlingMode = CookieBannerHandlingMode.DISABLED, override var cookieBannerHandlingModePrivateBrowsing: CookieBannerHandlingMode = CookieBannerHandlingMode.DISABLED, @@ -65,10 +65,10 @@ index 8d90b168c7..ae6962e678 100644 override var cookieBannerHandlingGlobalRules: Boolean = false, override var cookieBannerHandlingGlobalRulesSubFrames: Boolean = false, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt -index daf079c89b..051be13c64 100644 +index cfbdaba62c..04c57c624e 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt -@@ -177,6 +177,8 @@ class Core( +@@ -181,6 +181,8 @@ class Core( fdlibmMathEnabled = FxNimbus.features.fingerprintingProtection.value().fdlibmMath, cookieBannerHandlingMode = context.settings().getCookieBannerHandling(), cookieBannerHandlingModePrivateBrowsing = context.settings().getCookieBannerHandlingPrivateMode(), @@ -78,7 +78,7 @@ index daf079c89b..051be13c64 100644 cookieBannerHandlingGlobalRules = context.settings().shouldEnableCookieBannerGlobalRules, cookieBannerHandlingGlobalRulesSubFrames = context.settings().shouldEnableCookieBannerGlobalRulesSubFrame, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt -index 64492271c3..1dee6fbd57 100644 +index 325e5d2141..832d740660 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt @@ -563,6 +563,7 @@ class SettingsFragment : PreferenceFragmentCompat() { @@ -127,26 +127,26 @@ index 64492271c3..1dee6fbd57 100644 internal fun setupInstallAddonFromFilePreference(settings: Settings) { with(requirePreference(R.string.pref_key_install_local_addon)) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 72493a2c21..243e7ea70e 100644 +index 7f19ba4304..cbfa894b4b 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -792,6 +792,11 @@ class Settings(private val appContext: Context) : PreferencesHolder { - +@@ -776,6 +776,11 @@ class Settings(private val appContext: Context) : PreferencesHolder { val queryParameterStrippingStripList: String get() = queryParameterStrippingSection[QUERY_PARAMETER_STRIPPING_STRIP_LIST].orEmpty() -+ + + var safeBrowsingEnabled by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_safe_browsing_enabled), + default = true, + ) - ++ /** * Declared as a function for performance purposes. This could be declared as a variable using + * booleanPreference like other members of this class. However, doing so will make it so it will diff --git a/mobile/android/fenix/app/src/main/res/values/preference_keys.xml b/mobile/android/fenix/app/src/main/res/values/preference_keys.xml -index 4faefc7999..f46904c97c 100644 +index a55bf0589b..5f0a075ef6 100644 --- a/mobile/android/fenix/app/src/main/res/values/preference_keys.xml +++ b/mobile/android/fenix/app/src/main/res/values/preference_keys.xml -@@ -225,6 +225,9 @@ +@@ -220,6 +220,9 @@ pref_key_tracking_protection_suspected_fingerprinters pref_key_tracking_protection_suspected_fingerprinters_select @@ -175,10 +175,10 @@ index 4c6b14bf87..47c904b384 100644 getCrashHandler(); -@@ -934,6 +936,8 @@ package org.mozilla.geckoview { +@@ -990,6 +992,8 @@ package org.mozilla.geckoview { method @NonNull public GeckoRuntimeSettings setBannedPorts(@NonNull String); method @NonNull public GeckoRuntimeSettings setCertificateTransparencyMode(int); method @NonNull public GeckoRuntimeSettings setConsoleOutputEnabled(boolean); @@ -196,7 +196,7 @@ index c7147b320b..63329b97ec 100644 method @NonNull public GeckoRuntimeSettings setCookieBehaviorOptInPartitioning(boolean); method @NonNull public GeckoRuntimeSettings setCookieBehaviorOptInPartitioningPBM(boolean); method @NonNull public GeckoRuntimeSettings setDefaultRecursiveResolverUri(@NonNull String); -@@ -996,6 +1000,8 @@ package org.mozilla.geckoview { +@@ -1055,6 +1059,8 @@ package org.mozilla.geckoview { method @NonNull public GeckoRuntimeSettings.Builder configFilePath(@Nullable String); method @NonNull public GeckoRuntimeSettings.Builder consoleOutput(boolean); method @NonNull public GeckoRuntimeSettings.Builder contentBlocking(@NonNull ContentBlocking.Settings); @@ -206,10 +206,10 @@ index c7147b320b..63329b97ec 100644 method @NonNull public GeckoRuntimeSettings.Builder debugLogging(boolean); method @NonNull public GeckoRuntimeSettings.Builder defaultRecursiveResolverUri(@NonNull String); diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java -index fe1e217dcb..fc3b544541 100644 +index 25ea09c3f6..a4c689a0d8 100644 --- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java +++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java -@@ -436,6 +436,28 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { +@@ -448,6 +448,28 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { return this; } @@ -236,9 +236,9 @@ index fe1e217dcb..fc3b544541 100644 + } + /** - * Sets the preferred color scheme override for web content. + * Set whether auto-zoom to editable fields should be enabled. * -@@ -706,6 +728,8 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { +@@ -733,6 +755,8 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { new Pref("network.fetchpriority.enabled", false); /* package */ final Pref mParallelMarkingEnabled = new Pref("javascript.options.mem.gc_parallel_marking", false); @@ -247,7 +247,7 @@ index fe1e217dcb..fc3b544541 100644 /* package */ final Pref mCookieBehaviorOptInPartitioning = new Pref("network.cookie.cookieBehavior.optInPartitioning", false); /* package */ final Pref mCookieBehaviorOptInPartitioningPBM = -@@ -943,6 +967,46 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { +@@ -976,6 +1000,46 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { return mFdlibmMathEnabled.get(); } diff --git a/patches/sanitize-on-exit.patch b/patches/sanitize-on-exit.patch index 934ab8c..61a9662 100644 --- a/patches/sanitize-on-exit.patch +++ b/patches/sanitize-on-exit.patch @@ -1,8 +1,8 @@ diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 72493a2c21..df9ba5d1f4 100644 +index 7f19ba4304..7631adcb84 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -1033,7 +1033,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -1016,7 +1016,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { var shouldDeleteBrowsingDataOnQuit by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_delete_browsing_data_on_quit), @@ -11,7 +11,7 @@ index 72493a2c21..df9ba5d1f4 100644 ) var deleteOpenTabs by booleanPreference( -@@ -1113,8 +1113,17 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -1096,8 +1096,17 @@ class Settings(private val appContext: Context) : PreferencesHolder { return touchExplorationIsEnabled || switchServiceIsEnabled } diff --git a/patches/search-engines.patch b/patches/search-engines.patch index 5d6e006..32e1e98 100644 --- a/patches/search-engines.patch +++ b/patches/search-engines.patch @@ -1,14 +1,8 @@ diff --git a/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/storage/SearchEngineReader.kt b/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/storage/SearchEngineReader.kt -index 22cb809c62..bca3c3198f 100644 +index 0328809399..b4ec1a0924 100644 --- a/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/storage/SearchEngineReader.kt +++ b/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/storage/SearchEngineReader.kt -@@ -36,21 +36,19 @@ internal const val IMAGE_URI_PREFIX = "data:image/png;base64," - internal const val GOOGLE_ID = "google" - private const val TARGET_SIZE = 16 - private const val MAX_SIZE = 32 --private const val URL_PREFIX = "https://firefox-settings-attachments.cdn.mozilla.net/" -+private const val URL_PREFIX = "" - +@@ -38,16 +38,14 @@ private const val MAX_SIZE = 32 // List of general search engine ids, taken from // https://searchfox.org/mozilla-central/rev/ef0aa879e94534ffd067a3748d034540a9fc10b0/toolkit/components/search/SearchUtils.sys.mjs#200 internal val GENERAL_SEARCH_ENGINE_IDS = setOf( diff --git a/patches/strict_etp.patch b/patches/strict_etp.patch index f0ca723..5a4ab84 100644 --- a/patches/strict_etp.patch +++ b/patches/strict_etp.patch @@ -1,8 +1,8 @@ diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 72493a2c21..79c545543d 100644 +index 7f19ba4304..0c08ea6ab7 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -747,10 +747,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -730,10 +730,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { default = false, ) @@ -14,7 +14,7 @@ index 72493a2c21..79c545543d 100644 var shouldEnableGlobalPrivacyControl by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_privacy_enable_global_privacy_control), -@@ -857,20 +854,11 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -840,20 +837,11 @@ class Settings(private val appContext: Context) : PreferencesHolder { default = false, ) diff --git a/patches/tor-spoof-english.patch b/patches/tor-spoof-english.patch index 4777cb8..df1b48a 100644 --- a/patches/tor-spoof-english.patch +++ b/patches/tor-spoof-english.patch @@ -1,8 +1,8 @@ diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt -index 916e432778..95acfc32fc 100644 +index 1612c570be..43b7e47509 100644 --- a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +++ b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt -@@ -1470,6 +1470,15 @@ class GeckoEngine( +@@ -1467,6 +1467,15 @@ class GeckoEngine( override var cookieBehaviorOptInPartitioningPBM: Boolean get() = runtime.settings.cookieBehaviorOptInPartitioningPBM set(value) { runtime.settings.setCookieBehaviorOptInPartitioningPBM(value) } @@ -18,16 +18,16 @@ index 916e432778..95acfc32fc 100644 override var certificateTransparencyMode: Int get() = runtime.settings.certificateTransparencyMode -@@ -1522,6 +1531,7 @@ class GeckoEngine( +@@ -1523,6 +1532,7 @@ class GeckoEngine( this.parallelMarkingEnabled = it.parallelMarkingEnabled this.cookieBehaviorOptInPartitioning = it.cookieBehaviorOptInPartitioning this.cookieBehaviorOptInPartitioningPBM = it.cookieBehaviorOptInPartitioningPBM + this.spoofEnglish = it.spoofEnglish this.certificateTransparencyMode = it.certificateTransparencyMode this.postQuantumKeyExchangeEnabled = it.postQuantumKeyExchangeEnabled - this.bannedPorts = it.bannedPorts + this.dohAutoselectEnabled = it.dohAutoselectEnabled diff --git a/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt b/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt -index 8d90b168c7..dad7ce69d3 100644 +index 24e8f76532..6e4c1e0708 100644 --- a/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt +++ b/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt @@ -330,6 +330,8 @@ abstract class Settings { @@ -39,26 +39,26 @@ index 8d90b168c7..dad7ce69d3 100644 /** * Setting to control how Certificate Transparency information is processed. */ -@@ -411,6 +413,7 @@ data class DefaultSettings( +@@ -416,6 +418,7 @@ data class DefaultSettings( val getDesktopMode: () -> Boolean = { false }, override var cookieBehaviorOptInPartitioning: Boolean = false, override var cookieBehaviorOptInPartitioningPBM: Boolean = false, + override var spoofEnglish: Boolean = false, override var certificateTransparencyMode: Int = 0, - override var postQuantumKeyExchangeEnabled: Boolean = false, - override var bannedPorts: String = "", + override var postQuantumKeyExchangeEnabled: Boolean? = null, + override var dohAutoselectEnabled: Boolean = false, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt -index daf079c89b..58bcf69ed6 100644 +index cfbdaba62c..e1c88f77c8 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt -@@ -188,6 +188,7 @@ class Core( +@@ -192,6 +192,7 @@ class Core( webContentIsolationStrategy = WebContentIsolationStrategy.ISOLATE_HIGH_VALUE, fetchPriorityEnabled = FxNimbus.features.networking.value().fetchPriorityEnabled, parallelMarkingEnabled = FxNimbus.features.javascript.value().parallelMarkingEnabled, + spoofEnglish = context.settings().spoofEnglish, certificateTransparencyMode = FxNimbus.features.pki.value().certificateTransparencyMode, postQuantumKeyExchangeEnabled = FxNimbus.features.pqcrypto.value().postQuantumKeyExchangeEnabled, - bannedPorts = FxNimbus.features.networkingBannedPorts.value().bannedPortList, + dohAutoselectEnabled = FxNimbus.features.doh.value().autoselectEnabled, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt index e387bc4ae0..404c55872a 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt @@ -125,10 +125,10 @@ index 91929aab38..a45b807f84 100644 inflater.inflate(R.menu.languages_list, menu) val searchItem = menu.findItem(R.id.search) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -index 72493a2c21..682a11ab78 100644 +index 7f19ba4304..e02e9052ee 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt -@@ -360,6 +360,11 @@ class Settings(private val appContext: Context) : PreferencesHolder { +@@ -343,6 +343,11 @@ class Settings(private val appContext: Context) : PreferencesHolder { false, ) @@ -180,10 +180,10 @@ index d235e7043f..d0b3a29e9d 100644 diff --git a/mobile/android/fenix/app/src/main/res/values/preference_keys.xml b/mobile/android/fenix/app/src/main/res/values/preference_keys.xml -index 4faefc7999..d6db4c5cc9 100644 +index a55bf0589b..da35ea3ee9 100644 --- a/mobile/android/fenix/app/src/main/res/values/preference_keys.xml +++ b/mobile/android/fenix/app/src/main/res/values/preference_keys.xml -@@ -460,6 +460,8 @@ +@@ -461,6 +461,8 @@ pref_key_doh_settings_enabled @@ -193,35 +193,35 @@ index 4faefc7999..d6db4c5cc9 100644 pref_key_glean_usage_profile_id diff --git a/mobile/android/geckoview/api.txt b/mobile/android/geckoview/api.txt -index c7147b320b..05c2f0afec 100644 +index a410550e60..c775f7535f 100644 --- a/mobile/android/geckoview/api.txt +++ b/mobile/android/geckoview/api.txt -@@ -919,6 +919,7 @@ package org.mozilla.geckoview { - method public boolean getRemoteDebuggingEnabled(); - method @Nullable public GeckoRuntime getRuntime(); +@@ -975,6 +975,7 @@ package org.mozilla.geckoview { + method @NonNull public boolean getSameDocumentNavigationOverridesLoadType(); + method @NonNull public String getSameDocumentNavigationOverridesLoadTypeForceDisable(); method @Nullable public Rect getScreenSizeOverride(); + method public boolean getSpoofEnglish(); method public boolean getTranslationsOfferPopup(); method @NonNull public List getTrustedRecursiveResolverExcludedDomains(); method @NonNull public String getTrustedRecursiveResolverUri(); -@@ -963,6 +964,7 @@ package org.mozilla.geckoview { +@@ -1020,6 +1021,7 @@ package org.mozilla.geckoview { method @NonNull public GeckoRuntimeSettings setPostQuantumKeyExchangeEnabled(boolean); method @NonNull public GeckoRuntimeSettings setPreferredColorScheme(int); method @NonNull public GeckoRuntimeSettings setRemoteDebuggingEnabled(boolean); + method @NonNull public GeckoRuntimeSettings setSpoofEnglish(boolean); + method @NonNull public GeckoRuntimeSettings setSameDocumentNavigationOverridesLoadType(boolean); + method @NonNull public GeckoRuntimeSettings setSameDocumentNavigationOverridesLoadTypeForceDisable(@NonNull String); method @NonNull public GeckoRuntimeSettings setTranslationsOfferPopup(boolean); - method @NonNull public GeckoRuntimeSettings setTrustedRecursiveResolverExcludedDomains(@NonNull List); - method @NonNull public GeckoRuntimeSettings setTrustedRecursiveResolverMode(int); -@@ -1026,6 +1028,7 @@ package org.mozilla.geckoview { +@@ -1085,6 +1087,7 @@ package org.mozilla.geckoview { method @NonNull public GeckoRuntimeSettings.Builder preferredColorScheme(int); method @NonNull public GeckoRuntimeSettings.Builder remoteDebuggingEnabled(boolean); method @NonNull public GeckoRuntimeSettings.Builder screenSizeOverride(int, int); + method @NonNull public GeckoRuntimeSettings.Builder spoofEnglish(boolean); + method @NonNull public GeckoRuntimeSettings.Builder setSameDocumentNavigationOverridesLoadType(boolean); + method @NonNull public GeckoRuntimeSettings.Builder setSameDocumentNavigationOverridesLoadTypeForceDisable(@NonNull String); method @NonNull public GeckoRuntimeSettings.Builder translationsOfferPopup(boolean); - method @NonNull public GeckoRuntimeSettings.Builder trustedRecursiveResolverMode(int); - method @NonNull public GeckoRuntimeSettings.Builder trustedRecursiveResolverUri(@NonNull String); diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java -index fe1e217dcb..fc49787b4f 100644 +index 25ea09c3f6..1c0ebb6f26 100644 --- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java +++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java @@ -602,6 +602,17 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { @@ -242,16 +242,16 @@ index fe1e217dcb..fc49787b4f 100644 /** * Set this flag to disable low-memory detection. Set this when running tests to avoid * unpredictable behavior at runtime. -@@ -712,6 +723,7 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { +@@ -739,6 +750,7 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { new Pref("network.cookie.cookieBehavior.optInPartitioning.pbmode", false); /* package */ final Pref mCertificateTransparencyMode = new Pref("security.pki.certificate_transparency.mode", 0); + /* package */ final Pref mSpoofEnglish = new Pref<>("privacy.spoof_english", 0); - /* package */ final Pref mPostQuantumKeyExchangeTLSEnabled = - new Pref("security.tls.enable_kyber", false); - /* package */ final Pref mPostQuantumKeyExchangeHttp3Enabled = -@@ -2093,6 +2105,26 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { - return this; + /* package */ final PrefWithoutDefault mPostQuantumKeyExchangeTLSEnabled = + new PrefWithoutDefault("security.tls.enable_kyber"); + /* package */ final PrefWithoutDefault mPostQuantumKeyExchangeHttp3Enabled = +@@ -2206,6 +2218,26 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { + return mSameDocumentNavigationOverridesLoadTypeForceDisable.get(); } + /** @@ -278,7 +278,7 @@ index fe1e217dcb..fc49787b4f 100644 public void writeToParcel(final Parcel out, final int flags) { super.writeToParcel(out, flags); diff --git a/mobile/shared/components/geckoview/GeckoViewStartup.sys.mjs b/mobile/shared/components/geckoview/GeckoViewStartup.sys.mjs -index d3fb71c91b..98b3b70f45 100644 +index c5999da57a..332f14fa8a 100644 --- a/mobile/shared/components/geckoview/GeckoViewStartup.sys.mjs +++ b/mobile/shared/components/geckoview/GeckoViewStartup.sys.mjs @@ -12,6 +12,7 @@ ChromeUtils.defineESModuleGetters(lazy, { @@ -289,7 +289,7 @@ index d3fb71c91b..98b3b70f45 100644 }); const { debug, warn } = GeckoViewUtils.initLogging("Startup"); -@@ -342,6 +343,10 @@ export class GeckoViewStartup { +@@ -369,6 +370,10 @@ export class GeckoViewStartup { if (aData.requestedLocales) { Services.locale.requestedLocales = aData.requestedLocales; } diff --git a/patches/ublock-assets.patch b/patches/ublock-assets.patch index 0f89232..4502b15 100644 --- a/patches/ublock-assets.patch +++ b/patches/ublock-assets.patch @@ -1,5 +1,5 @@ diff --git a/toolkit/components/extensions/NativeManifests.sys.mjs b/toolkit/components/extensions/NativeManifests.sys.mjs -index 3e1a0d6a56..204b0f8dff 100644 +index 59313e821f..f20a4d209d 100644 --- a/toolkit/components/extensions/NativeManifests.sys.mjs +++ b/toolkit/components/extensions/NativeManifests.sys.mjs @@ -36,7 +36,7 @@ export var NativeManifests = { diff --git a/scripts/patches.yaml b/scripts/patches.yaml index e29b710..b150b48 100644 --- a/scripts/patches.yaml +++ b/scripts/patches.yaml @@ -87,11 +87,46 @@ patches: category: "Dependency" # Privacy - - file: "disable-telemetry.patch" - name: "Disable Telemetry" - description: "Disables all telemetry collection and submission mechanisms within the browser." + - file: "fenix-disable-telemetry.patch" + name: "Disable Telemetry (Fenix)" + description: "Disables data collection and submission mechanisms within Firefox for Android." reason: "To prevent any usage data, diagnostics, or technical metrics from being sent to Mozilla or third parties." - effect: "Enhances user privacy by ensuring no telemetry data is collected or transmitted." + effect: "Improves user privacy by preventing the collection and transmission of telemetry data." + category: "Privacy" + + - file: "gecko-disable-telemetry.patch" + name: "Disable Telemetry (Gecko)" + description: "Disables data collection and submission mechanisms within Gecko." + reason: "To prevent any usage data, diagnostics, or technical metrics from being sent to Mozilla or third parties." + effect: "Improves user privacy by preventing the collection and transmission of telemetry data." + category: "Privacy" + + - file: "fenix-disable-crash-reporting.patch" + name: "Disable Crash Reporting (Fenix)" + description: "Disables the collection and submission of crash reports within Firefox for Android." + reason: "To prevent submitting personal and/or sensitive data to Mozilla." + effect: "Improves user privacy by preventing the collection and transmission of crash reports." + category: "Privacy" + + - file: "gecko-disable-crash-reporting.patch" + name: "Disable Crash Reporting (Gecko)" + description: "Disables the collection and submission of crash reports within Gecko." + reason: "To prevent submitting personal and/or sensitive data to Mozilla." + effect: "Improves user privacy by preventing the collection and transmission of crash reports." + category: "Privacy" + + - file: "fenix-disable-nimbus.patch" + name: "Disable Nimbus Experimentation (Fenix)" + description: "Prevents A/B testing and remote configuration of settings via Nimbus within Firefox for Android." + reason: "To reduce data collection and remove Mozilla's ability to remotely change browser settings." + effect: "Ensures user configurations remain consistent and are controlled locally." + category: "Privacy" + + - file: "gecko-disable-nimbus.patch" + name: "Disable Nimbus Experimentation (Gecko)" + description: "Prevents A/B testing and remote configuration of settings via Nimbus within Gecko." + reason: "To reduce data collection and remove Mozilla's ability to remotely change browser settings." + effect: "Ensures user configurations remain consistent and are controlled locally." category: "Privacy" - file: "configure-doh.patch" @@ -151,7 +186,14 @@ patches: reason: "To remove sponsored suggestions and prevent sending address bar data to Mozilla." effect: "Cleaner, more private address bar experience without suggestions." category: "Privacy" - + + - file: "disable-trending-search-suggestions.patch" + name: "Disable Trending Search Suggestions" + description: "Disables trending search suggestions by default." + reason: "To reduce unwanted network activity and limit third-party services." + effect: "Improves privacy by reducing data shared with Mozilla." + category: "Privacy" + - file: "disable-geoip.patch" name: "Disable Mozilla's GeoIP/Region Service" description: "Disables Mozilla's GeoIP/Region Service." @@ -166,16 +208,23 @@ patches: effect: "Improves privacy by not disclosing browser information when sharing links." category: "Privacy" - - file: "disable-nimbus.patch" - name: "Prevent Nimbus Configuration" - description: "Prevents remote configuration of settings via Nimbus." - reason: "To remove Mozilla's ability to remotely change browser settings." - effect: "Ensures user configurations remain consistent and controlled locally." + - file: "disable-contile.patch" + name: "Disable Contile" + description: "Disables integration with Mozilla's Contile service (sponsored tiles) - https://mozilla-services.github.io/contile/." + reason: "To remove unwanted advertising and unnecessary third-party services." + effect: "Cleaner interface without promotional content." + category: "Privacy" + + - file: "disable-mars.patch" + name: "Disable MARS (Mozilla Ad Routing Service)" + description: "Disables integration with the Mozilla Ad Routing Service (MARS) - https://ads.mozilla.org/assets/docs/openapi/mars-api.html." + reason: "To remove unwanted advertising and unnecessary third-party services." + effect: "Cleaner interface without promotional content." category: "Privacy" - file: "disable-pocket.patch" - name: "Disable Pocket and Contile" - description: "Disables Pocket integration and Contile sponsored tiles." + name: "Disable Pocket" + description: "Disables integration with Pocket" reason: "To remove unnecessary third-party services and sponsored content." effect: "Cleaner interface without promotional content or third-party integrations." category: "Privacy" @@ -214,13 +263,6 @@ patches: reason: "To prevent the download/use of unnecessary and undesired Remote Settings from Mozilla (ex. for experimentation)." effect: "Network activity is further limited, less data is shared with Mozilla, and the user is put in control of what specifically they want to download from Remote Settings." category: "Privacy" - - - file: "remove-default-sites.patch" - name: "Remove Default Sites" - description: "Removes default top sites and shortcuts." - reason: "To prevent displaying sponsored content and preset sites." - effect: "Clean new tab page without predetermined site suggestions." - category: "Privacy" - file: "restrict-mozaddonmanager.patch" name: "Restrict mozAddonManager" @@ -408,6 +450,13 @@ patches: reason: "Creates distinct brand identity for the fork." effect: "Users can identify the fork as IronFox instead of Firefox." category: "User Interface" + + - file: "ironfox-home.patch" + name: "IronFox Home" + description: "Customizes the default homepage." + reason: "Provides users with a cleaner browsing experience, and removes promotions of third party services." + effect: "Users have a clean new tab page without predetermined site suggestions or other content." + category: "User Interface" - file: "disable-cfrs.patch" name: "Disable Contextual Feature Recommendations" @@ -415,6 +464,13 @@ patches: reason: "To removes promotional suggestions for Firefox features." effect: "Cleaner interface without contextual prompts and recommendations." category: "User Interface" + + - file: "disable-recent-search-suggestions.patch" + name: "Disable Recent Search Suggestions" + description: "Disables recent search suggestions by default." + reason: "To provide users with a cleaner, focused URL bar and browsing experience." + effect: "Cleaner interface so that users can focus on where they want to go now, instead of where they went in the past." + category: "User Interface" - file: "disable-microsurveys.patch" name: "Disable Mozilla Surveys"