commit fda608cc60444ddfb0d46cca9fe00377437943e6
parent fd0ffa193c92e26bc5110cb2d97f65d118d07147
Author: Sam Foster <sfoster@mozilla.com>
Date: Tue, 21 Oct 2025 09:44:17 +0000
Bug 1995051 - Defer handling nimbus onUpdate during SidebarManager initialization. r=sclements
Differential Revision: https://phabricator.services.mozilla.com/D269116
Diffstat:
1 file changed, 50 insertions(+), 39 deletions(-)
diff --git a/browser/components/sidebar/SidebarManager.sys.mjs b/browser/components/sidebar/SidebarManager.sys.mjs
@@ -94,46 +94,8 @@ class SidebarManager extends EventTarget {
super();
this.checkForPinnedTabsComplete = false;
}
+ #initialized = false;
init() {
- // Handle nimbus feature pref setting updates on init and enrollment
- const featureId = "sidebar";
- lazy.NimbusFeatures[featureId].onUpdate(() => {
- // Set prefs only if we have an enrollment that's new
- const enrollment = lazy.NimbusFeatures[featureId].getEnrollmentMetadata();
- if (!enrollment) {
- return;
- }
- const slug = enrollment.slug + ":" + enrollment.branch;
- if (slug == lazy.sidebarNimbus) {
- return;
- }
-
- // Enforce minimum version by skipping pref changes until Firefox restarts
- // with the appropriate version
- if (
- Services.vc.compare(
- // Support betas, e.g., 132.0b1, instead of MOZ_APP_VERSION
- AppConstants.MOZ_APP_VERSION_DISPLAY,
- // Check configured version or compare with unset handled as 0
- lazy.NimbusFeatures[featureId].getVariable("minVersion")
- ) < 0
- ) {
- return;
- }
-
- // Set/override user prefs to persist after experiment end
- const setPref = (pref, value) => {
- // Only set prefs with a value (so no clearing)
- if (value != null) {
- lazy.PrefUtils.setPref("sidebar." + pref, value);
- }
- };
- setPref("nimbus", slug);
- ["revamp", "verticalTabs", "visibility"].forEach(pref =>
- setPref(pref, lazy.NimbusFeatures[featureId].getVariable(pref))
- );
- });
-
lazy.CustomizableUI.addListener(this);
Services.prefs.addObserver(
@@ -153,6 +115,55 @@ class SidebarManager extends EventTarget {
lazy.verticalTabsEnabled,
shouldResetVisibility
);
+
+ // Handle nimbus feature pref setting updates on init and enrollment
+ lazy.NimbusFeatures.sidebar.onUpdate(() => {
+ if (this.#initialized) {
+ this.onNimbusFeatureUpdate();
+ } else {
+ // Schedule handling the update after this module has finished initializing
+ Promise.resolve().then(() => this.onNimbusFeatureUpdate());
+ }
+ });
+ this.#initialized = true;
+ }
+
+ onNimbusFeatureUpdate() {
+ const featureId = "sidebar";
+ // Set prefs only if we have an enrollment that's new
+ const enrollment = lazy.NimbusFeatures[featureId].getEnrollmentMetadata();
+ if (!enrollment) {
+ return;
+ }
+ const slug = enrollment.slug + ":" + enrollment.branch;
+ if (slug == lazy.sidebarNimbus) {
+ return;
+ }
+
+ // Enforce minimum version by skipping pref changes until Firefox restarts
+ // with the appropriate version
+ if (
+ Services.vc.compare(
+ // Support betas, e.g., 132.0b1, instead of MOZ_APP_VERSION
+ AppConstants.MOZ_APP_VERSION_DISPLAY,
+ // Check configured version or compare with unset handled as 0
+ lazy.NimbusFeatures[featureId].getVariable("minVersion")
+ ) < 0
+ ) {
+ return;
+ }
+
+ // Set/override user prefs to persist after experiment end
+ const setPref = (pref, value) => {
+ // Only set prefs with a value (so no clearing)
+ if (value != null) {
+ lazy.PrefUtils.setPref("sidebar." + pref, value);
+ }
+ };
+ setPref("nimbus", slug);
+ ["revamp", "verticalTabs", "visibility"].forEach(pref =>
+ setPref(pref, lazy.NimbusFeatures[featureId].getVariable(pref))
+ );
}
/**