feat: Prevent fetching/configuring settings from Nimbus

Signed-off-by: celenity <celenity@celenity.dev>
This commit is contained in:
celenity
2025-04-08 17:19:34 -04:00
parent 5dbfe58b1d
commit a1b2a41683
2 changed files with 442 additions and 0 deletions

View File

@@ -0,0 +1,439 @@
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 0a8b8b4e38..aadfd0d4a6 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
@@ -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
-import org.mozilla.fenix.nimbus.FxNimbus
import org.mozilla.fenix.settings.quicksettings.protections.cookiebanners.getCookieBannerUIMode
import org.mozilla.fenix.shortcut.PwaOnboardingObserver
import org.mozilla.fenix.theme.ThemeManager
@@ -168,12 +167,6 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
}
private fun initTranslationsAction(context: Context, view: View) {
- if (
- !FxNimbus.features.translations.value().mainFlowToolbarEnabled
- ) {
- return
- }
-
val translationsAction = Toolbar.ActionButton(
AppCompatResources.getDrawable(
context,
@@ -662,7 +655,6 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
override fun navToQuickSettingsSheet(tab: SessionState, sitePermissions: SitePermissions?) {
val useCase = requireComponents.useCases.trackingProtectionUseCases
- FxNimbus.features.cookieBanners.recordExposure()
useCase.containsException(tab.id) { hasTrackingProtectionException ->
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 760259e9fd..c3e014b6c5 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
@@ -75,7 +75,6 @@ import org.mozilla.fenix.components.menu.store.MenuStore
import org.mozilla.fenix.components.menu.store.WebExtensionMenuItem
import org.mozilla.fenix.ext.runIfFragmentIsAttached
import org.mozilla.fenix.ext.settings
-import org.mozilla.fenix.nimbus.FxNimbus
import org.mozilla.fenix.settings.SupportUtils
import org.mozilla.fenix.settings.deletebrowsingdata.deleteAndQuit
import org.mozilla.fenix.theme.FirefoxTheme
@@ -300,8 +299,7 @@ class MenuDialogFragment : BottomSheetDialogFragment() {
val isTranslationEngineSupported =
browserStore.state.translationEngine.isEngineSupported ?: false
val isTranslationSupported =
- isTranslationEngineSupported &&
- FxNimbus.features.translations.value().mainFlowBrowserMenuEnabled
+ isTranslationEngineSupported
val isPdf = selectedTab?.content?.isPdf ?: false
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 92c7c8b36c..ab22458d0e 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
import org.mozilla.fenix.components.accounts.FenixAccountManager
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
-import org.mozilla.fenix.nimbus.FxNimbus
import org.mozilla.fenix.theme.ThemeManager
/**
@@ -82,7 +81,6 @@ open class DefaultToolbarMenu(
get() = store.state.selectedTab
override val menuBuilder by lazy {
- FxNimbus.features.print.recordExposure()
WebExtensionBrowserMenuBuilder(
items = coreMenuItems,
endOfMenuAlwaysVisible = shouldUseBottomToolbar,
@@ -203,12 +201,8 @@ open class DefaultToolbarMenu(
@VisibleForTesting(otherwise = PRIVATE)
fun shouldShowTranslations(): Boolean {
val isEngineSupported = store.state.translationEngine.isEngineSupported
- if (isEngineSupported == true) {
- FxNimbus.features.translations.recordExposure()
- }
return selectedSession?.let {
- isEngineSupported == true &&
- FxNimbus.features.translations.value().mainFlowBrowserMenuEnabled
+ isEngineSupported == true
} ?: false
}
@@ -457,7 +451,7 @@ open class DefaultToolbarMenu(
addAppToHomeScreenItem.apply { visible = ::canAddAppToHomescreen },
if (shouldShowTopSites) addRemoveTopSitesItem else null,
saveToCollectionItem,
- if (FxNimbus.features.print.value().browserPrintEnabled) printPageItem else null,
+ printPageItem,
BrowserMenuDivider(),
settingsItem,
if (shouldDeleteDataOnQuit) deleteDataOnQuit else null,
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt
index a6f3b77a47..b2ce30c78f 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt
@@ -33,7 +33,6 @@ class FenixOnboarding(context: Context) : PreferencesHolder {
// - We would like to evaluate the configuration only once (and thus it's kept in memory
// and not re-evaluated)
val config by lazy {
- FxNimbus.features.onboarding.recordExposure()
FxNimbus.features.onboarding.value()
}
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 3d7ff49e55..7022c5aa59 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
@@ -55,8 +55,8 @@ class SecretSettingsFragment : PreferenceFragmentCompat() {
}
requirePreference<SwitchPreference>(R.string.pref_key_nimbus_use_preview).apply {
- isVisible = true
- isChecked = context.settings().nimbusUsePreview
+ isVisible = false
+ isChecked = false
onPreferenceChangeListener = SharedPreferenceUpdater()
}
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 1b318ffee7..22d17989d4 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
@@ -64,7 +64,6 @@ import org.mozilla.fenix.ext.openSetDefaultBrowserOption
import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.ext.showToolbar
-import org.mozilla.fenix.nimbus.FxNimbus
import org.mozilla.fenix.perf.ProfilerViewModel
import org.mozilla.fenix.settings.account.AccountUiView
import org.mozilla.fenix.snackbar.FenixSnackbarDelegate
@@ -174,8 +173,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
findPreference<Preference>(
getPreferenceKey(R.string.pref_key_translation),
- )?.isVisible = FxNimbus.features.translations.value().globalSettingsEnabled &&
- requireContext().components.core.store.state.translationEngine.isEngineSupported == true
+ )?.isVisible = requireContext().components.core.store.state.translationEngine.isEngineSupported == true
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
@@ -203,11 +201,8 @@ class SettingsFragment : PreferenceFragmentCompat() {
override fun onResume() {
super.onResume()
- // Use nimbus to set the title, and a trivial addition
- val nimbusValidation = FxNimbus.features.nimbusValidation.value()
-
- val title = nimbusValidation.settingsTitle
- val suffix = nimbusValidation.settingsPunctuation
+ val title = getString(R.string.settings_title)
+ val suffix = ""
showToolbar("$title$suffix")
@@ -758,7 +753,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
@VisibleForTesting
internal fun setupCookieBannerPreference() {
- FxNimbus.features.cookieBanners.recordExposure()
if (context?.settings()?.shouldShowCookieBannerUI == false) return
with(requirePreference<SwitchPreference>(R.string.pref_key_cookie_banner_private_mode)) {
isVisible = context.settings().shouldShowCookieBannerUI
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationSettingsFragment.kt
index 1a02f82498..b7658c03e3 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationSettingsFragment.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationSettingsFragment.kt
@@ -28,7 +28,6 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.ext.showToolbar
-import org.mozilla.fenix.nimbus.FxNimbus
import org.mozilla.fenix.theme.FirefoxTheme
/**
@@ -51,9 +50,9 @@ class TranslationSettingsFragment : Fragment(), UserInteractionHandler {
FirefoxTheme {
TranslationSettings(
translationSwitchList = getTranslationSwitchItemList(),
- showAutomaticTranslations = FxNimbus.features.translations.value().globalLangSettingsEnabled,
- showNeverTranslate = FxNimbus.features.translations.value().globalSiteSettingsEnabled,
- showDownloads = FxNimbus.features.translations.value().downloadsEnabled,
+ showAutomaticTranslations = true,
+ showNeverTranslate = true,
+ showDownloads = true,
pageSettingsError = browserStore.observeAsComposableState { state ->
state.selectedTab?.translationsState?.settingsError
}.value,
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsDialogFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsDialogFragment.kt
index 2b38fffaf3..09edddb9c2 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsDialogFragment.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsDialogFragment.kt
@@ -43,7 +43,6 @@ import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.runIfFragmentIsAttached
import org.mozilla.fenix.ext.settings
-import org.mozilla.fenix.nimbus.FxNimbus
import org.mozilla.fenix.settings.SupportUtils
import org.mozilla.fenix.theme.FirefoxTheme
import org.mozilla.fenix.translations.preferences.downloadlanguages.DownloadLanguageFileDialog
@@ -173,7 +172,7 @@ class TranslationsDialogFragment : BottomSheetDialogFragment() {
translationsDialogState?.let {
TranslationsDialogContent(
learnMoreUrl = learnMoreUrl,
- showPageSettings = FxNimbus.features.translations.value().pageSettingsEnabled,
+ showPageSettings = true,
translationsDialogState = it,
onSettingClicked = {
Translations.action.record(
@@ -199,7 +198,7 @@ class TranslationsDialogFragment : BottomSheetDialogFragment() {
) {
TranslationsOptionsDialogContent(
learnMoreUrl = learnMoreUrl,
- showGlobalSettings = FxNimbus.features.translations.value().globalSettingsEnabled,
+ showGlobalSettings = true,
isTranslated = translationsDialogState?.isTranslated == true,
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 b800c22431..4df6de4ffe 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
@@ -148,10 +148,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(
@@ -197,10 +196,7 @@ class Settings(private val appContext: Context) : PreferencesHolder {
default = "",
)
- var nimbusExperimentsFetched by booleanPreference(
- appContext.getPreferenceKey(R.string.pref_key_nimbus_experiments_fetched),
- default = false,
- )
+ var nimbusExperimentsFetched = true
var utmParamsKnown by booleanPreference(
appContext.getPreferenceKey(R.string.pref_key_utm_params_known),
@@ -471,10 +467,7 @@ class Settings(private val appContext: Context) : PreferencesHolder {
default = false,
)
- var nimbusUsePreview by booleanPreference(
- appContext.getPreferenceKey(R.string.pref_key_nimbus_use_preview),
- default = false,
- )
+ var nimbusUsePreview = false
var isFirstNimbusRun: Boolean by booleanPreference(
appContext.getPreferenceKey(R.string.pref_key_is_first_run),
@@ -764,18 +757,15 @@ class Settings(private val appContext: Context) : PreferencesHolder {
/**
* Indicates if the re-engagement notification feature is enabled
*/
- var reEngagementNotificationEnabled by lazyFeatureFlagPreference(
+ var reEngagementNotificationEnabled by booleanPreference(
key = appContext.getPreferenceKey(R.string.pref_key_re_engagement_notification_enabled),
- default = { FxNimbus.features.reEngagementNotification.value().enabled },
- featureFlag = true,
+ default = false,
)
/**
* Indicates if the re-engagement notification feature is enabled
*/
- val reEngagementNotificationType: Int
- get() =
- FxNimbus.features.reEngagementNotification.value().type
+ val reEngagementNotificationType: Int = 0
val shouldUseAutoBatteryTheme by booleanPreference(
appContext.getPreferenceKey(R.string.pref_key_auto_battery_theme),
@@ -1586,10 +1576,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,
)
/**
@@ -1914,19 +1903,17 @@ class Settings(private val appContext: Context) : PreferencesHolder {
/**
* Indicates if the Compose Homepage is enabled.
*/
- var enableComposeHomepage by lazyFeatureFlagPreference(
+ var enableComposeHomepage by booleanPreference(
key = appContext.getPreferenceKey(R.string.pref_key_enable_compose_homepage),
- default = { FxNimbus.features.composeHomepage.value().enabled },
- featureFlag = true,
+ default = false,
)
/**
* Indicates if the menu redesign is enabled.
*/
- var enableMenuRedesign by lazyFeatureFlagPreference(
+ var enableMenuRedesign by booleanPreference(
key = appContext.getPreferenceKey(R.string.pref_key_enable_menu_redesign),
- default = { FxNimbus.features.menuRedesign.value().enabled },
- featureFlag = true,
+ default = false,
)
/**
@@ -2062,8 +2049,7 @@ class Settings(private val appContext: Context) : PreferencesHolder {
/**
* Indicates if the feature to close synced tabs is enabled.
*/
- val enableCloseSyncedTabs: Boolean
- get() = FxNimbus.features.remoteTabManagement.value().closeTabsEnabled
+ val enableCloseSyncedTabs: Boolean = true
/**
* Returns the height of the bottom toolbar.
@@ -2146,10 +2132,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,
)
/**
@@ -2172,10 +2157,9 @@ class Settings(private val appContext: Context) : PreferencesHolder {
/**
* Indicates if the Set as default browser prompt for existing users feature is enabled.
*/
- var setAsDefaultBrowserPromptForExistingUsersEnabled by lazyFeatureFlagPreference(
+ var setAsDefaultBrowserPromptForExistingUsersEnabled by booleanPreference(
key = appContext.getPreferenceKey(R.string.pref_key_set_as_default_browser_prompt_enabled),
- default = { FxNimbus.features.setAsDefaultPrompt.value().enabled },
- featureFlag = true,
+ default = false,
)
/**
@@ -2290,10 +2274,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 = { FxNimbus.features.bookmarks.value().newComposeUi },
- featureFlag = true,
+ default = false,
)
var lastSavedInFolderGuid 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 3b85a2a548..43b833bca8 100644
--- a/mobile/android/fenix/app/src/main/res/xml/preferences.xml
+++ b/mobile/android/fenix/app/src/main/res/xml/preferences.xml
@@ -232,11 +232,6 @@
app:iconSpaceReserved="false"
android:title="@string/preferences_debug_info"
app:isPreferenceVisible="false" />
- <androidx.preference.Preference
- android:key="@string/pref_key_nimbus_experiments"
- app:iconSpaceReserved="false"
- android:title="@string/preferences_nimbus_experiments"
- app:isPreferenceVisible="false" />
<androidx.preference.Preference
android:key="@string/pref_key_start_profiler"
app:iconSpaceReserved="false"
diff --git a/toolkit/components/nimbus/ExperimentAPI.sys.mjs b/toolkit/components/nimbus/ExperimentAPI.sys.mjs
--- a/toolkit/components/nimbus/ExperimentAPI.sys.mjs
+++ b/toolkit/components/nimbus/ExperimentAPI.sys.mjs
@@ -31,7 +31,7 @@
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 dc15bead44..dcfdcb0a94 100644
--- a/toolkit/components/nimbus/lib/RemoteSettingsExperimentLoader.sys.mjs
+++ b/toolkit/components/nimbus/lib/RemoteSettingsExperimentLoader.sys.mjs
@@ -36,7 +36,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";
@@ -50,10 +50,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]: {
@@ -81,7 +81,7 @@ XPCOMUtils.defineLazyPreferenceGetter(
lazy,
"APP_ID",
NIMBUS_APPID_PREF,
- "firefox-desktop"
+ ""
);
XPCOMUtils.defineLazyPreferenceGetter(
lazy,

View File

@@ -35,6 +35,9 @@ PATCH_FILES=(
# Disable Telemetry
"disable-telemetry.patch"
# Prevent configuring settings from Nimbus
"disable-nimbus.patch"
# Disable Pocket/Contile
"disable-pocket.patch"