commit 1d6bb2199f322ff1544ca2a346c10f9473faaf9c
parent 992283dcd23eb71cafa983228d9c68d2d297afe0
Author: Rob Wu <rob@robwu.nl>
Date: Thu, 9 Oct 2025 01:59:35 +0000
Bug 1982225 - Show extension list instead of discopane when the list of extensions is non-empty r=rpl
Differential Revision: https://phabricator.services.mozilla.com/D267020
Diffstat:
2 files changed, 57 insertions(+), 9 deletions(-)
diff --git a/browser/base/content/browser-addons.js b/browser/base/content/browser-addons.js
@@ -2660,15 +2660,9 @@ var gUnifiedExtensions = {
!this.isPrivateWindowMissingExtensionsWithoutPBMAccess() &&
!(await this.isAtLeastOneExtensionDisabled())
) {
- let viewID;
- if (
- Services.prefs.getBoolPref("extensions.getAddons.showPane", true)
- ) {
- viewID = "addons://discover/";
- } else {
- viewID = "addons://list/extension";
- }
- await BrowserAddonUI.openAddonsMgr(viewID);
+ // This may happen if the user has pinned all of their extensions.
+ // In that case, the extensions panel is empty.
+ await BrowserAddonUI.openAddonsMgr("addons://list/extension");
return;
}
}
diff --git a/browser/components/extensions/test/browser/browser_unified_extensions_empty_panel.js b/browser/components/extensions/test/browser/browser_unified_extensions_empty_panel.js
@@ -131,6 +131,60 @@ add_task(async function test_button_opens_discopane_when_no_extension() {
);
});
+add_task(async function test_button_opens_extlist_when_all_exts_pinned() {
+ const extensions = createExtensions([
+ {
+ name: "Pinned extension button outside extensions panel",
+ browser_action: { default_area: "navbar" },
+ },
+ ]);
+ await Promise.all(extensions.map(extension => extension.startup()));
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ // Set this to another value to make sure not to "accidentally" land on the right page
+ ["extensions.ui.lastCategory", "addons://list/theme"],
+ // showPane=true is the default, but to make sure that we get the
+ // expected behavior for the right reason, explicitly set it to true.
+ ["extensions.getAddons.showPane", true],
+ ],
+ });
+
+ await BrowserTestUtils.withNewTab(
+ { gBrowser, url: "about:robots" },
+ async () => {
+ const { button } = gUnifiedExtensions;
+ ok(button, "expected button");
+
+ // Primary click should open about:addons.
+ const tabPromise = BrowserTestUtils.waitForNewTab(
+ gBrowser,
+ "about:addons",
+ true
+ );
+
+ button.click();
+
+ const tab = await tabPromise;
+ is(
+ gBrowser.currentURI.spec,
+ "about:addons",
+ "expected about:addons to be open"
+ );
+ is(
+ gBrowser.selectedBrowser.contentWindow.gViewController.currentViewId,
+ "addons://list/extension",
+ "expected about:addons to show the extension list"
+ );
+ BrowserTestUtils.removeTab(tab);
+ }
+ );
+
+ await SpecialPowers.popPrefEnv();
+
+ await Promise.all(extensions.map(extension => extension.unload()));
+});
+
add_task(
async function test_button_opens_extlist_when_no_extension_and_pane_disabled() {
// If extensions.getAddons.showPane is set to false, there is no "Recommended" tab,