commit 44b5254ceb13ce1effd19a8f2ce9bd4697db4ca2
parent b54fa3b1aff0778c28aa7da673b4370d09cb00c2
Author: Moritz Beier <mbeier@mozilla.com>
Date: Tue, 16 Dec 2025 09:47:03 +0000
Bug 2004788 - Disable url canonization in new searchbar. r=dao,urlbar-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D276459
Diffstat:
3 files changed, 44 insertions(+), 0 deletions(-)
diff --git a/browser/components/urlbar/content/UrlbarInput.mjs b/browser/components/urlbar/content/UrlbarInput.mjs
@@ -3541,6 +3541,7 @@ export class UrlbarInput extends HTMLElement {
// Only add the suffix when the URL bar value isn't already "URL-like",
// and only if we get a keyboard event, to match user expectations.
if (
+ this.sapName == "searchbar" ||
!this.#isCanonizeKeyboardEvent(event) ||
!/^\s*[^.:\/\s]+(?:\/.*|\s*)$/i.test(value)
) {
diff --git a/browser/components/urlbar/tests/browser/searchbar/browser.toml b/browser/components/urlbar/tests/browser/searchbar/browser.toml
@@ -9,4 +9,6 @@ prefs = [
["browser_new_searchbar_init.js"]
+["browser_search.js"]
+
["browser_searchmode.js"]
diff --git a/browser/components/urlbar/tests/browser/searchbar/browser_search.js b/browser/components/urlbar/tests/browser/searchbar/browser_search.js
@@ -0,0 +1,41 @@
+/* Any copyright is dedicated to the Public Domain.
+ https://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const CANONIZE_MODIFIERS =
+ AppConstants.platform == "macosx" ? { metaKey: true } : { ctrlKey: true };
+
+let searchbar = document.getElementById("searchbar-new");
+let defaultEngine;
+
+add_setup(async function () {
+ await SearchTestUtils.updateRemoteSettingsConfig([{ identifier: "engine" }]);
+ defaultEngine = Services.search.defaultEngine;
+});
+
+add_task(async function test_simple() {
+ let searchTerm = "test";
+ searchbar.focus();
+ EventUtils.sendString(searchTerm);
+ EventUtils.synthesizeKey("KEY_Enter");
+ await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
+
+ let expectedUrl = defaultEngine.getSubmission(searchTerm).uri.spec;
+ Assert.equal(gBrowser.currentURI.spec, expectedUrl, "Search successful");
+ Assert.equal(searchbar.value, searchTerm, "Search term was persisted");
+ searchbar.value = "";
+});
+
+add_task(async function test_no_canonization() {
+ let searchTerm = "test2";
+ searchbar.focus();
+ EventUtils.sendString(searchTerm);
+ EventUtils.synthesizeKey("KEY_Enter", CANONIZE_MODIFIERS);
+ await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
+
+ let expectedUrl = defaultEngine.getSubmission(searchTerm).uri.spec;
+ Assert.equal(gBrowser.currentURI.spec, expectedUrl, "Search successful");
+ Assert.equal(searchbar.value, searchTerm, "Search term was persisted");
+ searchbar.value = "";
+});