tor-browser

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

commit 8aa37ba50f5decc79cf73787581badb106d1dd74
parent 2786c0f5b896a22b0fd61f60d91bedb8177b9673
Author: Rob Wu <rob@robwu.nl>
Date:   Fri, 17 Oct 2025 12:29:44 +0000

Bug 1994180 - Correctly reference "Manage extensions" string r=rpl,fluent-reviewers,bolsson

Differential Revision: https://phabricator.services.mozilla.com/D268544

Diffstat:
Mbrowser/base/content/browser-addons.js | 8++++----
Mbrowser/components/extensions/test/browser/browser_unified_extensions_empty_panel.js | 47+++++++++++++++++++++++++++++++++++++++++------
Mbrowser/locales/en-US/browser/unifiedExtensions.ftl | 4++--
Apython/l10n/fluent_migrations/bug_1994180_fix_manage_extensions_reference.py | 35+++++++++++++++++++++++++++++++++++
4 files changed, 82 insertions(+), 12 deletions(-)

diff --git a/browser/base/content/browser-addons.js b/browser/base/content/browser-addons.js @@ -2427,7 +2427,7 @@ var gUnifiedExtensions = { ); document.l10n.setAttributes( emptyStateBox.querySelector("description"), - "unified-extensions-empty-content-explain-enable" + "unified-extensions-empty-content-explain-enable2" ); emptyStateBox.hidden = false; this.isAtLeastOneExtensionWithPBMOptIn().then(result => { @@ -2436,7 +2436,7 @@ var gUnifiedExtensions = { if (!result) { document.l10n.setAttributes( emptyStateBox.querySelector("description"), - "unified-extensions-empty-content-explain-manage" + "unified-extensions-empty-content-explain-manage2" ); } }); @@ -2451,8 +2451,8 @@ var gUnifiedExtensions = { document.l10n.setAttributes( emptyStateBox.querySelector("description"), disabledExtensionsInfo.isAnyEnableable - ? "unified-extensions-empty-content-explain-enable" - : "unified-extensions-empty-content-explain-manage" + ? "unified-extensions-empty-content-explain-enable2" + : "unified-extensions-empty-content-explain-manage2" ); emptyStateBox.hidden = false; } else if (!policies.length) { 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 @@ -97,6 +97,31 @@ function getDiscoverButton(win) { ); } +async function checkManageExtensionsText(elem) { + const l10nId = elem.dataset.l10nId; + const doc = elem.ownerDocument; + if (doc.hasPendingL10nMutations) { + await BrowserTestUtils.waitForEvent(doc, "L10nMutationsFinished"); + } + const expectedButtonText = "Manage extensions"; + let expectedTextContent; + if (l10nId === "unified-extensions-empty-content-explain-enable2") { + expectedTextContent = + "Select “Manage extensions” to enable them in settings."; + } else if (l10nId === "unified-extensions-empty-content-explain-manage2") { + expectedTextContent = + "Select “Manage extensions” to manage them in settings."; + } else { + ok(false, `Unexpected data-l10n-id: ${l10nId}`); + return; + } + ok( + expectedTextContent.includes(expectedButtonText), + "Description contains button text ('Manage extensions')" + ); + is(expectedTextContent, elem.textContent, "Description has expected text"); +} + add_task(async function test_button_opens_discopane_when_no_extension() { await BrowserTestUtils.withNewTab( { gBrowser, url: "about:robots" }, @@ -310,10 +335,12 @@ add_task(async function test_button_click_in_pbm_without_private_extensions() { ); is( emptyStateBox.querySelector("description").getAttribute("data-l10n-id"), - "unified-extensions-empty-content-explain-enable", + "unified-extensions-empty-content-explain-enable2", "Has description pointing to Manage extensions button." ); + await checkManageExtensionsText(emptyStateBox.querySelector("description")); + await BrowserTestUtils.closeWindow(win); await Promise.all(extensions.map(extension => extension.unload())); @@ -378,10 +405,12 @@ add_task(async function test_button_click_in_pbm_and_incognito_not_allowed() { ); is( emptyStateBox.querySelector("description").getAttribute("data-l10n-id"), - "unified-extensions-empty-content-explain-manage", + "unified-extensions-empty-content-explain-manage2", "Has description pointing to Manage extensions button with text MANAGE, not ENABLE" ); + await checkManageExtensionsText(emptyStateBox.querySelector("description")); + await BrowserTestUtils.closeWindow(win); await Promise.all(extensions.map(extension => extension.unload())); @@ -420,10 +449,12 @@ add_task(async function test_button_click_in_pbm_pinned_and_no_access() { ); is( emptyStateBox.querySelector("description").getAttribute("data-l10n-id"), - "unified-extensions-empty-content-explain-enable", + "unified-extensions-empty-content-explain-enable2", "Has description pointing to Manage extensions button." ); + await checkManageExtensionsText(emptyStateBox.querySelector("description")); + await BrowserTestUtils.closeWindow(win); await Promise.all(extensions.map(extension => extension.unload())); @@ -449,10 +480,12 @@ add_task(async function test_empty_state_with_disabled_addon() { ); is( emptyStateBox.querySelector("description").getAttribute("data-l10n-id"), - "unified-extensions-empty-content-explain-enable", + "unified-extensions-empty-content-explain-enable2", "Has description pointing to Manage extensions button." ); + await checkManageExtensionsText(emptyStateBox.querySelector("description")); + await BrowserTestUtils.closeWindow(win); await extension.unload(); @@ -558,15 +591,17 @@ async function do_test_empty_state_with_blocklisted_addon(isSoftBlock) { if (isSoftBlock) { is( emptyStateBox.querySelector("description").getAttribute("data-l10n-id"), - "unified-extensions-empty-content-explain-enable", + "unified-extensions-empty-content-explain-enable2", "Has description pointing to Manage extensions button with text ENABLE" ); + await checkManageExtensionsText(emptyStateBox.querySelector("description")); } else { is( emptyStateBox.querySelector("description").getAttribute("data-l10n-id"), - "unified-extensions-empty-content-explain-manage", + "unified-extensions-empty-content-explain-manage2", "Has description pointing to Manage extensions button with text MANAGE, not ENABLE" ); + await checkManageExtensionsText(emptyStateBox.querySelector("description")); } await closeExtensionsPanel(window); diff --git a/browser/locales/en-US/browser/unifiedExtensions.ftl b/browser/locales/en-US/browser/unifiedExtensions.ftl @@ -15,8 +15,8 @@ unified-extensions-empty-reason-private-browsing-not-allowed = You have extensio unified-extensions-empty-reason-extension-not-enabled = You have extensions installed, but not enabled # In this headline, “Level up” means to enhance your browsing experience. unified-extensions-empty-reason-zero-extensions-onboarding = Level up your browsing with extensions -unified-extensions-empty-content-explain-enable = Select “{ unified-extensions-item-message-manage }” to enable them in settings. -unified-extensions-empty-content-explain-manage = Select “{ unified-extensions-item-message-manage }” to manage them in settings. +unified-extensions-empty-content-explain-enable2 = Select “{ unified-extensions-manage-extensions.label }” to enable them in settings. +unified-extensions-empty-content-explain-manage2 = Select “{ unified-extensions-manage-extensions.label }” to manage them in settings. unified-extensions-empty-content-explain-extensions-onboarding = Personalize { -brand-short-name } by changing how it looks and performs or boosting privacy and safety. ## An extension in the main list diff --git a/python/l10n/fluent_migrations/bug_1994180_fix_manage_extensions_reference.py b/python/l10n/fluent_migrations/bug_1994180_fix_manage_extensions_reference.py @@ -0,0 +1,35 @@ +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +from fluent.migrate.transforms import TransformPattern +import fluent.syntax.ast as FTL + + +class FIXUP_REFERENCE(TransformPattern): + def visit_MessageReference(self, node): + if node.id.name == "unified-extensions-item-message-manage": + node.id.name = "unified-extensions-manage-extensions.label" + return node + + +def migrate(ctx): + """Bug 1994180 - Change unified-extensions-item-message-manage reference to unified-extensions-manage-extensions.label, part {index}""" + path = "browser/browser/unifiedExtensions.ftl" + ctx.add_transforms( + path, + path, + [ + FTL.Message( + id=FTL.Identifier("unified-extensions-empty-content-explain-enable2"), + value=FIXUP_REFERENCE( + path, "unified-extensions-empty-content-explain-enable" + ), + ), + FTL.Message( + id=FTL.Identifier("unified-extensions-empty-content-explain-manage2"), + value=FIXUP_REFERENCE( + path, "unified-extensions-empty-content-explain-manage" + ), + ), + ], + )