summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_revert.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_revert.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_revert.js170
1 files changed, 170 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_revert.js b/browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_revert.js
new file mode 100644
index 0000000000..91d6ea403a
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_revert.js
@@ -0,0 +1,170 @@
+/* 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 shown
+// and the user reverts the Urlbar.
+
+let defaultTestEngine;
+
+// The main search keyword 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();
+ });
+});
+
+async function searchWithTab(
+ searchString,
+ tab = null,
+ engine = defaultTestEngine
+) {
+ if (!tab) {
+ tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+ }
+
+ let [expectedSearchUrl] = UrlbarUtils.getSearchQueryUrl(engine, searchString);
+ let browserLoadedPromise = BrowserTestUtils.browserLoaded(
+ tab.linkedBrowser,
+ false,
+ expectedSearchUrl
+ );
+
+ gURLBar.focus();
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ waitForFocus,
+ value: searchString,
+ fireInputEvent: true,
+ });
+ EventUtils.synthesizeKey("KEY_Enter");
+ await browserLoadedPromise;
+
+ assertSearchStringIsInUrlbar(searchString);
+
+ return { tab, expectedSearchUrl };
+}
+
+function synthesizeRevert() {
+ gURLBar.focus();
+ EventUtils.synthesizeKey("KEY_Escape", { repeat: 2 });
+}
+
+// Users should be able to revert the URL bar
+add_task(async function revert() {
+ let { tab, expectedSearchUrl } = await searchWithTab(SEARCH_STRING);
+ synthesizeRevert();
+
+ Assert.equal(
+ gURLBar.value,
+ expectedSearchUrl,
+ `Urlbar should have the reverted URI ${expectedSearchUrl} as its value.`
+ );
+
+ BrowserTestUtils.removeTab(tab);
+});
+
+// Users should be able to revert the URL bar,
+// and go to the same page.
+add_task(async function revert_and_press_enter() {
+ let { tab, expectedSearchUrl } = await searchWithTab(SEARCH_STRING);
+ let browserLoadedPromise = BrowserTestUtils.browserLoaded(
+ tab.linkedBrowser,
+ false,
+ expectedSearchUrl
+ );
+
+ synthesizeRevert();
+ gURLBar.focus();
+ EventUtils.synthesizeKey("KEY_Enter");
+ await browserLoadedPromise;
+
+ BrowserTestUtils.removeTab(tab);
+});
+
+// Users should be able to revert the URL, and then if they navigate
+// to another tab, the tab that was reverted will show the search term again.
+add_task(async function revert_and_change_tab() {
+ let { tab, expectedSearchUrl } = await searchWithTab(SEARCH_STRING);
+
+ synthesizeRevert();
+
+ Assert.notEqual(
+ gURLBar.value,
+ SEARCH_STRING,
+ `Search string ${SEARCH_STRING} should not be in the url bar`
+ );
+ Assert.equal(
+ gURLBar.value,
+ expectedSearchUrl,
+ `Urlbar should have ${expectedSearchUrl} as value.`
+ );
+
+ // Open another tab
+ let tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+
+ // Switch back to the original tab.
+ await BrowserTestUtils.switchTab(gBrowser, tab);
+
+ // Because the urlbar is focused, the pageproxystate should be invalid.
+ assertSearchStringIsInUrlbar(SEARCH_STRING, { pageProxyState: "invalid" });
+
+ BrowserTestUtils.removeTab(tab);
+ BrowserTestUtils.removeTab(tab2);
+});
+
+// If a user reverts a tab, and then does another search,
+// they should be able to see the search term again.
+add_task(async function revert_and_search_again() {
+ let { tab } = await searchWithTab(SEARCH_STRING);
+ synthesizeRevert();
+ await searchWithTab("another search string", tab);
+ BrowserTestUtils.removeTab(tab);
+});
+
+// If a user reverts the Urlbar while on a default SERP,
+// and they navigate away from the page by visiting another
+// link or using the back/forward buttons, the Urlbar should
+// show the search term again when returning back to the default SERP.
+add_task(async function revert_when_using_content() {
+ let { tab } = await searchWithTab(SEARCH_STRING);
+ synthesizeRevert();
+ await searchWithTab("another search string", tab);
+
+ // Revert the page, and then go back and forth in history.
+ // The search terms should show up.
+ synthesizeRevert();
+ let pageShowPromise = BrowserTestUtils.waitForContentEvent(
+ tab.linkedBrowser,
+ "pageshow"
+ );
+ tab.linkedBrowser.goBack();
+ await pageShowPromise;
+ assertSearchStringIsInUrlbar(SEARCH_STRING);
+
+ pageShowPromise = BrowserTestUtils.waitForContentEvent(
+ tab.linkedBrowser,
+ "pageshow"
+ );
+ tab.linkedBrowser.goForward();
+ await pageShowPromise;
+ assertSearchStringIsInUrlbar("another search string");
+
+ BrowserTestUtils.removeTab(tab);
+});