summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_popup.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_popup.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_popup.js145
1 files changed, 145 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_popup.js b/browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_popup.js
new file mode 100644
index 0000000000..d25e17d960
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_UrlbarInput_searchTerms_popup.js
@@ -0,0 +1,145 @@
+/* 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 persist search terms
+// are either enabled or disabled, and a popup notification is shown.
+
+function waitForPopupNotification() {
+ let promisePopupShown = BrowserTestUtils.waitForEvent(
+ PopupNotifications.panel,
+ "popupshown"
+ );
+ PopupNotifications.show(
+ gBrowser.selectedBrowser,
+ "test-notification",
+ "This is a sample popup."
+ );
+ return promisePopupShown;
+}
+
+// The main search string used in tests.
+const SEARCH_TERM = "chocolate";
+const PREF_FEATUREGATE = "browser.urlbar.showSearchTerms.featureGate";
+let defaultTestEngine;
+
+add_setup(async function () {
+ await SpecialPowers.pushPrefEnv({
+ set: [[PREF_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,
+ expectedPersistedSearchTerms = true
+) {
+ 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;
+
+ if (expectedPersistedSearchTerms) {
+ assertSearchStringIsInUrlbar(searchString);
+ }
+
+ return { tab, expectedSearchUrl };
+}
+
+// A notification should cause the urlbar to revert while
+// the search term persists.
+add_task(async function generic_popup_when_persist_is_enabled() {
+ let { tab, expectedSearchUrl } = await searchWithTab(SEARCH_TERM);
+
+ await waitForPopupNotification();
+
+ Assert.equal(
+ gURLBar.getAttribute("pageproxystate"),
+ "valid",
+ "Urlbar should have a valid pageproxystate."
+ );
+
+ Assert.equal(
+ gURLBar.value,
+ expectedSearchUrl,
+ "Search url should be in the urlbar."
+ );
+
+ BrowserTestUtils.removeTab(tab);
+ await SpecialPowers.popPrefEnv();
+});
+
+// Ensure the urlbar is not being reverted when a prompt is shown
+// and the persist feature is disabled.
+add_task(async function generic_popup_no_revert_when_persist_is_disabled() {
+ await SpecialPowers.pushPrefEnv({
+ set: [[PREF_FEATUREGATE, false]],
+ });
+
+ let { tab } = await searchWithTab(
+ SEARCH_TERM,
+ null,
+ defaultTestEngine,
+ false
+ );
+
+ // Have a user typed value in the urlbar to make
+ // pageproxystate invalid.
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: SEARCH_TERM,
+ });
+ gURLBar.blur();
+
+ await waitForPopupNotification();
+
+ // Wait a brief amount of time between when the popup is shown
+ // and when the event handler should fire if it's enabled.
+ await TestUtils.waitForTick();
+
+ Assert.equal(
+ gURLBar.getAttribute("pageproxystate"),
+ "invalid",
+ "Urlbar should not be reverted."
+ );
+
+ Assert.equal(
+ gURLBar.value,
+ SEARCH_TERM,
+ "User typed value should remain in urlbar."
+ );
+
+ BrowserTestUtils.removeTab(tab);
+ SpecialPowers.popPrefEnv();
+});