tor-browser

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

commit 8bc7f4beac1c93f7e93d1426c5354e8b1b5b3b0c
parent b6ff77e3016b86a7fe71aea9e0c38691653f3375
Author: Moritz Beier <mbeier@mozilla.com>
Date:   Wed,  3 Dec 2025 13:25:35 +0000

Bug 2003043 - New searchbar is initialized even if it is disabled. r=dao,search-reviewers,urlbar-reviewers,scunnane

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

Diffstat:
Mbrowser/base/content/navigator-toolbox.inc.xhtml | 1+
Mbrowser/components/search/OpenSearchManager.sys.mjs | 5+++++
Mbrowser/components/search/test/browser/browser.toml | 2++
Mbrowser/components/search/test/browser/browser_contentContextMenu_visualSearch.js | 1-
Abrowser/components/search/test/browser/browser_new_searchbar_init.js | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
Mbrowser/components/search/test/browser/head.js | 1+
Mbrowser/components/urlbar/content/UrlbarInput.mjs | 7+++----
7 files changed, 63 insertions(+), 5 deletions(-)

diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml @@ -173,6 +173,7 @@ class="urlbar-container" removable="false" overflows="false"> + <toolbartabstop/> <html:moz-urlbar id="urlbar" class="urlbar" popover="manual" diff --git a/browser/components/search/OpenSearchManager.sys.mjs b/browser/components/search/OpenSearchManager.sys.mjs @@ -129,6 +129,11 @@ class _OpenSearchManager { updateOpenSearchBadge(win) { let engines = this.#offeredEngines.get(win.gBrowser.selectedBrowser); for (let urlbar of win.document.querySelectorAll("moz-urlbar")) { + if (!urlbar.controller) { + // This means it is not initialized and happens + // if the new searchbar is disabled. + continue; + } urlbar.addSearchEngineHelper.setEnginesFromBrowser( win.gBrowser.selectedBrowser, engines || [] diff --git a/browser/components/search/test/browser/browser.toml b/browser/components/search/test/browser/browser.toml @@ -85,6 +85,8 @@ skip-if = [ ["browser_ime_composition.js"] +["browser_new_searchbar_init.js"] + ["browser_oneOff.js"] ["browser_oneOffContextMenu.js"] diff --git a/browser/components/search/test/browser/browser_contentContextMenu_visualSearch.js b/browser/components/search/test/browser/browser_contentContextMenu_visualSearch.js @@ -8,7 +8,6 @@ ChromeUtils.defineESModuleGetters(this, { SearchEngine: "moz-src:///toolkit/components/search/SearchEngine.sys.mjs", - sinon: "resource://testing-common/Sinon.sys.mjs", }); const CONTEXT_MENU_ID = "contentAreaContextMenu"; diff --git a/browser/components/search/test/browser/browser_new_searchbar_init.js b/browser/components/search/test/browser/browser_new_searchbar_init.js @@ -0,0 +1,51 @@ +/* Any copyright is dedicated to the Public Domain. + https://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/** + * Tests whether the new and old searchbars get initialized/uninitialized + * when enabled/disabled. + */ + +add_setup(async function () { + await gCUITestUtils.addSearchBar(); + registerCleanupFunction(async function () { + gCUITestUtils.removeSearchBar(); + }); +}); + +add_task(async function () { + info("Opening new window (browser.search.widget.new=false)."); + let win = await BrowserTestUtils.openNewBrowserWindow(); + let newSearchbar = win.document.querySelector("#searchbar-new"); + let oldSearchbar = win.document.querySelector("#searchbar"); + Assert.ok(!newSearchbar.controller, "New searchbar wasn't initialized"); + Assert.ok(!!oldSearchbar.firstChild, "Old searchbar was initialized"); + + info("Enabling new searchbar."); + SpecialPowers.pushPrefEnv({ + set: [["browser.search.widget.new", true]], + }); + await TestUtils.waitForTick(); + Assert.ok(!!newSearchbar.controller, "New searchbar was initialized"); + Assert.ok(!oldSearchbar.firstChild, "Old searchbar was uninitialized"); + await BrowserTestUtils.closeWindow(win); + + info("Opening new window (browser.search.widget.new=true)."); + win = await BrowserTestUtils.openNewBrowserWindow(); + newSearchbar = win.document.querySelector("#searchbar-new"); + oldSearchbar = win.document.querySelector("#searchbar"); + Assert.ok(!!newSearchbar.controller, "New searchbar was initialized"); + Assert.ok(!oldSearchbar.firstChild, "Old searchbar wasn't initialized"); + + info("Disabling new searchbar."); + let spy = sinon.spy(newSearchbar, "_removeObservers"); + SpecialPowers.popPrefEnv(); + await TestUtils.waitForTick(); + Assert.ok(spy.calledOnce, "New searchbar was uninitialized"); + Assert.ok(!!oldSearchbar.firstChild, "Old searchbar was initialized"); + + sinon.restore(); + await BrowserTestUtils.closeWindow(win); +}); diff --git a/browser/components/search/test/browser/head.js b/browser/components/search/test/browser/head.js @@ -12,6 +12,7 @@ ChromeUtils.defineESModuleGetters(this, { SearchTestUtils: "resource://testing-common/SearchTestUtils.sys.mjs", SearchUITestUtils: "resource://testing-common/SearchUITestUtils.sys.mjs", SearchUtils: "moz-src:///toolkit/components/search/SearchUtils.sys.mjs", + sinon: "resource://testing-common/Sinon.sys.mjs", TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs", UrlbarSearchUtils: "moz-src:///browser/components/urlbar/UrlbarSearchUtils.sys.mjs", diff --git a/browser/components/urlbar/content/UrlbarInput.mjs b/browser/components/urlbar/content/UrlbarInput.mjs @@ -87,7 +87,6 @@ export class UrlbarInput extends HTMLElement { flex="1" pageproxystate="invalid"> <moz-urlbar-slot name="remote-control-box"> </moz-urlbar-slot> - <toolbartabstop /> <toolbarbutton id="urlbar-searchmode-switcher" class="searchmode-switcher chromeclass-toolbar-additional" align="center" @@ -353,7 +352,7 @@ export class UrlbarInput extends HTMLElement { connectedCallback() { if ( - this.sapName == "searchbar" && + this.getAttribute("sap-name") == "searchbar" && !lazy.UrlbarPrefs.get("browser.search.widget.new") ) { return; @@ -450,7 +449,7 @@ export class UrlbarInput extends HTMLElement { disconnectedCallback() { if ( - this.sapName == "searchbar" && + this.getAttribute("sap-name") == "searchbar" && !lazy.UrlbarPrefs.get("browser.search.widget.new") ) { return; @@ -591,7 +590,7 @@ export class UrlbarInput extends HTMLElement { ); break; case "browser.search.widget.new": { - if (this.sapName == "searchbar" && this.isConnected) { + if (this.getAttribute("sap-name") == "searchbar" && this.isConnected) { if (lazy.UrlbarPrefs.get("browser.search.widget.new")) { // The connectedCallback was skipped. Init now. this.#init();