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