summaryrefslogtreecommitdiffstats
path: root/browser/components/search/test/browser/browser_searchbar_default.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/search/test/browser/browser_searchbar_default.js')
-rw-r--r--browser/components/search/test/browser/browser_searchbar_default.js221
1 files changed, 221 insertions, 0 deletions
diff --git a/browser/components/search/test/browser/browser_searchbar_default.js b/browser/components/search/test/browser/browser_searchbar_default.js
new file mode 100644
index 0000000000..c1e9280932
--- /dev/null
+++ b/browser/components/search/test/browser/browser_searchbar_default.js
@@ -0,0 +1,221 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/*
+ * Tests the correct default engines in the search bar.
+ */
+
+"use strict";
+
+const { SearchSuggestionController } = ChromeUtils.importESModule(
+ "resource://gre/modules/SearchSuggestionController.sys.mjs"
+);
+
+const templateNormal = "https://example.com/?q=";
+const templatePrivate = "https://example.com/?query=";
+
+const searchPopup = document.getElementById("PopupSearchAutoComplete");
+
+add_setup(async function () {
+ await gCUITestUtils.addSearchBar();
+
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.search.separatePrivateDefault", false]],
+ });
+
+ // Create two new search engines. Mark one as the default engine, so
+ // the test don't crash. We need to engines for this test as the searchbar
+ // doesn't display the default search engine among the one-off engines.
+ await SearchTestUtils.installSearchExtension({
+ name: "MozSearch1",
+ keyword: "mozalias",
+ });
+ await SearchTestUtils.installSearchExtension({
+ name: "MozSearch2",
+ keyword: "mozalias2",
+ search_url_get_params: "query={searchTerms}",
+ });
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["browser.search.separatePrivateDefault.ui.enabled", true],
+ ["browser.search.separatePrivateDefault", false],
+ ],
+ });
+
+ let originalEngine = await Services.search.getDefault();
+ let originalPrivateEngine = await Services.search.getDefaultPrivate();
+
+ let engineDefault = Services.search.getEngineByName("MozSearch1");
+ await Services.search.setDefault(
+ engineDefault,
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+
+ registerCleanupFunction(async function () {
+ gCUITestUtils.removeSearchBar();
+ await Services.search.setDefault(
+ originalEngine,
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+ await Services.search.setDefaultPrivate(
+ originalPrivateEngine,
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+ });
+});
+
+async function doSearch(
+ win,
+ tab,
+ engineName,
+ templateUrl,
+ inputText = "query"
+) {
+ await searchInSearchbar(inputText, win);
+
+ Assert.ok(
+ win.BrowserSearch.searchBar.textbox.popup.searchbarEngineName
+ .getAttribute("value")
+ .includes(engineName),
+ "Should have the correct engine name displayed in the bar"
+ );
+
+ let p = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
+ EventUtils.synthesizeKey("KEY_Enter", {}, win);
+ await p;
+
+ Assert.equal(
+ tab.linkedBrowser.currentURI.spec,
+ templateUrl + inputText,
+ "Should have loaded the expected search page."
+ );
+}
+
+add_task(async function test_default_search() {
+ const tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "about:blank"
+ );
+
+ await doSearch(window, tab, "MozSearch1", templateNormal);
+
+ BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function test_default_search_private_no_separate() {
+ const win = await BrowserTestUtils.openNewBrowserWindow({ private: true });
+
+ await doSearch(win, win.gBrowser.selectedTab, "MozSearch1", templateNormal);
+
+ await BrowserTestUtils.closeWindow(win);
+});
+
+add_task(async function test_default_search_private_no_separate() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.search.separatePrivateDefault", true]],
+ });
+
+ await Services.search.setDefaultPrivate(
+ Services.search.getEngineByName("MozSearch2"),
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+
+ const win = await BrowserTestUtils.openNewBrowserWindow({ private: true });
+
+ await doSearch(win, win.gBrowser.selectedTab, "MozSearch2", templatePrivate);
+
+ await BrowserTestUtils.closeWindow(win);
+});
+
+add_task(async function test_form_history() {
+ const tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "about:blank"
+ );
+ await FormHistoryTestUtils.clear("searchbar-history");
+ const gShortString = new Array(
+ SearchSuggestionController.SEARCH_HISTORY_MAX_VALUE_LENGTH
+ )
+ .fill("a")
+ .join("");
+ let promiseAdd = TestUtils.topicObserved("satchel-storage-changed");
+ await doSearch(window, tab, "MozSearch1", templateNormal, gShortString);
+ await promiseAdd;
+ let entries = (await FormHistoryTestUtils.search("searchbar-history")).map(
+ entry => entry.value
+ );
+ Assert.deepEqual(
+ entries,
+ [gShortString],
+ "Should have stored search history"
+ );
+
+ await FormHistoryTestUtils.clear("searchbar-history");
+ const gLongString = new Array(
+ SearchSuggestionController.SEARCH_HISTORY_MAX_VALUE_LENGTH + 1
+ )
+ .fill("a")
+ .join("");
+ await doSearch(window, tab, "MozSearch1", templateNormal, gLongString);
+ // There's nothing we can wait for, since addition should not be happening.
+ /* eslint-disable mozilla/no-arbitrary-setTimeout */
+ await new Promise(resolve => setTimeout(resolve, 500));
+ entries = (await FormHistoryTestUtils.search("searchbar-history")).map(
+ entry => entry.value
+ );
+ Assert.deepEqual(entries, [], "Should not find form history");
+
+ await FormHistoryTestUtils.clear("searchbar-history");
+ BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function test_searchbar_revert() {
+ const tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "about:blank"
+ );
+
+ await doSearch(window, tab, "MozSearch1", templateNormal, "testQuery");
+
+ let searchbar = window.BrowserSearch.searchBar;
+ is(
+ searchbar.value,
+ "testQuery",
+ "Search value should be the the last search"
+ );
+
+ // focus search bar
+ let promise = promiseEvent(searchPopup, "popupshown");
+ info("Opening search panel");
+ searchbar.focus();
+ await promise;
+
+ searchbar.value = "aQuery";
+ searchbar.value = "anotherQuery";
+
+ // close the panel using the escape key.
+ promise = promiseEvent(searchPopup, "popuphidden");
+ EventUtils.synthesizeKey("KEY_Escape");
+ await promise;
+
+ is(searchbar.value, "anotherQuery", "The search value should be the same");
+ // revert the search bar value
+ EventUtils.synthesizeKey("KEY_Escape");
+ is(
+ searchbar.value,
+ "testQuery",
+ "The search value should have been reverted"
+ );
+
+ EventUtils.synthesizeKey("KEY_Escape");
+ is(searchbar.value, "testQuery", "The search value should be the same");
+
+ await doSearch(window, tab, "MozSearch1", templateNormal, "query");
+
+ is(searchbar.value, "query", "The search value should be query");
+ EventUtils.synthesizeKey("KEY_Escape");
+ is(searchbar.value, "query", "The search value should be the same");
+
+ BrowserTestUtils.removeTab(tab);
+});