tor-browser

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

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:
Mbrowser/base/content/browser-addons.js | 12+++---------
Mbrowser/components/extensions/test/browser/browser_unified_extensions_empty_panel.js | 54++++++++++++++++++++++++++++++++++++++++++++++++++++++
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,