forked from mirrors/gecko-dev
MozReview-Commit-ID: IP5iRstshrM --HG-- extra : rebase_source : 11e70ee041a8015486c15b57ababe05e6e567792
150 lines
6 KiB
JavaScript
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");
|
|
}
|