summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/urlbar/browser_urlbarSearchSuggestionsNotification.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/urlbar/browser_urlbarSearchSuggestionsNotification.js')
-rw-r--r--browser/base/content/test/urlbar/browser_urlbarSearchSuggestionsNotification.js254
1 files changed, 0 insertions, 254 deletions
diff --git a/browser/base/content/test/urlbar/browser_urlbarSearchSuggestionsNotification.js b/browser/base/content/test/urlbar/browser_urlbarSearchSuggestionsNotification.js
deleted file mode 100644
index 94ae8a3ff..000000000
--- a/browser/base/content/test/urlbar/browser_urlbarSearchSuggestionsNotification.js
+++ /dev/null
@@ -1,254 +0,0 @@
-const SUGGEST_ALL_PREF = "browser.search.suggest.enabled";
-const SUGGEST_URLBAR_PREF = "browser.urlbar.suggest.searches";
-const CHOICE_PREF = "browser.urlbar.userMadeSearchSuggestionsChoice";
-const TEST_ENGINE_BASENAME = "searchSuggestionEngine.xml";
-
-// Must run first.
-add_task(function* prepare() {
- let engine = yield promiseNewSearchEngine(TEST_ENGINE_BASENAME);
- let oldCurrentEngine = Services.search.currentEngine;
- Services.search.currentEngine = engine;
- registerCleanupFunction(function* () {
- Services.search.currentEngine = oldCurrentEngine;
- Services.prefs.clearUserPref(SUGGEST_ALL_PREF);
- Services.prefs.clearUserPref(SUGGEST_URLBAR_PREF);
-
- // Disable the notification for future tests so it doesn't interfere with
- // them. clearUserPref() won't work because by default the pref is false.
- yield setUserMadeChoicePref(true);
-
- // Make sure the popup is closed for the next test.
- gURLBar.blur();
- Assert.ok(!gURLBar.popup.popupOpen, "popup should be closed");
- });
-});
-
-add_task(function* focus() {
- // Focusing the urlbar used to open the popup in order to show the
- // notification, but it doesn't anymore. Make sure it does not.
- Services.prefs.setBoolPref(SUGGEST_ALL_PREF, true);
- yield setUserMadeChoicePref(false);
- gURLBar.blur();
- gURLBar.focus();
- Assert.ok(!gURLBar.popup.popupOpen, "popup should remain closed");
-});
-
-add_task(function* dismissWithoutResults() {
- Services.prefs.setBoolPref(SUGGEST_ALL_PREF, true);
- yield setUserMadeChoicePref(false);
- gURLBar.blur();
- gURLBar.focus();
- let popupPromise = promisePopupShown(gURLBar.popup);
- gURLBar.openPopup();
- yield popupPromise;
- Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
- assertVisible(true);
- Assert.equal(gURLBar.popup._matchCount, 0, "popup should have no results");
- let disableButton = document.getAnonymousElementByAttribute(
- gURLBar.popup, "anonid", "search-suggestions-notification-disable"
- );
- let transitionPromise = promiseTransition();
- disableButton.click();
- yield transitionPromise;
- Assert.ok(!gURLBar.popup.popupOpen, "popup should be closed");
- gURLBar.blur();
- gURLBar.focus();
- Assert.ok(!gURLBar.popup.popupOpen, "popup should remain closed");
- yield promiseAutocompleteResultPopup("foo");
- Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
- assertVisible(false);
-});
-
-add_task(function* dismissWithResults() {
- Services.prefs.setBoolPref(SUGGEST_ALL_PREF, true);
- yield setUserMadeChoicePref(false);
- gURLBar.blur();
- gURLBar.focus();
- yield promiseAutocompleteResultPopup("foo");
- Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
- assertVisible(true);
- Assert.ok(gURLBar.popup._matchCount > 0, "popup should have results");
- let disableButton = document.getAnonymousElementByAttribute(
- gURLBar.popup, "anonid", "search-suggestions-notification-disable"
- );
- let transitionPromise = promiseTransition();
- disableButton.click();
- yield transitionPromise;
- Assert.ok(gURLBar.popup.popupOpen, "popup should remain open");
- gURLBar.blur();
- gURLBar.focus();
- Assert.ok(!gURLBar.popup.popupOpen, "popup should remain closed");
- yield promiseAutocompleteResultPopup("foo");
- Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
- assertVisible(false);
-});
-
-add_task(function* disable() {
- Services.prefs.setBoolPref(SUGGEST_ALL_PREF, true);
- yield setUserMadeChoicePref(false);
- gURLBar.blur();
- gURLBar.focus();
- yield promiseAutocompleteResultPopup("foo");
- Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
- assertVisible(true);
- let disableButton = document.getAnonymousElementByAttribute(
- gURLBar.popup, "anonid", "search-suggestions-notification-disable"
- );
- let transitionPromise = promiseTransition();
- disableButton.click();
- yield transitionPromise;
- gURLBar.blur();
- yield promiseAutocompleteResultPopup("foo");
- Assert.ok(!suggestionsPresent());
-});
-
-add_task(function* enable() {
- Services.prefs.setBoolPref(SUGGEST_ALL_PREF, true);
- Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, false);
- yield setUserMadeChoicePref(false);
- gURLBar.blur();
- gURLBar.focus();
- yield promiseAutocompleteResultPopup("foo");
- assertVisible(true);
- Assert.ok(!suggestionsPresent());
- let enableButton = document.getAnonymousElementByAttribute(
- gURLBar.popup, "anonid", "search-suggestions-notification-enable"
- );
- let searchPromise = BrowserTestUtils.waitForCondition(suggestionsPresent,
- "waiting for suggestions");
- enableButton.click();
- yield searchPromise;
- // Clicking Yes should trigger a new search so that suggestions appear
- // immediately.
- Assert.ok(suggestionsPresent());
- gURLBar.blur();
- gURLBar.focus();
- // Suggestions should still be present in a new search of course.
- yield promiseAutocompleteResultPopup("bar");
- Assert.ok(suggestionsPresent());
-});
-
-add_task(function* privateWindow() {
- // Since suggestions are disabled in private windows, the notification should
- // not appear even when suggestions are otherwise enabled.
- let win = yield BrowserTestUtils.openNewBrowserWindow({ private: true });
- win.gURLBar.blur();
- win.gURLBar.focus();
- yield promiseAutocompleteResultPopup("foo", win);
- assertVisible(false, win);
- win.gURLBar.blur();
- yield BrowserTestUtils.closeWindow(win);
-});
-
-add_task(function* multipleWindows() {
- // Opening multiple windows, using their urlbars, and then dismissing the
- // notification in one should dismiss the notification in all.
- Services.prefs.setBoolPref(SUGGEST_ALL_PREF, true);
- Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, false);
- yield setUserMadeChoicePref(false);
-
- gURLBar.focus();
- yield promiseAutocompleteResultPopup("win1");
- assertVisible(true);
-
- let win2 = yield BrowserTestUtils.openNewBrowserWindow();
- win2.gURLBar.focus();
- yield promiseAutocompleteResultPopup("win2", win2);
- assertVisible(true, win2);
-
- let win3 = yield BrowserTestUtils.openNewBrowserWindow();
- win3.gURLBar.focus();
- yield promiseAutocompleteResultPopup("win3", win3);
- assertVisible(true, win3);
-
- let enableButton = win3.document.getAnonymousElementByAttribute(
- win3.gURLBar.popup, "anonid", "search-suggestions-notification-enable"
- );
- let transitionPromise = promiseTransition(win3);
- enableButton.click();
- yield transitionPromise;
- assertVisible(false, win3);
-
- win2.gURLBar.focus();
- yield promiseAutocompleteResultPopup("win2done", win2);
- assertVisible(false, win2);
-
- gURLBar.focus();
- yield promiseAutocompleteResultPopup("win1done");
- assertVisible(false);
-
- yield BrowserTestUtils.closeWindow(win2);
- yield BrowserTestUtils.closeWindow(win3);
-});
-
-add_task(function* enableOutsideNotification() {
- // Setting the suggest.searches pref outside the notification (e.g., by
- // ticking the checkbox in the preferences window) should hide it.
- Services.prefs.setBoolPref(SUGGEST_ALL_PREF, true);
- Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, false);
- yield setUserMadeChoicePref(false);
-
- Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, true);
- gURLBar.focus();
- yield promiseAutocompleteResultPopup("foo");
- assertVisible(false);
-});
-
-/**
- * Setting the choice pref triggers a pref observer in the urlbar, which hides
- * the notification if it's present. This function returns a promise that's
- * resolved once the observer fires.
- *
- * @param userMadeChoice A boolean, the pref's new value.
- * @return A Promise that's resolved when the observer fires -- or, if the pref
- * is currently the given value, that's resolved immediately.
- */
-function setUserMadeChoicePref(userMadeChoice) {
- return new Promise(resolve => {
- let currentUserMadeChoice = Services.prefs.getBoolPref(CHOICE_PREF);
- if (currentUserMadeChoice != userMadeChoice) {
- Services.prefs.addObserver(CHOICE_PREF, function obs(subj, topic, data) {
- Services.prefs.removeObserver(CHOICE_PREF, obs);
- resolve();
- }, false);
- }
- Services.prefs.setBoolPref(CHOICE_PREF, userMadeChoice);
- if (currentUserMadeChoice == userMadeChoice) {
- resolve();
- }
- });
-}
-
-function suggestionsPresent() {
- let controller = gURLBar.popup.input.controller;
- let matchCount = controller.matchCount;
- for (let i = 0; i < matchCount; i++) {
- let url = controller.getValueAt(i);
- let mozActionMatch = url.match(/^moz-action:([^,]+),(.*)$/);
- if (mozActionMatch) {
- let [, type, paramStr] = mozActionMatch;
- let params = JSON.parse(paramStr);
- if (type == "searchengine" && "searchSuggestion" in params) {
- return true;
- }
- }
- }
- return false;
-}
-
-function assertVisible(visible, win=window) {
- let style =
- win.getComputedStyle(win.gURLBar.popup.searchSuggestionsNotification);
- Assert.equal(style.visibility, visible ? "visible" : "collapse");
-}
-
-function promiseTransition(win=window) {
- return new Promise(resolve => {
- win.gURLBar.popup.addEventListener("transitionend", function onEnd() {
- win.gURLBar.popup.removeEventListener("transitionend", onEnd, true);
- // The urlbar needs to handle the transitionend first, but that happens
- // naturally since promises are resolved at the end of the current tick.
- resolve();
- }, true);
- });
-}