fune/browser/base/content/test/urlbar/browser_urlbarSearchSuggestions_opt-out.js
Mark Banner 1361f77350 Bug 1371294 - Add a SearchTestUtils.jsm file and stop duplicating promiseNewSearchEngine. r=mikedeboer
MozReview-Commit-ID: IP5iRstshrM

--HG--
extra : rebase_source : 11e70ee041a8015486c15b57ababe05e6e567792
2018-04-12 20:09:01 +01:00

150 lines
6 KiB
JavaScript

/* eslint-disable mozilla/no-arbitrary-setTimeout */
// The order of the tests here matters!
const SUGGEST_ALL_PREF = "browser.search.suggest.enabled";
const SUGGEST_URLBAR_PREF = "browser.urlbar.suggest.searches";
const CHOICE_PREF = "browser.urlbar.userMadeSearchSuggestionsChoice";
const TIMES_PREF = "browser.urlbar.timesBeforeHidingSuggestionsHint";
const TEST_ENGINE_BASENAME = "searchSuggestionEngine.xml";
const ONEOFF_PREF = "browser.urlbar.oneOffSearches";
add_task(async function prepare() {
let engine = await SearchTestUtils.promiseNewSearchEngine(
getRootDirectory(gTestPath) + TEST_ENGINE_BASENAME);
let oldCurrentEngine = Services.search.currentEngine;
Services.search.currentEngine = engine;
let suggestionsEnabled = Services.prefs.getBoolPref(SUGGEST_URLBAR_PREF);
let defaults = Services.prefs.getDefaultBranch("browser.urlbar.");
let searchSuggestionsDefault = defaults.getBoolPref("suggest.searches");
defaults.setBoolPref("suggest.searches", true);
let suggestionsChoice = Services.prefs.getBoolPref(CHOICE_PREF);
Services.prefs.setBoolPref(CHOICE_PREF, false);
let oneOffs = Services.prefs.getBoolPref(ONEOFF_PREF);
Services.prefs.setBoolPref(ONEOFF_PREF, true);
registerCleanupFunction(async function() {
defaults.setBoolPref("suggest.searches", searchSuggestionsDefault);
Services.search.currentEngine = oldCurrentEngine;
Services.prefs.clearUserPref(SUGGEST_ALL_PREF);
Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, suggestionsEnabled);
Services.prefs.setBoolPref(CHOICE_PREF, suggestionsChoice);
Services.prefs.setBoolPref(ONEOFF_PREF, oneOffs);
// Make sure the popup is closed for the next test.
gURLBar.blur();
Assert.ok(!gURLBar.popup.popupOpen, "popup should be closed");
});
});
add_task(async function focus() {
// Focusing the urlbar should open the popup in order to show the
// notification.
setupVisibleHint();
gURLBar.blur();
let popupPromise = promisePopupShown(gURLBar.popup);
focusAndSelectUrlBar(true);
await popupPromise;
Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
assertVisible(true);
assertFooterVisible(false);
Assert.equal(gURLBar.popup.matchCount, 0, "popup should have no results");
// Start searching.
EventUtils.sendString("rnd");
await promiseSearchComplete();
Assert.ok(suggestionsPresent());
assertVisible(true);
assertFooterVisible(true);
// Check the Change Options link.
let changeOptionsLink = document.getElementById("search-suggestions-change-settings");
let prefsPromise = BrowserTestUtils.waitForLocationChange(gBrowser, "about:preferences#search");
changeOptionsLink.click();
await prefsPromise;
Assert.ok(!gURLBar.popup.popupOpen, "popup should be closed");
// The preferences page does fancy stuff with focus, ensure to unload it.
await BrowserTestUtils.loadURI(gBrowser.selectedBrowser, "about:blank");
});
add_task(async function click_on_focused() {
// Even if the location bar is already focused, we should still show the popup
// and the notification on click.
setupVisibleHint();
gURLBar.blur();
// Won't show the hint since it's not user initiated.
gURLBar.focus();
await new Promise(resolve => setTimeout(resolve, 1000));
Assert.ok(!gURLBar.popup.popupOpen, "popup should be closed");
Assert.ok(gURLBar.focused, "The input field should be focused");
let popupPromise = promisePopupShown(gURLBar.popup);
EventUtils.synthesizeMouseAtCenter(gURLBar.inputField, {});
await popupPromise;
Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
assertVisible(true);
assertFooterVisible(false);
Assert.equal(gURLBar.popup.matchCount, 0, "popup should have no results");
gURLBar.blur();
Assert.ok(!gURLBar.popup.popupOpen, "popup should be closed");
});
add_task(async function new_tab() {
// Opening a new tab when the urlbar is unfocused, should focus it but not
// open the popup.
setupVisibleHint();
gURLBar.blur();
// openNewForegroundTab doesn't focus the urlbar.
await BrowserTestUtils.synthesizeKey("t", { accelKey: true }, gBrowser.selectedBrowser);
await new Promise(resolve => setTimeout(resolve, 500));
Assert.ok(!gURLBar.popup.popupOpen, "popup should be closed");
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
add_task(async function privateWindow() {
// Since suggestions are disabled in private windows, the notification should
// not appear even when suggestions are otherwise enabled.
setupVisibleHint();
let win = await BrowserTestUtils.openNewBrowserWindow({ private: true });
await promiseAutocompleteResultPopup("foo", win);
assertVisible(false, win);
assertFooterVisible(true, win);
win.gURLBar.blur();
await BrowserTestUtils.closeWindow(win);
});
add_task(async function enableOutsideNotification() {
// Setting the suggest.searches pref outside the notification (e.g., by
// ticking the checkbox in the preferences window) should hide it.
setupVisibleHint();
Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, false);
await promiseAutocompleteResultPopup("foo");
assertVisible(false);
assertFooterVisible(true);
});
add_task(async function userMadeChoice() {
// If the user made a choice already, he should not see the hint.
setupVisibleHint();
Services.prefs.setBoolPref(CHOICE_PREF, true);
await promiseAutocompleteResultPopup("foo");
assertVisible(false);
assertFooterVisible(true);
});
function setupVisibleHint() {
Services.prefs.clearUserPref(TIMES_PREF);
Services.prefs.setBoolPref(SUGGEST_ALL_PREF, true);
// Toggle to reset the whichNotification cache.
Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, false);
Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, true);
}
function assertVisible(visible, win = window) {
let style =
win.getComputedStyle(win.gURLBar.popup.searchSuggestionsNotification);
let check = visible ? "notEqual" : "equal";
Assert[check](style.display, "none");
}
function assertFooterVisible(visible, win = window) {
let style = win.getComputedStyle(win.gURLBar.popup.footer);
Assert.equal(style.visibility, visible ? "visible" : "collapse");
}