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:
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();
+});