commit 4a2678f54a405910732cd40e734e02e9a0e38285 parent 3d3989cd7fbc77cb59ec1c22302ef176abef4f5f Author: hannajones <hjones@mozilla.com> Date: Thu, 20 Nov 2025 18:48:07 +0000 Bug 1972074 - Part 2: fix extension controlled link and prevent visual flash when switching between message bars r=akulyk,mstriemer Differential Revision: https://phabricator.services.mozilla.com/D270879 Diffstat:
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/browser/components/preferences/tests/chrome/test_setting_control_extension_controlled.html b/browser/components/preferences/tests/chrome/test_setting_control_extension_controlled.html @@ -332,7 +332,9 @@ await disableExtensionByMouse(disableExtensionButton); await TestUtils.waitForCondition( - () => !getExtensionControlledMessageBar(control), + () => + !control.isDisablingExtension && + !getExtensionControlledMessageBar(control), "Wait for the extension controlled message bar to be removed after disabling the only controlling extension" ); @@ -409,7 +411,7 @@ await synthesizeKey(" "); await TestUtils.waitForCondition( - () => !control.controlEl.disabled, + () => !control.isDisablingExtension && !control.controlEl.disabled, "Wait for the control to become mutable as a side-effect of disabling the controlling extension" ); extensionControlledMessageBar = @@ -549,8 +551,9 @@ await TestUtils.waitForCondition( () => + !control.isDisablingExtension && getExtensionControlledMessageBar(control)?.messageL10nArgs.name === - ADDON_NAME, + ADDON_NAME, "Wait for the message bar to be refreshed after disabling the controlling extension" ); @@ -673,6 +676,7 @@ control.remove(); }); + add_task(async function test_addons_link_in_message_bar() { // Setup pre-test items like extension, AddonManager, ExtensionSettingStore const SETTING_ID = "extension-controlled-setting"; diff --git a/browser/components/preferences/widgets/setting-control/setting-control.mjs b/browser/components/preferences/widgets/setting-control/setting-control.mjs @@ -106,8 +106,9 @@ export class SettingControl extends SettingElement { config: { type: Object }, value: {}, parentDisabled: { type: Boolean }, - showEnableExtensionMessage: { type: Boolean }, tabIndex: { type: Number, reflect: true }, + showEnableExtensionMessage: { type: Boolean, state: true }, + isDisablingExtension: { type: Boolean, state: true }, }; /** @@ -144,6 +145,11 @@ export class SettingControl extends SettingElement { * @type {boolean} */ this.showEnableExtensionMessage = false; + + /** + * @type {boolean} + */ + this.isDisablingExtension = false; } createRenderRoot() { @@ -301,8 +307,10 @@ export class SettingControl extends SettingElement { } async disableExtension() { - await this.setting.disableControllingExtension(); + this.isDisablingExtension = true; this.showEnableExtensionMessage = true; + await this.setting.disableControllingExtension(); + this.isDisablingExtension = false; } isControlledByExtension() { @@ -325,7 +333,7 @@ export class SettingControl extends SettingElement { event.preventDefault(); // @ts-ignore let mainWindow = window.browsingContext.topChromeWindow; - mainWindow.BrowserAddonUI.openAddonsMgr("addons://list/theme"); + mainWindow.BrowserAddonUI.openAddonsMgr("addons://list/extension"); } } @@ -434,6 +442,7 @@ export class SettingControl extends SettingElement { <moz-button slot="actions" @click=${this.disableExtension} + ?disabled=${this.isDisablingExtension} data-l10n-id="disable-extension" ></moz-button> </moz-message-bar>`;