tor-browser

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

commit 317b057f0e40894fc197a8517f73f42bcc0e08bf
parent adaf268b03679a6828af27c8c748cfb411aa4649
Author: Moritz Beier <mbeier@mozilla.com>
Date:   Mon, 15 Dec 2025 21:08:58 +0000

Bug 2005772 - Create directory for new searchbar mochitests. r=dao,search-reviewers,urlbar-reviewers

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

Diffstat:
Mbrowser/components/search/test/browser/browser.toml | 4----
Dbrowser/components/search/test/browser/browser_new_searchbar_init.js | 51---------------------------------------------------
Dbrowser/components/search/test/browser/browser_new_searchbar_searchmode.js | 57---------------------------------------------------------
Mbrowser/components/urlbar/SearchModeSwitcher.sys.mjs | 7++++++-
Mbrowser/components/urlbar/moz.build | 1+
Abrowser/components/urlbar/tests/browser/searchbar/browser.toml | 12++++++++++++
Abrowser/components/urlbar/tests/browser/searchbar/browser_new_searchbar_init.js | 48++++++++++++++++++++++++++++++++++++++++++++++++
Abrowser/components/urlbar/tests/browser/searchbar/browser_searchmode.js | 46++++++++++++++++++++++++++++++++++++++++++++++
Abrowser/components/urlbar/tests/browser/searchbar/head.js | 31+++++++++++++++++++++++++++++++
9 files changed, 144 insertions(+), 113 deletions(-)

diff --git a/browser/components/search/test/browser/browser.toml b/browser/components/search/test/browser/browser.toml @@ -83,10 +83,6 @@ skip-if = [ ["browser_ime_composition.js"] -["browser_new_searchbar_init.js"] - -["browser_new_searchbar_searchmode.js"] - ["browser_oneOff.js"] ["browser_oneOffContextMenu.js"] diff --git a/browser/components/search/test/browser/browser_new_searchbar_init.js b/browser/components/search/test/browser/browser_new_searchbar_init.js @@ -1,51 +0,0 @@ -/* 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/browser_new_searchbar_searchmode.js b/browser/components/search/test/browser/browser_new_searchbar_searchmode.js @@ -1,57 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - https://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -/** - * Tests whether search mode works as expected in the new search bar. - * E.g. there should be a global search mode and it - * should not be tied to the selected tab. - */ - -ChromeUtils.defineESModuleGetters(this, { - SearchbarTestUtils: "resource://testing-common/UrlbarTestUtils.sys.mjs", -}); - -add_setup(async function () { - SearchbarTestUtils.init(this); - SpecialPowers.pushPrefEnv({ - set: [["browser.search.widget.new", true]], - }); - await gCUITestUtils.addSearchBar(); - registerCleanupFunction(() => gCUITestUtils.removeSearchBar()); - - await SearchTestUtils.updateRemoteSettingsConfig([ - { identifier: "engine1" }, - { identifier: "engine2" }, - { identifier: "engine3" }, - ]); -}); - -add_task(async function searchModeSurvivesTabSwitch() { - let tab1 = gBrowser.selectedTab; - let tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser); - - let popup = await SearchbarTestUtils.openSearchModeSwitcher(window); - info("Press on the engine1 menu button to enter search mode"); - let popupHidden = SearchbarTestUtils.searchModeSwitcherPopupClosed(window); - popup.querySelector("menuitem[label=engine1]").click(); - await popupHidden; - - await SearchbarTestUtils.assertSearchMode(window, { - engineName: "engine1", - entry: "searchbutton", - source: 3, - }); - - info("Switching tab. Search mode should not be affected."); - await BrowserTestUtils.switchTab(gBrowser, tab1); - await SearchbarTestUtils.assertSearchMode(window, { - engineName: "engine1", - entry: "searchbutton", - source: 3, - }); - - SearchbarTestUtils.exitSearchMode(window); - gBrowser.removeTab(tab2); -}); diff --git a/browser/components/urlbar/SearchModeSwitcher.sys.mjs b/browser/components/urlbar/SearchModeSwitcher.sys.mjs @@ -200,7 +200,12 @@ export class SearchModeSwitcher { } observe(_subject, topic, data) { - if (!this.#input.window || this.#input.window.closed) { + if ( + !this.#input.window || + this.#input.window.closed || + // TODO bug 2005783 stop observing when input is disconnected. + !this.#input.isConnected + ) { return; } diff --git a/browser/components/urlbar/moz.build b/browser/components/urlbar/moz.build @@ -98,6 +98,7 @@ BROWSER_CHROME_MANIFESTS += [ "tests/browser-updateResults/browser.toml", "tests/browser/browser.toml", "tests/browser/browserSidebarRevamp.toml", + "tests/browser/searchbar/browser.toml", "tests/engagementTelemetry/browser/browser.toml", "tests/quicksuggest/browser/browser.toml", ] diff --git a/browser/components/urlbar/tests/browser/searchbar/browser.toml b/browser/components/urlbar/tests/browser/searchbar/browser.toml @@ -0,0 +1,12 @@ +[DEFAULT] +support-files = [ + "../head-common.js", + "head.js", +] +prefs = [ + "browser.search.widget.new=true", +] + +["browser_new_searchbar_init.js"] + +["browser_searchmode.js"] diff --git a/browser/components/urlbar/tests/browser/searchbar/browser_new_searchbar_init.js b/browser/components/urlbar/tests/browser/searchbar/browser_new_searchbar_init.js @@ -0,0 +1,48 @@ +/* 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_task(async function () { + SpecialPowers.pushPrefEnv({ + set: [["browser.search.widget.new", false]], + }); + 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.popPrefEnv(); + 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.pushPrefEnv({ + set: [["browser.search.widget.new", false]], + }); + 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); + SpecialPowers.popPrefEnv(); +}); diff --git a/browser/components/urlbar/tests/browser/searchbar/browser_searchmode.js b/browser/components/urlbar/tests/browser/searchbar/browser_searchmode.js @@ -0,0 +1,46 @@ +/* Any copyright is dedicated to the Public Domain. + https://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/** + * Tests whether search mode works as expected in the new search bar. + * E.g. there should be a global search mode and it + * should not be tied to the selected tab. + */ + +add_setup(async function () { + await SearchTestUtils.updateRemoteSettingsConfig([ + { identifier: "engine1" }, + { identifier: "engine2" }, + { identifier: "engine3" }, + ]); +}); + +add_task(async function searchModeSurvivesTabSwitch() { + let tab1 = gBrowser.selectedTab; + let tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser); + + let popup = await SearchbarTestUtils.openSearchModeSwitcher(window); + info("Press on the engine1 menu button to enter search mode"); + let popupHidden = SearchbarTestUtils.searchModeSwitcherPopupClosed(window); + popup.querySelector("menuitem[label=engine1]").click(); + await popupHidden; + + await SearchbarTestUtils.assertSearchMode(window, { + engineName: "engine1", + entry: "searchbutton", + source: 3, + }); + + info("Switching tab. Search mode should not be affected."); + await BrowserTestUtils.switchTab(gBrowser, tab1); + await SearchbarTestUtils.assertSearchMode(window, { + engineName: "engine1", + entry: "searchbutton", + source: 3, + }); + + SearchbarTestUtils.exitSearchMode(window); + gBrowser.removeTab(tab2); +}); diff --git a/browser/components/urlbar/tests/browser/searchbar/head.js b/browser/components/urlbar/tests/browser/searchbar/head.js @@ -0,0 +1,31 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +ChromeUtils.defineESModuleGetters(this, { + CustomizableUITestUtils: + "resource://testing-common/CustomizableUITestUtils.sys.mjs", + SearchbarTestUtils: "resource://testing-common/UrlbarTestUtils.sys.mjs", + SearchUITestUtils: "resource://testing-common/SearchUITestUtils.sys.mjs", + SearchUtils: "moz-src:///toolkit/components/search/SearchUtils.sys.mjs", + TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs", + UrlbarPrefs: "moz-src:///browser/components/urlbar/UrlbarPrefs.sys.mjs", + UrlbarResult: "moz-src:///browser/components/urlbar/UrlbarResult.sys.mjs", + UrlbarUtils: "moz-src:///browser/components/urlbar/UrlbarUtils.sys.mjs", + UrlbarView: "moz-src:///browser/components/urlbar/UrlbarView.sys.mjs", + sinon: "resource://testing-common/Sinon.sys.mjs", +}); + +Services.scriptloader.loadSubScript( + "chrome://mochitests/content/browser/browser/components/urlbar/tests/browser/head-common.js", + this +); + +let gCUITestUtils = new CustomizableUITestUtils(window); +gCUITestUtils.addSearchBar(); +SearchbarTestUtils.init(this); + +registerCleanupFunction(async () => { + gCUITestUtils.removeSearchBar(); +});