summaryrefslogtreecommitdiffstats
path: root/toolkit/components/nimbus
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/nimbus')
-rw-r--r--toolkit/components/nimbus/FeatureManifest.yaml139
-rw-r--r--toolkit/components/nimbus/generate/generate_feature_manifest.py4
-rw-r--r--toolkit/components/nimbus/lib/ExperimentManager.sys.mjs2
-rw-r--r--toolkit/components/nimbus/test/unit/head.js7
-rw-r--r--toolkit/components/nimbus/test/unit/test_ExperimentAPI_NimbusFeatures.js28
-rw-r--r--toolkit/components/nimbus/test/unit/test_ExperimentManager_enroll.js3
-rw-r--r--toolkit/components/nimbus/test/unit/test_ExperimentManager_unenroll.js4
7 files changed, 114 insertions, 73 deletions
diff --git a/toolkit/components/nimbus/FeatureManifest.yaml b/toolkit/components/nimbus/FeatureManifest.yaml
index c540e0e387..f03834c8d2 100644
--- a/toolkit/components/nimbus/FeatureManifest.yaml
+++ b/toolkit/components/nimbus/FeatureManifest.yaml
@@ -106,12 +106,6 @@ search:
pref: browser.urlbar.richSuggestions.featureGate
description: >-
Feature gate that controls whether Rich Suggestions are enabled.
- serpEventTelemetryEnabled:
- type: boolean
- setPref:
- branch: default
- pref: browser.search.serpEventTelemetry.enabled
- description: Whether the Glean SERP event telemetry is enabled.
serpEventTelemetryCategorizationEnabled:
type: boolean
setPref:
@@ -627,6 +621,20 @@ windowsLaunchOnLogin:
pref: browser.startup.windowsLaunchOnLogin.enabled
description: Should users see the Windows launch on login checkbox.
+firefoxBridge:
+ description: "Controls for Firefox Bridge extension and extension registration"
+ owner: install-update@mozilla.com
+ hasExposure: false
+ variables:
+ enabled:
+ type: boolean
+ setPref:
+ branch: default
+ pref: browser.firefoxbridge.enabled
+ description: >-
+ Should Firefox Bridge be registered within firefoxBridgeNativeMessaging
+ startup idle task for use with native messaging proxy.
+
windowsJumpList:
description: "Controls for the Windows Jump List integration."
owner: mconley@mozilla.com
@@ -641,14 +649,15 @@ windowsJumpList:
abouthomecache:
description: "The startup about:home cache."
- owner: omc@mozilla.com
+ owner: omc@mozilla.com, mconley@mozilla.com
hasExposure: false
- isEarlyStartup: true
variables:
enabled:
type: boolean
- fallbackPref: browser.startup.homepage.abouthome_cache.enabled
description: Is the feature enabled?
+ setPref:
+ branch: user
+ pref: browser.startup.homepage.abouthome_cache.enabled
newtab:
description: "The about:newtab page"
@@ -929,6 +938,11 @@ pocketNewtab:
type: string
fallbackPref: >-
browser.newtabpage.activity-stream.discoverystream.region-spocs-config
+ regionWeatherConfig:
+ description: A comma-separated list of regions that get weather by default.
+ type: string
+ fallbackPref: >-
+ browser.newtabpage.activity-stream.discoverystream.region-weather-config
topSitesMaxSponsored:
# Defined under `pocketNewtab` as it needs to be used along with other variables
type: int
@@ -943,6 +957,12 @@ pocketNewtab:
type: boolean
fallbackPref: >-
browser.topsites.contile.sov.enabled
+ pocketFeedParameters:
+ type: string
+ fallbackPref: >-
+ browser.newtabpage.activity-stream.discoverystream.pocket-feed-parameters
+ description: >-
+ Add parameters to Pocket feed URL.
saveToPocket:
description: The save to Pocket feature
@@ -1131,6 +1151,18 @@ fullPageTranslationAutomaticPopup:
branch: user
pref: browser.translations.automaticallyPopup
+selectTranslation:
+ description: This feature enables the option to translate selected text from the context menu.
+ owner: enordin@mozilla.com
+ hasExposure: false
+ variables:
+ boolean:
+ description: Set to true to enable the select-translations feature
+ type: boolean
+ setPref:
+ branch: user
+ pref: browser.translations.select.enable
+
pdfjs:
description: The Firefox pdf reader.
owner: pdfjs-team@mozilla.com
@@ -1392,13 +1424,13 @@ gleanInternalSdk:
description: "The Glean internal SDK feature intended only for internal Glean Team use"
owner: glean-team@mozilla.com
hasExposure: false
- # Some variables are used through the C++ API and thus require pref-storage.
- # We rely on those values at Glean.init time, which happens at startup.
- isEarlyStartup: true
variables:
finalInactive:
type: "boolean"
description: "Enables FOG early shutdown pings when true"
+ setPref:
+ branch: user
+ pref: telemetry.glean.internal.finalInactive
gleanMetricConfiguration:
type: json
description: |
@@ -1409,33 +1441,9 @@ gleanInternalSdk:
type: int
description: >-
Maximum number of pings that can be sent in a 60 second interval
-
-majorRelease2022:
- description: Major Release 2022
- owner: firefoxview@mozilla.com
- hasExposure: false
- isEarlyStartup: true
- variables:
- feltPrivacyPBMDarkTheme:
- type: boolean
- fallbackPref: "browser.theme.dark-private-windows"
- description: "Use dark theme variant for PBM windows. This is only supported if the theme sets darkTheme data."
- feltPrivacyShowPreferencesSection:
- type: boolean
- fallbackPref: "browser.privacySegmentation.preferences.show"
- description: "Controls visibility of the privacy segmentation preferences section."
- feltPrivacyWindowSeparation:
- type: boolean
- fallbackPref: "browser.privateWindowSeparation.enabled"
- description: "Whether or not private browsing windows use a separate icon in the Windows taskbar"
- colorwayCloset:
- type: boolean
- fallbackPref: "browser.theme.colorway-closet"
- description: "Whether or not to show the colorway closet modal"
- onboarding:
- type: boolean
- fallbackPref: "browser.majorrelease.onboarding"
- description: "Whether or not to use the MR2022 onboarding settings."
+ setPref:
+ branch: user
+ pref: telemetry.glean.internal.maxPingsPerMinute
browserLowMemoryPrefs:
description: Prefs which control the browser's behaviour under low memory.
@@ -1694,26 +1702,20 @@ dapTelemetry:
description: DAP Telemetry
owner: simon@mozilla.com
hasExposure: false
- isEarlyStartup: true # Data is sent on startup with a trigger in BrowserGlue.sys.mjs
variables:
enabled:
type: boolean
- fallbackPref: toolkit.telemetry.dap_enabled
description: Whether to automatically send DAP measurements.
task1Enabled:
type: boolean
- fallbackPref: toolkit.telemetry.dap_task1_enabled
description: Whether to send fake measurements for task 1.
task1TaskId:
type: string
- fallbackPref: toolkit.telemetry.dap_task1_taskid
description: The task ID to use for task 1 measurements.
visitCountingEnabled:
type: boolean
- fallbackPref: toolkit.telemetry.dap_visit_counting_enabled
description: Whether to count visits to the provided list of URLs.
visitCountingExperimentList:
- fallbackPref: toolkit.telemetry.dap_visit_counting_experiment_list
type: json
description: A list of experiments with URLs for which we want to count visits.
@@ -2098,6 +2100,12 @@ gc:
setPref:
branch: user
pref: "javascript.options.mem.gc_parallel_marking_threshold_mb"
+ gc_max_parallel_marking_threads:
+ description: The maximum number of threads to use for parallel marking, if enabled.
+ type: int
+ setPref:
+ branch: user
+ pref: "javascript.options.mem.gc_max_parallel_marking_threads"
gc_per_zone:
description: Whether per-zone GC is enabled. If not, all zones are collected every time.
type: boolean
@@ -2397,20 +2405,6 @@ backgroundUpdate:
branch: user
pref: app.update.background.allowUpdatesForUnelevatedInstallations
-defaultAgent:
- description: >-
- Features that configure the Windows Default Browser Agent.
- owner: install-update@mozilla.com
- applications:
- - firefox-desktop-background-task
- hasExposure: false
- variables:
- cppFallback:
- description: >-
- Triggers the Default Agent to fall back to the C++ implementation of DoTask if true.
- type: boolean
- fallbackPref: "defaultAgent.cppFallback.enabled"
-
bookmarks:
description: Prefs to control aspects of the bookmarks system.
owner: omc@mozilla.com
@@ -2706,6 +2700,10 @@ contentRelevancy:
setPref:
branch: user
pref: toolkit.contentRelevancy.timerInterval
+ ingestEnabled:
+ description: Enable the ingestion through the Rust component
+ type: boolean
+ fallbackPref: toolkit.contentRelevancy.ingestEnabled
tabPreview:
description: Prefs to control Tab Previews
@@ -2733,6 +2731,29 @@ backupService:
description: >-
When true, the profile backup service will be initialized soon after
startup.
+ prefsUIEnabled:
+ type: boolean
+ setPref:
+ branch: default
+ pref: browser.backup.preferences.ui.enabled
+ description: >-
+ When true, the section in about:preferences to control the backup
+ feature is visible.
+ sqlitePagesPerStep:
+ description: >-
+ The number of database pages to backup per step when backing up an
+ SQLite database.
+ type: int
+ setPref:
+ branch: user
+ pref: browser.backup.sqlite.pages_per_step
+ sqliteStepDelayMs:
+ description: >-
+ The delay between SQLite database backup steps in milliseconds.
+ type: int
+ setPref:
+ branch: user
+ pref: browser.backup.sqlite.step_delay_ms
pqcrypto:
description: Prefs that control the use of post-quantum cryptography.
diff --git a/toolkit/components/nimbus/generate/generate_feature_manifest.py b/toolkit/components/nimbus/generate/generate_feature_manifest.py
index 55e681fdf8..fab73c4ce7 100644
--- a/toolkit/components/nimbus/generate/generate_feature_manifest.py
+++ b/toolkit/components/nimbus/generate/generate_feature_manifest.py
@@ -24,11 +24,7 @@ NIMBUS_FALLBACK_PREFS = (
# Do not add new feature IDs to this list! isEarlyStartup is being deprecated.
# See https://bugzilla.mozilla.org/show_bug.cgi?id=1875331 for details.
ALLOWED_ISEARLYSTARTUP_FEATURE_IDS = {
- "abouthomecache",
"aboutwelcome",
- "dapTelemetry",
- "gleanInternalSdk",
- "majorRelease2022",
"newtab",
"pocketNewtab",
"searchConfiguration",
diff --git a/toolkit/components/nimbus/lib/ExperimentManager.sys.mjs b/toolkit/components/nimbus/lib/ExperimentManager.sys.mjs
index 8bd847b067..78299da1b4 100644
--- a/toolkit/components/nimbus/lib/ExperimentManager.sys.mjs
+++ b/toolkit/components/nimbus/lib/ExperimentManager.sys.mjs
@@ -207,7 +207,7 @@ export class _ExperimentManager {
lazy.NimbusFeatures.nimbusTelemetry.getVariable(
"gleanMetricConfiguration"
) ?? {};
- Services.fog.setMetricsFeatureConfig(JSON.stringify(cfg));
+ Services.fog.applyServerKnobsConfig(JSON.stringify(cfg));
});
}
diff --git a/toolkit/components/nimbus/test/unit/head.js b/toolkit/components/nimbus/test/unit/head.js
index e74212161c..e2e42ee4c9 100644
--- a/toolkit/components/nimbus/test/unit/head.js
+++ b/toolkit/components/nimbus/test/unit/head.js
@@ -63,10 +63,15 @@ async function assertEmptyStore(store, { cleanup = false } = {}) {
"Store should have no active enrollments"
);
+ store
+ .getAll()
+ .filter(e => !e.active)
+ .forEach(e => store._deleteForTests(e.slug));
+
Assert.deepEqual(
store
.getAll()
- .filter(e => e.inactive)
+ .filter(e => !e.active)
.map(e => e.slug),
[],
"Store should have no inactive enrollments"
diff --git a/toolkit/components/nimbus/test/unit/test_ExperimentAPI_NimbusFeatures.js b/toolkit/components/nimbus/test/unit/test_ExperimentAPI_NimbusFeatures.js
index 79304cd66e..9bbf26a6a0 100644
--- a/toolkit/components/nimbus/test/unit/test_ExperimentAPI_NimbusFeatures.js
+++ b/toolkit/components/nimbus/test/unit/test_ExperimentAPI_NimbusFeatures.js
@@ -92,8 +92,11 @@ add_task(async function readyCallAfterStore_with_remote_value() {
await manager.store.addEnrollment(MATCHING_ROLLOUT);
Assert.ok(!feature.getVariable("enabled"), "Loads value from store");
- manager.store._deleteForTests("aboutwelcome");
+
+ manager.unenroll(MATCHING_ROLLOUT.slug, "test-cleanup");
+
sandbox.restore();
+ await assertEmptyStore(manager.store);
});
add_task(async function has_sync_value_before_ready() {
@@ -121,7 +124,11 @@ add_task(async function has_sync_value_before_ready() {
Assert.equal(feature.getVariable("remoteValue"), true, "Sync load from pref");
- manager.store._deleteForTests("aboutwelcome");
+ Services.prefs.clearUserPref("nimbus.syncdefaultsstore.aboutwelcome");
+ Services.prefs.clearUserPref(
+ "nimbus.syncdefaultsstore.aboutwelcome.remoteValue"
+ );
+ await assertEmptyStore(manager.store);
});
add_task(async function update_remote_defaults_onUpdate() {
@@ -137,8 +144,10 @@ add_task(async function update_remote_defaults_onUpdate() {
Assert.equal(stub.callCount, 1, "Called once for remote configs");
Assert.equal(stub.firstCall.args[1], "rollout-updated", "Correct reason");
- manager.store._deleteForTests("aboutwelcome");
+ manager.unenroll(MATCHING_ROLLOUT.slug, "test-cleanup");
+
sandbox.restore();
+ await assertEmptyStore(manager.store);
});
add_task(async function test_features_over_feature() {
@@ -190,6 +199,9 @@ add_task(async function test_features_over_feature() {
manager.store._deleteForTests("aboutwelcome");
manager.store._deleteForTests("matching-rollout");
+
+ await assertEmptyStore(manager.store);
+
sandbox.restore();
});
@@ -208,7 +220,8 @@ add_task(async function update_remote_defaults_readyPromise() {
"Update called after enrollment processed."
);
- manager.store._deleteForTests("aboutwelcome");
+ manager.unenroll(MATCHING_ROLLOUT.slug, "test-cleanup");
+ await assertEmptyStore(manager.store);
sandbox.restore();
});
@@ -229,7 +242,8 @@ add_task(async function update_remote_defaults_enabled() {
"Feature is disabled by remote configuration"
);
- manager.store._deleteForTests("aboutwelcome");
+ manager.unenroll(NON_MATCHING_ROLLOUT.slug, "test-cleanup");
+ await assertEmptyStore(manager.store);
sandbox.restore();
});
@@ -252,6 +266,7 @@ add_task(async function test_getVariable_no_mutation() {
Assert.ok(feature.getVariable("mochitest"), "Got back the expected feature");
+ await assertEmptyStore(manager.store);
sandbox.restore();
});
@@ -284,4 +299,7 @@ add_task(async function remote_isEarlyStartup_config() {
Services.prefs.clearUserPref(
"nimbus.syncdefaultsstore.password-autocomplete"
);
+
+ manager.unenroll(rollout.slug, "test-cleanup");
+ await assertEmptyStore(manager.store);
});
diff --git a/toolkit/components/nimbus/test/unit/test_ExperimentManager_enroll.js b/toolkit/components/nimbus/test/unit/test_ExperimentManager_enroll.js
index 1a57b33d66..4bc67a5883 100644
--- a/toolkit/components/nimbus/test/unit/test_ExperimentManager_enroll.js
+++ b/toolkit/components/nimbus/test/unit/test_ExperimentManager_enroll.js
@@ -670,7 +670,6 @@ add_task(async function enroll_in_reference_aw_experiment() {
Assert.ok(prefValue.length < 3498, "Make sure we don't bloat the prefs");
manager.unenroll(recipe.slug, "enroll_in_reference_aw_experiment:cleanup");
- manager.store._deleteForTests("aboutwelcome");
await assertEmptyStore(manager.store);
});
@@ -756,6 +755,7 @@ add_task(async function test_rollout_unenroll_conflict() {
);
Assert.ok(enrollStub.calledOnce, "Should call enroll as expected");
+ manager.unenroll(rollout.slug, "test-cleanup");
await assertEmptyStore(manager.store);
sandbox.restore();
@@ -838,7 +838,6 @@ add_task(async function test_forceEnroll() {
for (const { slug } of expected) {
manager.unenroll(`optin-${slug}`);
- manager.store._deleteForTests(`optin-${slug}`);
}
}
diff --git a/toolkit/components/nimbus/test/unit/test_ExperimentManager_unenroll.js b/toolkit/components/nimbus/test/unit/test_ExperimentManager_unenroll.js
index a32de32cd6..2173e34b5a 100644
--- a/toolkit/components/nimbus/test/unit/test_ExperimentManager_unenroll.js
+++ b/toolkit/components/nimbus/test/unit/test_ExperimentManager_unenroll.js
@@ -513,7 +513,9 @@ add_task(async function test_check_unseen_enrollments_telemetry_events() {
featureId: "nimbusTelemetry",
value: {
gleanMetricConfiguration: {
- "nimbus_events.enrollment_status": true,
+ metrics_enabled: {
+ "nimbus_events.enrollment_status": true,
+ },
},
},
},