tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mbrowser/components/sidebar/SidebarManager.sys.mjs | 89++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
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)) + ); } /**