summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_modifiedUrl.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_modifiedUrl.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_modifiedUrl.js100
1 files changed, 100 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_modifiedUrl.js b/browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_modifiedUrl.js
new file mode 100644
index 0000000000..4c20864171
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_modifiedUrl.js
@@ -0,0 +1,100 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// These tests check the behavior of the Urlbar when search terms are
+// expected to be shown but the url is modified from what the browser expects.
+
+let defaultTestEngine;
+
+// The main search string used in tests
+const SEARCH_STRING = "chocolate cake";
+
+add_setup(async function () {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.urlbar.showSearchTerms.featureGate", true]],
+ });
+
+ await SearchTestUtils.installSearchExtension(
+ {
+ name: "MozSearch",
+ search_url: "https://www.example.com/",
+ search_url_get_params: "q={searchTerms}&pc=fake_code",
+ },
+ { setAsDefault: true }
+ );
+ defaultTestEngine = Services.search.getEngineByName("MozSearch");
+
+ registerCleanupFunction(async function () {
+ await PlacesUtils.history.clear();
+ });
+});
+
+// If a SERP uses the History API to modify the URI,
+// the search term should still show in the URL bar.
+add_task(async function history_push_state() {
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+
+ let [expectedSearchUrl] = UrlbarUtils.getSearchQueryUrl(
+ defaultTestEngine,
+ SEARCH_STRING
+ );
+ let browserLoadedPromise = BrowserTestUtils.browserLoaded(
+ tab.linkedBrowser,
+ false,
+ expectedSearchUrl
+ );
+ BrowserTestUtils.loadURIString(tab.linkedBrowser, expectedSearchUrl);
+ await browserLoadedPromise;
+
+ let locationChangePromise = BrowserTestUtils.waitForLocationChange(gBrowser);
+ await SpecialPowers.spawn(tab.linkedBrowser, [], function () {
+ let url = new URL(content.window.location);
+ url.searchParams.set("pc", "fake_code_2");
+ content.history.pushState({}, "", url);
+ });
+
+ await locationChangePromise;
+ // Check URI to make sure that it's actually been changed
+ Assert.equal(
+ gBrowser.currentURI.spec,
+ `https://www.example.com/?q=chocolate+cake&pc=fake_code_2`,
+ "URI of Urlbar should have changed"
+ );
+
+ Assert.equal(
+ gURLBar.value,
+ SEARCH_STRING,
+ `Search string ${SEARCH_STRING} should be in the url bar`
+ );
+
+ BrowserTestUtils.removeTab(tab);
+});
+
+// Loading a url that looks like a search query url but has additional
+// query params should not show the search term in the Urlbar.
+add_task(async function url_with_additional_query_params() {
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+ let [expectedSearchUrl] = UrlbarUtils.getSearchQueryUrl(
+ defaultTestEngine,
+ SEARCH_STRING
+ );
+ // Add a query param
+ expectedSearchUrl += "&another_code=something_else";
+ let browserLoadedPromise = BrowserTestUtils.browserLoaded(
+ tab.linkedBrowser,
+ false,
+ expectedSearchUrl
+ );
+ BrowserTestUtils.loadURIString(tab.linkedBrowser, expectedSearchUrl);
+ await browserLoadedPromise;
+
+ Assert.equal(gURLBar.value, expectedSearchUrl, `URL should be in URL bar`);
+ Assert.equal(
+ gURLBar.getAttribute("pageproxystate"),
+ "valid",
+ "Pageproxystate should be valid"
+ );
+
+ BrowserTestUtils.removeTab(tab);
+});