summaryrefslogtreecommitdiffstats
path: root/browser/components/search
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/search')
-rw-r--r--browser/components/search/test/.eslintrc.js7
-rw-r--r--browser/components/search/test/426329.xml11
-rw-r--r--browser/components/search/test/483086-1.xml10
-rw-r--r--browser/components/search/test/483086-2.xml10
-rw-r--r--browser/components/search/test/browser.ini44
-rw-r--r--browser/components/search/test/browser_426329.js250
-rw-r--r--browser/components/search/test/browser_483086.js49
-rw-r--r--browser/components/search/test/browser_aboutSearchReset.js159
-rw-r--r--browser/components/search/test/browser_abouthome_behavior.js144
-rw-r--r--browser/components/search/test/browser_addEngine.js105
-rw-r--r--browser/components/search/test/browser_amazon.js82
-rw-r--r--browser/components/search/test/browser_amazon_behavior.js166
-rw-r--r--browser/components/search/test/browser_bing.js118
-rw-r--r--browser/components/search/test/browser_bing_behavior.js166
-rw-r--r--browser/components/search/test/browser_contextSearchTabPosition.js62
-rw-r--r--browser/components/search/test/browser_contextmenu.js101
-rw-r--r--browser/components/search/test/browser_google.js100
-rw-r--r--browser/components/search/test/browser_google_behavior.js165
-rw-r--r--browser/components/search/test/browser_google_codes.js161
-rw-r--r--browser/components/search/test/browser_healthreport.js82
-rw-r--r--browser/components/search/test/browser_hiddenOneOffs_cleanup.js99
-rw-r--r--browser/components/search/test/browser_hiddenOneOffs_diacritics.js59
-rw-r--r--browser/components/search/test/browser_oneOffContextMenu.js105
-rw-r--r--browser/components/search/test/browser_oneOffContextMenu_setDefault.js195
-rw-r--r--browser/components/search/test/browser_oneOffHeader.js142
-rw-r--r--browser/components/search/test/browser_private_search_perwindowpb.js76
-rw-r--r--browser/components/search/test/browser_searchbar_keyboard_navigation.js425
-rw-r--r--browser/components/search/test/browser_searchbar_openpopup.js521
-rw-r--r--browser/components/search/test/browser_searchbar_smallpanel_keyboard_navigation.js354
-rw-r--r--browser/components/search/test/browser_webapi.js92
-rw-r--r--browser/components/search/test/browser_yahoo.js132
-rw-r--r--browser/components/search/test/browser_yahoo_behavior.js166
-rw-r--r--browser/components/search/test/head.js156
-rw-r--r--browser/components/search/test/opensearch.html9
-rw-r--r--browser/components/search/test/test.html8
-rw-r--r--browser/components/search/test/testEngine.xml12
-rw-r--r--browser/components/search/test/testEngine_diacritics.xml12
-rw-r--r--browser/components/search/test/testEngine_dupe.xml12
-rw-r--r--browser/components/search/test/testEngine_mozsearch.xml14
-rw-r--r--browser/components/search/test/webapi.html16
40 files changed, 0 insertions, 4597 deletions
diff --git a/browser/components/search/test/.eslintrc.js b/browser/components/search/test/.eslintrc.js
deleted file mode 100644
index c764b133d..000000000
--- a/browser/components/search/test/.eslintrc.js
+++ /dev/null
@@ -1,7 +0,0 @@
-"use strict";
-
-module.exports = {
- "extends": [
- "../../../../testing/mochitest/browser.eslintrc.js"
- ]
-};
diff --git a/browser/components/search/test/426329.xml b/browser/components/search/test/426329.xml
deleted file mode 100644
index e4545cc77..000000000
--- a/browser/components/search/test/426329.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
- xmlns:moz="http://www.mozilla.org/2006/browser/search/">
- <ShortName>Bug 426329</ShortName>
- <Description>426329 Search</Description>
- <InputEncoding>utf-8</InputEncoding>
- <Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABGklEQVQoz2NgGB6AnZ1dUlJSXl4eSDIyMhLW4Ovr%2B%2Fr168uXL69Zs4YoG%2BLi4i5dusTExMTGxsbNzd3f37937976%2BnpmZmagbHR09J49e5YvX66kpATVEBYW9ubNm2nTphkbG7e2tp44cQLIuHfvXm5urpaWFlDKysqqu7v73LlzECMYIiIiHj58mJCQoKKicvXq1bS0NKBgW1vbjh074uPjgeqAXE1NzSdPnvDz84M0AEUvXLgAsW379u1z5swBen3jxo2zZ892cHB4%2BvQp0KlAfwI1cHJyghQFBwfv2rULokFXV%2FfixYu7d%2B8GGqGgoMDKyrpu3br9%2B%2FcDuXl5eVA%2FAEWBfoWHAdAYoNuAYQ0XAeoUERFhGDYAAPoUaT2dfWJuAAAAAElFTkSuQmCC</Image>
- <Url type="text/html" method="GET" template="http://mochi.test:8888/browser/browser/components/search/test/test.html">
- <Param name="test" value="{searchTerms}"/>
- </Url>
- <moz:SearchForm>http://mochi.test:8888/browser/browser/components/search/test/test.html</moz:SearchForm>
-</OpenSearchDescription>
diff --git a/browser/components/search/test/483086-1.xml b/browser/components/search/test/483086-1.xml
deleted file mode 100644
index 9dbba4886..000000000
--- a/browser/components/search/test/483086-1.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
- xmlns:moz="http://www.mozilla.org/2006/browser/search/">
- <ShortName>483086a</ShortName>
- <Description>Bug 483086 Test 1</Description>
- <Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABGklEQVQoz2NgGB6AnZ1dUlJSXl4eSDIyMhLW4Ovr%2B%2Fr168uXL69Zs4YoG%2BLi4i5dusTExMTGxsbNzd3f37937976%2BnpmZmagbHR09J49e5YvX66kpATVEBYW9ubNm2nTphkbG7e2tp44cQLIuHfvXm5urpaWFlDKysqqu7v73LlzECMYIiIiHj58mJCQoKKicvXq1bS0NKBgW1vbjh074uPjgeqAXE1NzSdPnvDz84M0AEUvXLgAsW379u1z5swBen3jxo2zZ892cHB4%2BvQp0KlAfwI1cHJyghQFBwfv2rULokFXV%2FfixYu7d%2B8GGqGgoMDKyrpu3br9%2B%2FcDuXl5eVA%2FAEWBfoWHAdAYoNuAYQ0XAeoUERFhGDYAAPoUaT2dfWJuAAAAAElFTkSuQmCC</Image>
- <Url type="text/html" method="GET" template="http://mochi.test:8888/browser/browser/components/search/test/?search">
- <Param name="test" value="{searchTerms}"/>
- </Url>
- <moz:SearchForm>foo://example.com</moz:SearchForm>
-</OpenSearchDescription>
diff --git a/browser/components/search/test/483086-2.xml b/browser/components/search/test/483086-2.xml
deleted file mode 100644
index f130b9068..000000000
--- a/browser/components/search/test/483086-2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
- xmlns:moz="http://www.mozilla.org/2006/browser/search/">
- <ShortName>483086b</ShortName>
- <Description>Bug 483086 Test 2</Description>
- <Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABGklEQVQoz2NgGB6AnZ1dUlJSXl4eSDIyMhLW4Ovr%2B%2Fr168uXL69Zs4YoG%2BLi4i5dusTExMTGxsbNzd3f37937976%2BnpmZmagbHR09J49e5YvX66kpATVEBYW9ubNm2nTphkbG7e2tp44cQLIuHfvXm5urpaWFlDKysqqu7v73LlzECMYIiIiHj58mJCQoKKicvXq1bS0NKBgW1vbjh074uPjgeqAXE1NzSdPnvDz84M0AEUvXLgAsW379u1z5swBen3jxo2zZ892cHB4%2BvQp0KlAfwI1cHJyghQFBwfv2rULokFXV%2FfixYu7d%2B8GGqGgoMDKyrpu3br9%2B%2FcDuXl5eVA%2FAEWBfoWHAdAYoNuAYQ0XAeoUERFhGDYAAPoUaT2dfWJuAAAAAElFTkSuQmCC</Image>
- <Url type="text/html" method="GET" template="http://mochi.test:8888/browser/browser/components/search/test/?search">
- <Param name="test" value="{searchTerms}"/>
- </Url>
- <moz:SearchForm>http://example.com</moz:SearchForm>
-</OpenSearchDescription>
diff --git a/browser/components/search/test/browser.ini b/browser/components/search/test/browser.ini
deleted file mode 100644
index f1070264d..000000000
--- a/browser/components/search/test/browser.ini
+++ /dev/null
@@ -1,44 +0,0 @@
-[DEFAULT]
-support-files =
- 426329.xml
- 483086-1.xml
- 483086-2.xml
- head.js
- opensearch.html
- test.html
- testEngine.xml
- testEngine_diacritics.xml
- testEngine_dupe.xml
- testEngine_mozsearch.xml
- webapi.html
-
-[browser_426329.js]
-[browser_483086.js]
-[browser_addEngine.js]
-[browser_amazon.js]
-[browser_amazon_behavior.js]
-[browser_bing.js]
-[browser_bing_behavior.js]
-[browser_contextmenu.js]
-[browser_contextSearchTabPosition.js]
-skip-if = os == "mac" # bug 967013
-[browser_google.js]
-[browser_google_codes.js]
-[browser_google_behavior.js]
-[browser_healthreport.js]
-[browser_hiddenOneOffs_cleanup.js]
-[browser_hiddenOneOffs_diacritics.js]
-[browser_oneOffContextMenu.js]
-[browser_oneOffContextMenu_setDefault.js]
-[browser_oneOffHeader.js]
-[browser_private_search_perwindowpb.js]
-[browser_yahoo.js]
-[browser_yahoo_behavior.js]
-[browser_abouthome_behavior.js]
-skip-if = true # Bug ??????, Bug 1100301 - leaks windows until shutdown when --run-by-dir
-[browser_aboutSearchReset.js]
-[browser_searchbar_openpopup.js]
-skip-if = os == "linux" # Linux has different focus behaviours.
-[browser_searchbar_keyboard_navigation.js]
-[browser_searchbar_smallpanel_keyboard_navigation.js]
-[browser_webapi.js]
diff --git a/browser/components/search/test/browser_426329.js b/browser/components/search/test/browser_426329.js
deleted file mode 100644
index d9cbd3f7a..000000000
--- a/browser/components/search/test/browser_426329.js
+++ /dev/null
@@ -1,250 +0,0 @@
-XPCOMUtils.defineLazyModuleGetter(this, "FormHistory",
- "resource://gre/modules/FormHistory.jsm");
-
-function expectedURL(aSearchTerms) {
- const ENGINE_HTML_BASE = "http://mochi.test:8888/browser/browser/components/search/test/test.html";
- var textToSubURI = Cc["@mozilla.org/intl/texttosuburi;1"].
- getService(Ci.nsITextToSubURI);
- var searchArg = textToSubURI.ConvertAndEscape("utf-8", aSearchTerms);
- return ENGINE_HTML_BASE + "?test=" + searchArg;
-}
-
-function simulateClick(aEvent, aTarget) {
- var event = document.createEvent("MouseEvent");
- var ctrlKeyArg = aEvent.ctrlKey || false;
- var altKeyArg = aEvent.altKey || false;
- var shiftKeyArg = aEvent.shiftKey || false;
- var metaKeyArg = aEvent.metaKey || false;
- var buttonArg = aEvent.button || 0;
- event.initMouseEvent("click", true, true, window,
- 0, 0, 0, 0, 0,
- ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg,
- buttonArg, null);
- aTarget.dispatchEvent(event);
-}
-
-// modified from toolkit/components/satchel/test/test_form_autocomplete.html
-function checkMenuEntries(expectedValues) {
- var actualValues = getMenuEntries();
- is(actualValues.length, expectedValues.length, "Checking length of expected menu");
- for (var i = 0; i < expectedValues.length; i++)
- is(actualValues[i], expectedValues[i], "Checking menu entry #" + i);
-}
-
-function getMenuEntries() {
- var entries = [];
- var autocompleteMenu = searchBar.textbox.popup;
- // Could perhaps pull values directly from the controller, but it seems
- // more reliable to test the values that are actually in the tree?
- var column = autocompleteMenu.tree.columns[0];
- var numRows = autocompleteMenu.tree.view.rowCount;
- for (var i = 0; i < numRows; i++) {
- entries.push(autocompleteMenu.tree.view.getValueAt(i, column));
- }
- return entries;
-}
-
-function countEntries(name, value) {
- return new Promise(resolve => {
- let count = 0;
- let obj = name && value ? {fieldname: name, value: value} : {};
- FormHistory.count(obj,
- { handleResult: function(result) { count = result; },
- handleError: function(error) { throw error; },
- handleCompletion: function(reason) {
- if (!reason) {
- resolve(count);
- }
- }
- });
- });
-}
-
-var searchBar;
-var searchButton;
-var searchEntries = ["test"];
-function promiseSetEngine() {
- return new Promise(resolve => {
- var ss = Services.search;
-
- function observer(aSub, aTopic, aData) {
- switch (aData) {
- case "engine-added":
- var engine = ss.getEngineByName("Bug 426329");
- ok(engine, "Engine was added.");
- ss.currentEngine = engine;
- break;
- case "engine-current":
- ok(ss.currentEngine.name == "Bug 426329", "currentEngine set");
- searchBar = BrowserSearch.searchBar;
- searchButton = document.getAnonymousElementByAttribute(searchBar,
- "anonid", "search-go-button");
- ok(searchButton, "got search-go-button");
- searchBar.value = "test";
-
- Services.obs.removeObserver(observer, "browser-search-engine-modified");
- resolve();
- break;
- }
- }
-
- Services.obs.addObserver(observer, "browser-search-engine-modified", false);
- ss.addEngine("http://mochi.test:8888/browser/browser/components/search/test/426329.xml",
- null, "data:image/x-icon,%00", false);
- });
-}
-
-function promiseRemoveEngine() {
- return new Promise(resolve => {
- var ss = Services.search;
-
- function observer(aSub, aTopic, aData) {
- if (aData == "engine-removed") {
- Services.obs.removeObserver(observer, "browser-search-engine-modified");
- resolve();
- }
- }
-
- Services.obs.addObserver(observer, "browser-search-engine-modified", false);
- var engine = ss.getEngineByName("Bug 426329");
- ss.removeEngine(engine);
- });
-}
-
-
-var preSelectedBrowser;
-var preTabNo;
-function* prepareTest() {
- preSelectedBrowser = gBrowser.selectedBrowser;
- preTabNo = gBrowser.tabs.length;
- searchBar = BrowserSearch.searchBar;
-
- yield SimpleTest.promiseFocus();
-
- if (document.activeElement == searchBar)
- return;
-
- let focusPromise = BrowserTestUtils.waitForEvent(searchBar, "focus");
- gURLBar.focus();
- searchBar.focus();
- yield focusPromise;
-}
-
-add_task(function* testSetupEngine() {
- yield promiseSetEngine();
-});
-
-add_task(function* testReturn() {
- yield* prepareTest();
- EventUtils.synthesizeKey("VK_RETURN", {});
- yield BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
-
- is(gBrowser.tabs.length, preTabNo, "Return key did not open new tab");
- is(gBrowser.currentURI.spec, expectedURL(searchBar.value), "testReturn opened correct search page");
-});
-
-add_task(function* testAltReturn() {
- yield* prepareTest();
- yield BrowserTestUtils.openNewForegroundTab(gBrowser, () => {
- EventUtils.synthesizeKey("VK_RETURN", { altKey: true });
- });
-
- is(gBrowser.tabs.length, preTabNo + 1, "Alt+Return key added new tab");
- is(gBrowser.currentURI.spec, expectedURL(searchBar.value), "testAltReturn opened correct search page");
-});
-
-// Shift key has no effect for now, so skip it
-add_task(function* testShiftAltReturn() {
- return;
- /*
- yield* prepareTest();
-
- let url = expectedURL(searchBar.value);
-
- let newTabPromise = BrowserTestUtils.waitForNewTab(gBrowser, url);
- EventUtils.synthesizeKey("VK_RETURN", { shiftKey: true, altKey: true });
- yield newTabPromise;
-
- is(gBrowser.tabs.length, preTabNo + 1, "Shift+Alt+Return key added new tab");
- is(gBrowser.currentURI.spec, url, "testShiftAltReturn opened correct search page");
- */
-});
-
-add_task(function* testLeftClick() {
- yield* prepareTest();
- simulateClick({ button: 0 }, searchButton);
- yield BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
- is(gBrowser.tabs.length, preTabNo, "LeftClick did not open new tab");
- is(gBrowser.currentURI.spec, expectedURL(searchBar.value), "testLeftClick opened correct search page");
-});
-
-add_task(function* testMiddleClick() {
- yield* prepareTest();
- yield BrowserTestUtils.openNewForegroundTab(gBrowser, () => {
- simulateClick({ button: 1 }, searchButton);
- });
- is(gBrowser.tabs.length, preTabNo + 1, "MiddleClick added new tab");
- is(gBrowser.currentURI.spec, expectedURL(searchBar.value), "testMiddleClick opened correct search page");
-});
-
-add_task(function* testShiftMiddleClick() {
- yield* prepareTest();
-
- let url = expectedURL(searchBar.value);
-
- let newTabPromise = BrowserTestUtils.waitForNewTab(gBrowser, url);
- simulateClick({ button: 1, shiftKey: true }, searchButton);
- let newTab = yield newTabPromise;
-
- is(gBrowser.tabs.length, preTabNo + 1, "Shift+MiddleClick added new tab");
- is(newTab.linkedBrowser.currentURI.spec, url, "testShiftMiddleClick opened correct search page");
-});
-
-add_task(function* testRightClick() {
- preTabNo = gBrowser.tabs.length;
- gBrowser.selectedBrowser.loadURI("about:blank");
- yield new Promise(resolve => {
- setTimeout(function() {
- is(gBrowser.tabs.length, preTabNo, "RightClick did not open new tab");
- is(gBrowser.currentURI.spec, "about:blank", "RightClick did nothing");
- resolve();
- }, 5000);
- simulateClick({ button: 2 }, searchButton);
- });
- // The click in the searchbox focuses it, which opens the suggestion
- // panel. Clean up after ourselves.
- searchBar.textbox.popup.hidePopup();
-});
-
-add_task(function* testSearchHistory() {
- var textbox = searchBar._textbox;
- for (var i = 0; i < searchEntries.length; i++) {
- let count = yield countEntries(textbox.getAttribute("autocompletesearchparam"), searchEntries[i]);
- ok(count > 0, "form history entry '" + searchEntries[i] + "' should exist");
- }
-});
-
-add_task(function* testAutocomplete() {
- var popup = searchBar.textbox.popup;
- let popupShownPromise = BrowserTestUtils.waitForEvent(popup, "popupshown");
- searchBar.textbox.showHistoryPopup();
- yield popupShownPromise;
- checkMenuEntries(searchEntries);
-});
-
-add_task(function* testClearHistory() {
- let controller = searchBar.textbox.controllers.getControllerForCommand("cmd_clearhistory")
- ok(controller.isCommandEnabled("cmd_clearhistory"), "Clear history command enabled");
- controller.doCommand("cmd_clearhistory");
- let count = yield countEntries();
- ok(count == 0, "History cleared");
-});
-
-add_task(function* asyncCleanup() {
- searchBar.value = "";
- while (gBrowser.tabs.length != 1) {
- gBrowser.removeTab(gBrowser.tabs[0], {animate: false});
- }
- gBrowser.selectedBrowser.loadURI("about:blank");
- yield promiseRemoveEngine();
-});
diff --git a/browser/components/search/test/browser_483086.js b/browser/components/search/test/browser_483086.js
deleted file mode 100644
index 208add867..000000000
--- a/browser/components/search/test/browser_483086.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/* 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/. */
-var gSS = Services.search;
-
-function test() {
- waitForExplicitFinish();
-
- function observer(aSubject, aTopic, aData) {
- switch (aData) {
- case "engine-added":
- let engine = gSS.getEngineByName("483086a");
- ok(engine, "Test engine 1 installed");
- isnot(engine.searchForm, "foo://example.com",
- "Invalid SearchForm URL dropped");
- gSS.removeEngine(engine);
- break;
- case "engine-removed":
- Services.obs.removeObserver(observer, "browser-search-engine-modified");
- test2();
- break;
- }
- }
-
- Services.obs.addObserver(observer, "browser-search-engine-modified", false);
- gSS.addEngine("http://mochi.test:8888/browser/browser/components/search/test/483086-1.xml",
- null, "data:image/x-icon;%00", false);
-}
-
-function test2() {
- function observer(aSubject, aTopic, aData) {
- switch (aData) {
- case "engine-added":
- let engine = gSS.getEngineByName("483086b");
- ok(engine, "Test engine 2 installed");
- is(engine.searchForm, "http://example.com", "SearchForm is correct");
- gSS.removeEngine(engine);
- break;
- case "engine-removed":
- Services.obs.removeObserver(observer, "browser-search-engine-modified");
- finish();
- break;
- }
- }
-
- Services.obs.addObserver(observer, "browser-search-engine-modified", false);
- gSS.addEngine("http://mochi.test:8888/browser/browser/components/search/test/483086-2.xml",
- null, "data:image/x-icon;%00", false);
-}
diff --git a/browser/components/search/test/browser_aboutSearchReset.js b/browser/components/search/test/browser_aboutSearchReset.js
deleted file mode 100644
index 64376d6da..000000000
--- a/browser/components/search/test/browser_aboutSearchReset.js
+++ /dev/null
@@ -1,159 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-const TELEMETRY_RESULT_ENUM = {
- RESTORED_DEFAULT: 0,
- KEPT_CURRENT: 1,
- CHANGED_ENGINE: 2,
- CLOSED_PAGE: 3,
- OPENED_SETTINGS: 4
-};
-
-const kSearchStr = "a search";
-const kSearchPurpose = "searchbar";
-
-const kTestEngine = "testEngine.xml";
-
-function checkTelemetryRecords(expectedValue) {
- let histogram = Services.telemetry.getHistogramById("SEARCH_RESET_RESULT");
- let snapshot = histogram.snapshot();
- // The probe is declared with 5 values, but we get 6 back from .counts
- let expectedCounts = [0, 0, 0, 0, 0, 0];
- if (expectedValue != null) {
- expectedCounts[expectedValue] = 1;
- }
- Assert.deepEqual(snapshot.counts, expectedCounts,
- "histogram has expected content");
- histogram.clear();
-}
-
-function promiseStoppedLoad(expectedURL) {
- return new Promise(resolve => {
- let browser = gBrowser.selectedBrowser;
- let original = browser.loadURIWithFlags;
- browser.loadURIWithFlags = function(URI) {
- if (URI == expectedURL) {
- browser.loadURIWithFlags = original;
- ok(true, "loaded expected url: " + URI);
- resolve();
- return;
- }
-
- original.apply(browser, arguments);
- };
- });
-}
-
-var gTests = [
-
-{
- desc: "Test the 'Keep Current Settings' button.",
- run: function* () {
- let engine = yield promiseNewEngine(kTestEngine, {setAsCurrent: true});
-
- let expectedURL = engine.
- getSubmission(kSearchStr, null, kSearchPurpose).
- uri.spec;
-
- let rawEngine = engine.wrappedJSObject;
- let initialHash = rawEngine.getAttr("loadPathHash");
- rawEngine.setAttr("loadPathHash", "broken");
-
- let loadPromise = promiseStoppedLoad(expectedURL);
- gBrowser.contentDocument.getElementById("searchResetKeepCurrent").click();
- yield loadPromise;
-
- is(engine, Services.search.currentEngine,
- "the custom engine is still default");
- is(rawEngine.getAttr("loadPathHash"), initialHash,
- "the loadPathHash has been fixed");
-
- checkTelemetryRecords(TELEMETRY_RESULT_ENUM.KEPT_CURRENT);
- }
-},
-
-{
- desc: "Test the 'Restore Search Defaults' button.",
- run: function* () {
- let currentEngine = Services.search.currentEngine;
- let originalEngine = Services.search.originalDefaultEngine;
- let doc = gBrowser.contentDocument;
- let defaultEngineSpan = doc.getElementById("defaultEngine");
- is(defaultEngineSpan.textContent, originalEngine.name,
- "the name of the original default engine is displayed");
-
- let expectedURL = originalEngine.
- getSubmission(kSearchStr, null, kSearchPurpose).
- uri.spec;
- let loadPromise = promiseStoppedLoad(expectedURL);
- let button = doc.getElementById("searchResetChangeEngine");
- is(doc.activeElement, button,
- "the 'Change Search Engine' button is focused");
- button.click();
- yield loadPromise;
-
- is(originalEngine, Services.search.currentEngine,
- "the default engine is back to the original one");
-
- checkTelemetryRecords(TELEMETRY_RESULT_ENUM.RESTORED_DEFAULT);
- Services.search.currentEngine = currentEngine;
- }
-},
-
-{
- desc: "Click the settings link.",
- run: function* () {
- let loadPromise = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser,
- false,
- "about:preferences#search")
- gBrowser.contentDocument.getElementById("linkSettingsPage").click();
- yield loadPromise;
-
- checkTelemetryRecords(TELEMETRY_RESULT_ENUM.OPENED_SETTINGS);
- }
-},
-
-{
- desc: "Load another page without clicking any of the buttons.",
- run: function* () {
- yield promiseTabLoadEvent(gBrowser.selectedTab, "about:mozilla");
-
- checkTelemetryRecords(TELEMETRY_RESULT_ENUM.CLOSED_PAGE);
- }
-},
-
-];
-
-function test()
-{
- waitForExplicitFinish();
- Task.spawn(function* () {
- let oldCanRecord = Services.telemetry.canRecordExtended;
- Services.telemetry.canRecordExtended = true;
- checkTelemetryRecords();
-
- for (let test of gTests) {
- info(test.desc);
-
- // Create a tab to run the test.
- let tab = gBrowser.selectedTab = gBrowser.addTab("about:blank");
-
- // Start loading about:searchreset and wait for it to complete.
- let url = "about:searchreset?data=" + encodeURIComponent(kSearchStr) +
- "&purpose=" + kSearchPurpose;
- yield promiseTabLoadEvent(tab, url);
-
- info("Running test");
- yield test.run();
-
- info("Cleanup");
- gBrowser.removeCurrentTab();
- }
-
- Services.telemetry.canRecordExtended = oldCanRecord;
- }).then(finish, ex => {
- ok(false, "Unexpected Exception: " + ex);
- finish();
- });
-}
diff --git a/browser/components/search/test/browser_abouthome_behavior.js b/browser/components/search/test/browser_abouthome_behavior.js
deleted file mode 100644
index 3291b41f4..000000000
--- a/browser/components/search/test/browser_abouthome_behavior.js
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/*
- * Test home page search for all plugin URLs
- */
-
-"use strict";
-
-function test() {
- // Bug 992270: Ignore uncaught about:home exceptions (related to snippets from IndexedDB)
- ignoreAllUncaughtExceptions(true);
-
- let previouslySelectedEngine = Services.search.currentEngine;
-
- function replaceUrl(base) {
- return base;
- }
-
- let gMutationObserver = null;
-
- function verify_about_home_search(engine_name) {
- let engine = Services.search.getEngineByName(engine_name);
- ok(engine, engine_name + " is installed");
-
- Services.search.currentEngine = engine;
-
- // load about:home, but remove the listener first so it doesn't
- // get in the way
- gBrowser.removeProgressListener(listener);
- gBrowser.loadURI("about:home");
- info("Waiting for about:home load");
- tab.linkedBrowser.addEventListener("load", function load(event) {
- if (event.originalTarget != tab.linkedBrowser.contentDocument ||
- event.target.location.href == "about:blank") {
- info("skipping spurious load event");
- return;
- }
- tab.linkedBrowser.removeEventListener("load", load, true);
-
- // Observe page setup
- let doc = gBrowser.contentDocument;
- gMutationObserver = new MutationObserver(function (mutations) {
- for (let mutation of mutations) {
- if (mutation.attributeName == "searchEngineName") {
- // Re-add the listener, and perform a search
- gBrowser.addProgressListener(listener);
- gMutationObserver.disconnect()
- gMutationObserver = null;
- executeSoon(function() {
- doc.getElementById("searchText").value = "foo";
- doc.getElementById("searchSubmit").click();
- });
- }
- }
- });
- gMutationObserver.observe(doc.documentElement, { attributes: true });
- }, true);
- }
- waitForExplicitFinish();
-
- let gCurrTest;
- let gTests = [
- {
- name: "Search with Bing from about:home",
- searchURL: replaceUrl("http://www.bing.com/search?q=foo&pc=MOZI&form=MOZSPG"),
- run: function () {
- verify_about_home_search("Bing");
- }
- },
- {
- name: "Search with Yahoo from about:home",
- searchURL: replaceUrl("https://search.yahoo.com/search?p=foo&ei=UTF-8&fr=moz35"),
- run: function () {
- verify_about_home_search("Yahoo");
- }
- },
- {
- name: "Search with Google from about:home",
- searchURL: replaceUrl("https://www.google.com/search?q=foo&ie=utf-8&oe=utf-8"),
- run: function () {
- verify_about_home_search("Google");
- }
- },
- {
- name: "Search with Amazon.com from about:home",
- searchURL: replaceUrl("https://www.amazon.com/exec/obidos/external-search/?field-keywords=foo&mode=blended&tag=mozilla-20&sourceid=Mozilla-search"),
- run: function () {
- verify_about_home_search("Amazon.com");
- }
- }
- ];
-
- function nextTest() {
- if (gTests.length) {
- gCurrTest = gTests.shift();
- info("Running : " + gCurrTest.name);
- executeSoon(gCurrTest.run);
- } else {
- // Make sure we listen again for uncaught exceptions in the next test or cleanup.
- executeSoon(finish);
- }
- }
-
- let tab = gBrowser.selectedTab = gBrowser.addTab();
-
- let listener = {
- onStateChange: function onStateChange(webProgress, req, flags, status) {
- info("onStateChange");
- // Only care about top-level document starts
- let docStart = Ci.nsIWebProgressListener.STATE_IS_DOCUMENT |
- Ci.nsIWebProgressListener.STATE_START;
- if (!(flags & docStart) || !webProgress.isTopLevel)
- return;
-
- if (req.originalURI.spec == "about:blank")
- return;
-
- info("received document start");
-
- ok(req instanceof Ci.nsIChannel, "req is a channel");
- is(req.originalURI.spec, gCurrTest.searchURL, "search URL was loaded");
- info("Actual URI: " + req.URI.spec);
-
- req.cancel(Components.results.NS_ERROR_FAILURE);
-
- executeSoon(nextTest);
- }
- }
-
- registerCleanupFunction(function () {
- Services.search.currentEngine = previouslySelectedEngine;
- gBrowser.removeProgressListener(listener);
- gBrowser.removeTab(tab);
- if (gMutationObserver)
- gMutationObserver.disconnect();
- });
-
- tab.linkedBrowser.addEventListener("load", function load() {
- tab.linkedBrowser.removeEventListener("load", load, true);
- gBrowser.addProgressListener(listener);
- nextTest();
- }, true);
-}
diff --git a/browser/components/search/test/browser_addEngine.js b/browser/components/search/test/browser_addEngine.js
deleted file mode 100644
index b971ea5f7..000000000
--- a/browser/components/search/test/browser_addEngine.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/* 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/. */
-var gSS = Services.search;
-
-function observer(aSubject, aTopic, aData) {
- if (!gCurrentTest) {
- info("Observer called with no test active");
- return;
- }
-
- let engine = aSubject.QueryInterface(Ci.nsISearchEngine);
- info("Observer: " + aData + " for " + engine.name);
- let method;
- switch (aData) {
- case "engine-added":
- if (gCurrentTest.added)
- method = "added"
- break;
- case "engine-current":
- if (gCurrentTest.current)
- method = "current";
- break;
- case "engine-removed":
- if (gCurrentTest.removed)
- method = "removed";
- break;
- }
-
- if (method)
- gCurrentTest[method](engine);
-}
-
-function checkEngine(checkObj, engineObj) {
- info("Checking engine");
- for (var prop in checkObj)
- is(checkObj[prop], engineObj[prop], prop + " is correct");
-}
-
-var gTests = [
- {
- name: "opensearch install",
- engine: {
- name: "Foo",
- alias: null,
- description: "Foo Search",
- searchForm: "http://mochi.test:8888/browser/browser/components/search/test/"
- },
- run: function () {
- Services.obs.addObserver(observer, "browser-search-engine-modified", false);
-
- gSS.addEngine("http://mochi.test:8888/browser/browser/components/search/test/testEngine.xml",
- null, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABGklEQVQoz2NgGB6AnZ1dUlJSXl4eSDIyMhLW4Ovr%2B%2Fr168uXL69Zs4YoG%2BLi4i5dusTExMTGxsbNzd3f37937976%2BnpmZmagbHR09J49e5YvX66kpATVEBYW9ubNm2nTphkbG7e2tp44cQLIuHfvXm5urpaWFlDKysqqu7v73LlzECMYIiIiHj58mJCQoKKicvXq1bS0NKBgW1vbjh074uPjgeqAXE1NzSdPnvDz84M0AEUvXLgAsW379u1z5swBen3jxo2zZ892cHB4%2BvQp0KlAfwI1cHJyghQFBwfv2rULokFXV%2FfixYu7d%2B8GGqGgoMDKyrpu3br9%2B%2FcDuXl5eVA%2FAEWBfoWHAdAYoNuAYQ0XAeoUERFhGDYAAPoUaT2dfWJuAAAAAElFTkSuQmCC",
- false);
- },
- added: function (engine) {
- ok(engine, "engine was added.");
-
- checkEngine(this.engine, engine);
-
- let engineFromSS = gSS.getEngineByName(this.engine.name);
- is(engine, engineFromSS, "engine is obtainable via getEngineByName");
-
- let aEngine = gSS.getEngineByAlias("fooalias");
- ok(!aEngine, "Alias was not parsed from engine description");
-
- gSS.currentEngine = engine;
- },
- current: function (engine) {
- let currentEngine = gSS.currentEngine;
- is(engine, currentEngine, "engine is current");
- is(engine.name, this.engine.name, "current engine was changed successfully");
-
- gSS.removeEngine(engine);
- },
- removed: function (engine) {
- // Remove the observer before calling the currentEngine getter,
- // as that getter will set the currentEngine to the original default
- // which will trigger a notification causing the test to loop over all
- // engines.
- Services.obs.removeObserver(observer, "browser-search-engine-modified");
-
- let currentEngine = gSS.currentEngine;
- ok(currentEngine, "An engine is present.");
- isnot(currentEngine.name, this.engine.name, "Current engine reset after removal");
-
- nextTest();
- }
- }
-];
-
-var gCurrentTest = null;
-function nextTest() {
- if (gTests.length) {
- gCurrentTest = gTests.shift();
- info("Running " + gCurrentTest.name);
- gCurrentTest.run();
- } else
- executeSoon(finish);
-}
-
-function test() {
- waitForExplicitFinish();
- nextTest();
-}
diff --git a/browser/components/search/test/browser_amazon.js b/browser/components/search/test/browser_amazon.js
deleted file mode 100644
index 965a3dcf8..000000000
--- a/browser/components/search/test/browser_amazon.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/*
- * Test Amazon search plugin URLs
- */
-
-"use strict";
-
-const BROWSER_SEARCH_PREF = "browser.search.";
-
-function test() {
- let engine = Services.search.getEngineByName("Amazon.com");
- ok(engine, "Amazon.com");
-
- let base = "https://www.amazon.com/exec/obidos/external-search/?field-keywords=foo&ie=UTF-8&mode=blended&tag=mozilla-20&sourceid=Mozilla-search";
- let url;
-
- // Test search URLs (including purposes).
- url = engine.getSubmission("foo").uri.spec;
- is(url, base, "Check search URL for 'foo'");
-
- // Check search suggestion URL.
- url = engine.getSubmission("foo", "application/x-suggestions+json").uri.spec;
- is(url, "https://completion.amazon.com/search/complete?q=foo&search-alias=aps&mkt=1", "Check search suggestion URL for 'foo'");
-
- // Check all other engine properties.
- const EXPECTED_ENGINE = {
- name: "Amazon.com",
- alias: null,
- description: "Amazon.com Search",
- searchForm: "https://www.amazon.com/exec/obidos/external-search/?field-keywords=&ie=UTF-8&mode=blended&tag=mozilla-20&sourceid=Mozilla-search",
- hidden: false,
- wrappedJSObject: {
- queryCharset: "UTF-8",
- "_iconURL": "data:image/x-icon;base64,AAABAAIAEBAAAAAAAAC0AQAAJgAAACAgAAAAAAAA6QIAANoBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAF7SURBVDjLlZPLasJAFIaFRF+iVV+h6hO0GF+gVB9AaHwDt64qCG03tQgtdCFIuyhUelmGli66MXThSt24kNiFBUlAYi6ezjnNxSuawB/ITP7v/HNmJgQAEaZzpgHs/gwcTyTEXuXl2U6nA8ViEbK5HKler28CVRAwnB9ptVrAh8MrQuCaZ4iA8fzIqSgCxwzpTIaSuN/RWGwdYLwCUBQFZFkGSZLgqdmEE7YEN8VOAKyaSKUW4nNBAFmnYiKZpDRX1WqwBBzP089n5f/NEQsFL4WqqtsBWJlzDAJr5PwSMM1awEzzdxIbGI3Hvc6jCZeVFgRQRwpY7Qcw3ktgfpR8wLRxCPaot/X4GS95MppfF6DX9n2A3f+kAZycaT8bAZjU6r6B/duD6d3BYg9wQq/tkYzHY1blEiz5lmQyGc95mrO6r2CxgpjCBXgNsJVviolpXJiraeOIjJRE10juUa4sR8V+mO17VvmGqtuOcdNlwut8zTQJcJ0njifyB2bgTdKh6w4BAAAAAElFTkSuQmCCiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACsElEQVRYw71XQWsTURBe2LQgeNKLB+tVemt6txcteNSD/QGC6VEIGDx5s+eKPQqFgJhLNdFLBWMP7cU0oSAWjB70koC9WHbVQ5SO8+XtS14mr7svyaYDH9m87Jv55puZt1nPi4yIzjMeMj7T9OwjI88455nGC1cZX+nsDESumJmPFDwIAqrX6z00Gg1qt9vjkJgFgUeuO16Vy3RjeZkyMzM9+MY1fsM9I9h9zyV7ZAznZrA4FAoFVwJ1z+WuOysrg1lnMolkHJX4k0igzI5sARYWF7vEZEk0rvO6iyUSuJfLJUqM7zYSqRDIra4OOUZPmNZsNrsl8UVTpkJAjh1GzmaSpJ8mAWmYeZB5urHRhW5SNOfUCCDo47W1bvPZsp2qAhipy3Nz1kaLG8dUCEBqM5AvpgElqFar01NgIZsdco7Zb7VasU2YigIYL5tjqCL7Q5YkFQXKlcqQ7DbHthIALk/IWAKor82xPIhshxWABCYioDMz51sexcVi0XoG4DPLIyvJjkTArK3scDQnRvO0MdTrUHGiKZCP4tNgO6BAEI08EQH9Z2Qow0hyPypJGIa9p6JWKCn4SA8jSKmJIDgyRvPJkcRxjfUwNGr/i8+Mo32iHzWiThBD4NM60bet9P77/ubA728RlTjMiwiH6zEEfvIrwdZFtQmMJ7W/ofIDBZD5m3mVZGwJcOP2kmILIlCkE45HoPWurwCSg0+UQRD4ZyXxId+T7gQb9+4q9sioY5ltrOG3L5vqXiiJffDx/aUi83ZJ7jr2ohcEu8Hh6/m+I7OWGiVxbWKHsz+O3vSOakqFQdsFgQeJUiKD7Wv9YKXBgCeSUC3v2kM5EJhlHDh3NcgcPlG1BXZu98sDmTuBa4fsMnz9fniJUaGzs+eMC540XuR0aDO2L8Y3qPyMcdOM+R/8XcqRA3qp9gAAAABJRU5ErkJggg==",
- _urls : [
- {
- type: "application/x-suggestions+json",
- method: "GET",
- template: "https://completion.amazon.com/search/complete?q={searchTerms}&search-alias=aps&mkt=1",
- params: "",
- },
- {
- type: "text/html",
- method: "GET",
- template: "https://www.amazon.com/exec/obidos/external-search/",
- params: [
- {
- name: "field-keywords",
- value: "{searchTerms}",
- purpose: undefined,
- },
- {
- name: "ie",
- value: "{inputEncoding}",
- purpose: undefined,
- },
- {
- name: "mode",
- value: "blended",
- purpose: undefined,
- },
- {
- name: "tag",
- value: "mozilla-20",
- purpose: undefined,
- },
- {
- name: "sourceid",
- value: "Mozilla-search",
- purpose: undefined,
- },
- ],
- mozparams: {},
- },
- ],
- },
- };
-
- isSubObjectOf(EXPECTED_ENGINE, engine, "Amazon");
-}
diff --git a/browser/components/search/test/browser_amazon_behavior.js b/browser/components/search/test/browser_amazon_behavior.js
deleted file mode 100644
index 22d16581a..000000000
--- a/browser/components/search/test/browser_amazon_behavior.js
+++ /dev/null
@@ -1,166 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/*
- * Test Amazon search plugin URLs
- */
-
-"use strict";
-
-const BROWSER_SEARCH_PREF = "browser.search.";
-
-
-function test() {
- let engine = Services.search.getEngineByName("Amazon.com");
- ok(engine, "Amazon is installed");
-
- let previouslySelectedEngine = Services.search.currentEngine;
- Services.search.currentEngine = engine;
- engine.alias = "a";
-
- let base = "https://www.amazon.com/exec/obidos/external-search/?field-keywords=foo&ie=UTF-8&mode=blended&tag=mozilla-20&sourceid=Mozilla-search";
- let url;
-
- // Test search URLs (including purposes).
- url = engine.getSubmission("foo").uri.spec;
- is(url, base, "Check search URL for 'foo'");
-
- waitForExplicitFinish();
-
- var gCurrTest;
- var gTests = [
- {
- name: "context menu search",
- searchURL: base,
- run: function () {
- // Simulate a contextmenu search
- // FIXME: This is a bit "low-level"...
- BrowserSearch.loadSearch("foo", false, "contextmenu");
- }
- },
- {
- name: "keyword search",
- searchURL: base,
- run: function () {
- gURLBar.value = "? foo";
- gURLBar.focus();
- EventUtils.synthesizeKey("VK_RETURN", {});
- }
- },
- {
- name: "keyword search",
- searchURL: base,
- run: function () {
- gURLBar.value = "a foo";
- gURLBar.focus();
- EventUtils.synthesizeKey("VK_RETURN", {});
- }
- },
- {
- name: "search bar search",
- searchURL: base,
- run: function () {
- let sb = BrowserSearch.searchBar;
- sb.focus();
- sb.value = "foo";
- registerCleanupFunction(function () {
- sb.value = "";
- });
- EventUtils.synthesizeKey("VK_RETURN", {});
- }
- },
- {
- name: "new tab search",
- searchURL: base,
- run: function () {
- function doSearch(doc) {
- // Re-add the listener, and perform a search
- gBrowser.addProgressListener(listener);
- doc.getElementById("newtab-search-text").value = "foo";
- doc.getElementById("newtab-search-submit").click();
- }
-
- // load about:newtab, but remove the listener first so it doesn't
- // get in the way
- gBrowser.removeProgressListener(listener);
- gBrowser.loadURI("about:newtab");
- info("Waiting for about:newtab load");
- tab.linkedBrowser.addEventListener("load", function load(event) {
- if (event.originalTarget != tab.linkedBrowser.contentDocument ||
- event.target.location.href == "about:blank") {
- info("skipping spurious load event");
- return;
- }
- tab.linkedBrowser.removeEventListener("load", load, true);
-
- // Observe page setup
- let win = gBrowser.contentWindow;
- if (win.gSearch.currentEngineName ==
- Services.search.currentEngine.name) {
- doSearch(win.document);
- }
- else {
- info("Waiting for newtab search init");
- win.addEventListener("ContentSearchService", function done(event) {
- info("Got newtab search event " + event.detail.type);
- if (event.detail.type == "State") {
- win.removeEventListener("ContentSearchService", done);
- // Let gSearch respond to the event before continuing.
- executeSoon(() => doSearch(win.document));
- }
- });
- }
- }, true);
- }
- }
- ];
-
- function nextTest() {
- if (gTests.length) {
- gCurrTest = gTests.shift();
- info("Running : " + gCurrTest.name);
- executeSoon(gCurrTest.run);
- } else {
- finish();
- }
- }
-
- let tab = gBrowser.selectedTab = gBrowser.addTab();
-
- let listener = {
- onStateChange: function onStateChange(webProgress, req, flags, status) {
- info("onStateChange");
- // Only care about top-level document starts
- let docStart = Ci.nsIWebProgressListener.STATE_IS_DOCUMENT |
- Ci.nsIWebProgressListener.STATE_START;
- if (!(flags & docStart) || !webProgress.isTopLevel)
- return;
-
- if (req.originalURI.spec == "about:blank")
- return;
-
- info("received document start");
-
- ok(req instanceof Ci.nsIChannel, "req is a channel");
- is(req.originalURI.spec, gCurrTest.searchURL, "search URL was loaded");
- info("Actual URI: " + req.URI.spec);
-
- req.cancel(Components.results.NS_ERROR_FAILURE);
-
- executeSoon(nextTest);
- }
- }
-
- registerCleanupFunction(function () {
- engine.alias = undefined;
- gBrowser.removeProgressListener(listener);
- gBrowser.removeTab(tab);
- Services.search.currentEngine = previouslySelectedEngine;
- });
-
- tab.linkedBrowser.addEventListener("load", function load() {
- tab.linkedBrowser.removeEventListener("load", load, true);
- gBrowser.addProgressListener(listener);
- nextTest();
- }, true);
-}
diff --git a/browser/components/search/test/browser_bing.js b/browser/components/search/test/browser_bing.js
deleted file mode 100644
index 3a41ae0ac..000000000
--- a/browser/components/search/test/browser_bing.js
+++ /dev/null
@@ -1,118 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/*
- * Test Bing search plugin URLs
- */
-
-"use strict";
-
-const BROWSER_SEARCH_PREF = "browser.search.";
-
-function test() {
- let engine = Services.search.getEngineByName("Bing");
- ok(engine, "Bing");
-
- let base = "https://www.bing.com/search?q=foo&pc=MOZI";
- let url;
-
- // Test search URLs (including purposes).
- url = engine.getSubmission("foo").uri.spec;
- is(url, base + "&form=MOZSBR", "Check search URL for 'foo'");
- url = engine.getSubmission("foo", null, "contextmenu").uri.spec;
- is(url, base + "&form=MOZCON", "Check context menu search URL for 'foo'");
- url = engine.getSubmission("foo", null, "keyword").uri.spec;
- is(url, base + "&form=MOZLBR", "Check keyword search URL for 'foo'");
- url = engine.getSubmission("foo", null, "searchbar").uri.spec;
- is(url, base + "&form=MOZSBR", "Check search bar search URL for 'foo'");
- url = engine.getSubmission("foo", null, "homepage").uri.spec;
- is(url, base + "&form=MOZSPG", "Check homepage search URL for 'foo'");
- url = engine.getSubmission("foo", null, "newtab").uri.spec;
- is(url, base + "&form=MOZTSB", "Check newtab search URL for 'foo'");
-
- // Check search suggestion URL.
- url = engine.getSubmission("foo", "application/x-suggestions+json").uri.spec;
- is(url, "https://www.bing.com/osjson.aspx?query=foo&form=OSDJAS&language=" + getLocale(), "Check search suggestion URL for 'foo'");
-
- // Check all other engine properties.
- const EXPECTED_ENGINE = {
- name: "Bing",
- alias: null,
- description: "Bing. Search by Microsoft.",
- searchForm: "https://www.bing.com/search?q=&pc=MOZI&form=MOZSBR",
- hidden: false,
- wrappedJSObject: {
- queryCharset: "UTF-8",
- "_iconURL": "data:image/x-icon;base64,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",
- _urls : [
- {
- type: "application/x-suggestions+json",
- method: "GET",
- template: "https://www.bing.com/osjson.aspx",
- params: [
- {
- name: "query",
- value: "{searchTerms}",
- purpose: undefined,
- },
- {
- name: "form",
- value: "OSDJAS",
- purpose: undefined,
- },
- {
- name: "language",
- value: "{moz:locale}",
- purpose: undefined,
- },
- ],
- },
- {
- type: "text/html",
- method: "GET",
- template: "https://www.bing.com/search",
- params: [
- {
- name: "q",
- value: "{searchTerms}",
- purpose: undefined,
- },
- {
- name: "pc",
- value: "MOZI",
- purpose: undefined,
- },
- {
- name: "form",
- value: "MOZCON",
- purpose: "contextmenu",
- },
- {
- name: "form",
- value: "MOZSBR",
- purpose: "searchbar",
- },
- {
- name: "form",
- value: "MOZSPG",
- purpose: "homepage",
- },
- {
- name: "form",
- value: "MOZLBR",
- purpose:"keyword",
- },
- {
- name: "form",
- value: "MOZTSB",
- purpose: "newtab",
- },
- ],
- mozparams: {},
- },
- ],
- },
- };
-
- isSubObjectOf(EXPECTED_ENGINE, engine, "Bing");
-}
diff --git a/browser/components/search/test/browser_bing_behavior.js b/browser/components/search/test/browser_bing_behavior.js
deleted file mode 100644
index bc9b187ec..000000000
--- a/browser/components/search/test/browser_bing_behavior.js
+++ /dev/null
@@ -1,166 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/*
- * Test Bing search plugin URLs
- */
-
-"use strict";
-
-const BROWSER_SEARCH_PREF = "browser.search.";
-
-
-function test() {
- let engine = Services.search.getEngineByName("Bing");
- ok(engine, "Bing is installed");
-
- let previouslySelectedEngine = Services.search.currentEngine;
- Services.search.currentEngine = engine;
- engine.alias = "b";
-
- let base = "https://www.bing.com/search?q=foo&pc=MOZI";
- let url;
-
- // Test search URLs (including purposes).
- url = engine.getSubmission("foo").uri.spec;
- is(url, base + "&form=MOZSBR", "Check search URL for 'foo'");
-
- waitForExplicitFinish();
-
- var gCurrTest;
- var gTests = [
- {
- name: "context menu search",
- searchURL: base + "&form=MOZCON",
- run: function () {
- // Simulate a contextmenu search
- // FIXME: This is a bit "low-level"...
- BrowserSearch.loadSearch("foo", false, "contextmenu");
- }
- },
- {
- name: "keyword search",
- searchURL: base + "&form=MOZLBR",
- run: function () {
- gURLBar.value = "? foo";
- gURLBar.focus();
- EventUtils.synthesizeKey("VK_RETURN", {});
- }
- },
- {
- name: "keyword search with alias",
- searchURL: base + "&form=MOZLBR",
- run: function () {
- gURLBar.value = "b foo";
- gURLBar.focus();
- EventUtils.synthesizeKey("VK_RETURN", {});
- }
- },
- {
- name: "search bar search",
- searchURL: base + "&form=MOZSBR",
- run: function () {
- let sb = BrowserSearch.searchBar;
- sb.focus();
- sb.value = "foo";
- registerCleanupFunction(function () {
- sb.value = "";
- });
- EventUtils.synthesizeKey("VK_RETURN", {});
- }
- },
- {
- name: "new tab search",
- searchURL: base + "&form=MOZTSB",
- run: function () {
- function doSearch(doc) {
- // Re-add the listener, and perform a search
- gBrowser.addProgressListener(listener);
- doc.getElementById("newtab-search-text").value = "foo";
- doc.getElementById("newtab-search-submit").click();
- }
-
- // load about:newtab, but remove the listener first so it doesn't
- // get in the way
- gBrowser.removeProgressListener(listener);
- gBrowser.loadURI("about:newtab");
- info("Waiting for about:newtab load");
- tab.linkedBrowser.addEventListener("load", function load(event) {
- if (event.originalTarget != tab.linkedBrowser.contentDocument ||
- event.target.location.href == "about:blank") {
- info("skipping spurious load event");
- return;
- }
- tab.linkedBrowser.removeEventListener("load", load, true);
-
- // Observe page setup
- let win = gBrowser.contentWindow;
- if (win.gSearch.currentEngineName ==
- Services.search.currentEngine.name) {
- doSearch(win.document);
- }
- else {
- info("Waiting for newtab search init");
- win.addEventListener("ContentSearchService", function done(event) {
- info("Got newtab search event " + event.detail.type);
- if (event.detail.type == "State") {
- win.removeEventListener("ContentSearchService", done);
- // Let gSearch respond to the event before continuing.
- executeSoon(() => doSearch(win.document));
- }
- });
- }
- }, true);
- }
- }
- ];
-
- function nextTest() {
- if (gTests.length) {
- gCurrTest = gTests.shift();
- info("Running : " + gCurrTest.name);
- executeSoon(gCurrTest.run);
- } else {
- finish();
- }
- }
-
- let tab = gBrowser.selectedTab = gBrowser.addTab();
-
- let listener = {
- onStateChange: function onStateChange(webProgress, req, flags, status) {
- info("onStateChange");
- // Only care about top-level document starts
- let docStart = Ci.nsIWebProgressListener.STATE_IS_DOCUMENT |
- Ci.nsIWebProgressListener.STATE_START;
- if (!(flags & docStart) || !webProgress.isTopLevel)
- return;
-
- if (req.originalURI.spec == "about:blank")
- return;
-
- info("received document start");
-
- ok(req instanceof Ci.nsIChannel, "req is a channel");
- is(req.originalURI.spec, gCurrTest.searchURL, "search URL was loaded");
- info("Actual URI: " + req.URI.spec);
-
- req.cancel(Components.results.NS_ERROR_FAILURE);
-
- executeSoon(nextTest);
- }
- }
-
- registerCleanupFunction(function () {
- engine.alias = undefined;
- gBrowser.removeProgressListener(listener);
- gBrowser.removeTab(tab);
- Services.search.currentEngine = previouslySelectedEngine;
- });
-
- tab.linkedBrowser.addEventListener("load", function load() {
- tab.linkedBrowser.removeEventListener("load", load, true);
- gBrowser.addProgressListener(listener);
- nextTest();
- }, true);
-}
diff --git a/browser/components/search/test/browser_contextSearchTabPosition.js b/browser/components/search/test/browser_contextSearchTabPosition.js
deleted file mode 100644
index 21a8c1130..000000000
--- a/browser/components/search/test/browser_contextSearchTabPosition.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/* 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/. */
-
-add_task(function* test() {
- yield SpecialPowers.pushPrefEnv({set: [["toolkit.telemetry.enabled", true]]});
- let engine = yield promiseNewEngine("testEngine.xml");
- let histogramKey = "other-" + engine.name + ".contextmenu";
- let numSearchesBefore = 0;
-
- try {
- let hs = Services.telemetry.getKeyedHistogramById("SEARCH_COUNTS").snapshot();
- if (histogramKey in hs) {
- numSearchesBefore = hs[histogramKey].sum;
- }
- } catch (ex) {
- // No searches performed yet, not a problem, |numSearchesBefore| is 0.
- }
-
- let tabs = [];
- let tabsLoadedDeferred = new Deferred();
-
- function tabAdded(event) {
- let tab = event.target;
- tabs.push(tab);
-
- // We wait for the blank tab and the two context searches tabs to open.
- if (tabs.length == 3) {
- tabsLoadedDeferred.resolve();
- }
- }
-
- let container = gBrowser.tabContainer;
- container.addEventListener("TabOpen", tabAdded, false);
-
- gBrowser.addTab("about:blank");
- BrowserSearch.loadSearchFromContext("mozilla");
- BrowserSearch.loadSearchFromContext("firefox");
-
- // Wait for all the tabs to open.
- yield tabsLoadedDeferred.promise;
-
- is(tabs[0], gBrowser.tabs[3], "blank tab has been pushed to the end");
- is(tabs[1], gBrowser.tabs[1], "first search tab opens next to the current tab");
- is(tabs[2], gBrowser.tabs[2], "second search tab opens next to the first search tab");
-
- container.removeEventListener("TabOpen", tabAdded, false);
- tabs.forEach(gBrowser.removeTab, gBrowser);
-
- // Make sure that the context searches are correctly recorded.
- let hs = Services.telemetry.getKeyedHistogramById("SEARCH_COUNTS").snapshot();
- Assert.ok(histogramKey in hs, "The histogram must contain the correct key");
- Assert.equal(hs[histogramKey].sum, numSearchesBefore + 2,
- "The histogram must contain the correct search count");
-});
-
-function Deferred() {
- this.promise = new Promise((resolve, reject) => {
- this.resolve = resolve;
- this.reject = reject;
- });
-}
diff --git a/browser/components/search/test/browser_contextmenu.js b/browser/components/search/test/browser_contextmenu.js
deleted file mode 100644
index c485242b4..000000000
--- a/browser/components/search/test/browser_contextmenu.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * * http://creativecommons.org/publicdomain/zero/1.0/ */
-/*
- * Test searching for the selected text using the context menu
- */
-
-add_task(function* () {
- const ss = Services.search;
- const ENGINE_NAME = "Foo";
- var contextMenu;
-
- // We want select events to be fired.
- yield new Promise(resolve => SpecialPowers.pushPrefEnv({"set": [["dom.select_events.enabled", true]]}, resolve));
-
- let envService = Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment);
- let originalValue = envService.get("XPCSHELL_TEST_PROFILE_DIR");
- envService.set("XPCSHELL_TEST_PROFILE_DIR", "1");
-
- let url = "chrome://mochitests/content/browser/browser/components/search/test/";
- let resProt = Services.io.getProtocolHandler("resource")
- .QueryInterface(Ci.nsIResProtocolHandler);
- let originalSubstitution = resProt.getSubstitution("search-plugins");
- resProt.setSubstitution("search-plugins",
- Services.io.newURI(url, null, null));
-
- let searchDonePromise;
- yield new Promise(resolve => {
- function observer(aSub, aTopic, aData) {
- switch (aData) {
- case "engine-added":
- var engine = ss.getEngineByName(ENGINE_NAME);
- ok(engine, "Engine was added.");
- ss.currentEngine = engine;
- envService.set("XPCSHELL_TEST_PROFILE_DIR", originalValue);
- resProt.setSubstitution("search-plugins", originalSubstitution);
- break;
- case "engine-current":
- is(ss.currentEngine.name, ENGINE_NAME, "currentEngine set");
- resolve();
- break;
- case "engine-removed":
- Services.obs.removeObserver(observer, "browser-search-engine-modified");
- if (searchDonePromise) {
- searchDonePromise();
- }
- break;
- }
- }
-
- Services.obs.addObserver(observer, "browser-search-engine-modified", false);
- ss.addEngine("resource://search-plugins/testEngine_mozsearch.xml",
- null, "data:image/x-icon,%00", false);
- });
-
- contextMenu = document.getElementById("contentAreaContextMenu");
- ok(contextMenu, "Got context menu XUL");
-
- let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, "data:text/plain;charset=utf8,test%20search");
-
- yield ContentTask.spawn(tab.linkedBrowser, "", function*() {
- return new Promise(resolve => {
- content.document.addEventListener("selectionchange", function selectionChanged() {
- content.document.removeEventListener("selectionchange", selectionChanged);
- resolve();
- });
- content.document.getSelection().selectAllChildren(content.document.body);
- });
- });
-
- var eventDetails = { type: "contextmenu", button: 2 };
-
- let popupPromise = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
- BrowserTestUtils.synthesizeMouseAtCenter("body", eventDetails, gBrowser.selectedBrowser);
- yield popupPromise;
-
- info("checkContextMenu");
- var searchItem = contextMenu.getElementsByAttribute("id", "context-searchselect")[0];
- ok(searchItem, "Got search context menu item");
- is(searchItem.label, 'Search ' + ENGINE_NAME + ' for \u201ctest search\u201d', "Check context menu label");
- is(searchItem.disabled, false, "Check that search context menu item is enabled");
-
- yield BrowserTestUtils.openNewForegroundTab(gBrowser, () => {
- searchItem.click();
- });
-
- is(gBrowser.currentURI.spec,
- "http://mochi.test:8888/browser/browser/components/search/test/?test=test+search&ie=utf-8&channel=contextsearch",
- "Checking context menu search URL");
-
- contextMenu.hidePopup();
-
- // Remove the tab opened by the search
- gBrowser.removeCurrentTab();
-
- yield new Promise(resolve => {
- searchDonePromise = resolve;
- ss.removeEngine(ss.currentEngine);
- });
-
- gBrowser.removeCurrentTab();
-});
diff --git a/browser/components/search/test/browser_google.js b/browser/components/search/test/browser_google.js
deleted file mode 100644
index 2b0cabea7..000000000
--- a/browser/components/search/test/browser_google.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/*
- * Test Google search plugin URLs
- */
-
-"use strict";
-
-function test() {
- let engine = Services.search.getEngineByName("Google");
- ok(engine, "Google");
-
- let base = "https://www.google.com/search?q=foo&ie=utf-8&oe=utf-8&client=firefox-b";
- let keywordBase = base + "-ab";
-
- let url;
-
- // Test search URLs (including purposes).
- url = engine.getSubmission("foo").uri.spec;
- is(url, base, "Check search URL for 'foo'");
- url = engine.getSubmission("foo", null, "contextmenu").uri.spec;
- is(url, base, "Check context menu search URL for 'foo'");
- url = engine.getSubmission("foo", null, "keyword").uri.spec;
- is(url, keywordBase, "Check keyword search URL for 'foo'");
- url = engine.getSubmission("foo", null, "searchbar").uri.spec;
- is(url, base, "Check search bar search URL for 'foo'");
- url = engine.getSubmission("foo", null, "homepage").uri.spec;
- is(url, base, "Check homepage search URL for 'foo'");
- url = engine.getSubmission("foo", null, "newtab").uri.spec;
- is(url, base, "Check newtab search URL for 'foo'");
-
- // Check search suggestion URL.
- url = engine.getSubmission("foo", "application/x-suggestions+json").uri.spec;
- is(url, "https://www.google.com/complete/search?client=firefox&q=foo", "Check search suggestion URL for 'foo'");
-
- // Check result parsing and alternate domains.
- let alternateBase = base.replace("www.google.com", "www.google.fr");
- is(Services.search.parseSubmissionURL(base).terms, "foo",
- "Check result parsing");
- is(Services.search.parseSubmissionURL(alternateBase).terms, "foo",
- "Check alternate domain");
-
- // Check all other engine properties.
- const EXPECTED_ENGINE = {
- name: "Google",
- alias: null,
- description: "Google Search",
- searchForm: "https://www.google.com/search?q=&ie=utf-8&oe=utf-8&client=firefox-b",
- hidden: false,
- wrappedJSObject: {
- queryCharset: "UTF-8",
- "_iconURL": "data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///zD9/f2W/f392P39/fn9/f35/f391/39/ZT+/v4uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Cf39/Zn///////////////////////////////////////////39/ZX///8IAAAAAAAAAAAAAAAA/v7+Cf39/cH/////+v35/7TZp/92ul3/WKs6/1iqOv9yuFn/rNWd//j79v///////f39v////wgAAAAAAAAAAP39/Zn/////7PXp/3G3WP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP+Or1j//vDo///////9/f2VAAAAAP///zD/////+vz5/3G3V/9TqDT/WKo6/6LQkf/U6cz/1urO/6rUm/+Zo0r/8IZB//adZ////v7///////7+/i79/f2Y/////4nWzf9Lqkj/Vqo4/9Xqzv///////////////////////ebY//SHRv/0hUL//NjD///////9/f2U/f392v////8sxPH/Ebzt/43RsP/////////////////////////////////4roL/9IVC//i1jf///////f391/39/fr/////Cr37/wW8+/+16/7/////////////////9IVC//SFQv/0hUL/9IVC//SFQv/3pnX///////39/fn9/f36/////wu++/8FvPv/tuz+//////////////////SFQv/0hUL/9IVC//SFQv/0hUL/96p7///////9/f35/f392/////81yfz/CrL5/2uk9v///////////////////////////////////////////////////////f392P39/Zn/////ks/7/zdS7P84Rur/0NT6///////////////////////9/f////////////////////////39/Zb+/v4y//////n5/v9WYu3/NUPq/ztJ6/+VnPT/z9L6/9HU+v+WnfT/Ul7t/+Hj/P////////////////////8wAAAAAP39/Z3/////6Or9/1hj7v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9sdvD////////////9/f2YAAAAAAAAAAD///8K/f39w//////5+f7/paz2/11p7v88Suv/Okfq/1pm7v+iqfX/+fn+///////9/f3B/v7+CQAAAAAAAAAAAAAAAP///wr9/f2d///////////////////////////////////////////9/f2Z/v7+CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/jL9/f2Z/f392/39/fr9/f36/f392v39/Zj///8wAAAAAAAAAAAAAAAAAAAAAPAPAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAACAAQAAwAMAAPAPAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/g3+/v5X/f39mf39/cj9/f3q/f39+f39/fn9/f3q/f39yP39/Zn+/v5W////DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/iT9/f2c/f399f/////////////////////////////////////////////////////9/f31/f39mv7+/iMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gn9/f2K/f39+////////////////////////////////////////////////////////////////////////////f39+v39/Yf///8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4k/f390v////////////////////////////////////////////////////////////////////////////////////////////////39/dD///8iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////MP39/er//////////////////////////+r05v+v16H/gsBs/2WxSf9Wqjj/Vqk3/2OwRv99vWX/pdKV/97u2P////////////////////////////39/ej+/v4vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/iT9/f3q/////////////////////+v15/+Pxnv/VKk2/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/36+Z//d7tf///////////////////////39/ej///8iAAAAAAAAAAAAAAAAAAAAAAAAAAD///8K/f390//////////////////////E4bn/XKw+/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1apN/+x0pv///////////////////////39/dD///8IAAAAAAAAAAAAAAAAAAAAAP39/Yv/////////////////////sdij/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/YKU1/8qOPv/5wZ////////////////////////39/YcAAAAAAAAAAAAAAAD+/v4l/f39+////////////////8Lgt/9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9utlT/n86N/7faqv+426v/pdKV/3u8ZP9UqDX/U6g0/3egN//jiUH/9IVC//SFQv/82MP//////////////////f39+v7+/iMAAAAAAAAAAP39/Z3////////////////q9Ob/W6w+/1OoNP9TqDT/U6g0/1OoNP9nskz/zOXC/////////////////////////////////+Dv2v+osWP/8YVC//SFQv/0hUL/9IVC//WQVP/++fb//////////////////f39mgAAAAD+/v4O/f399v///////////////4LHj/9TqDT/U6g0/1OoNP9TqDT/dblc//L58P/////////////////////////////////////////////8+v/3p3f/9IVC//SFQv/0hUL/9IVC//rIqf/////////////////9/f31////DP7+/ln////////////////f9v7/Cbz2/zOwhv9TqDT/U6g0/2KwRv/v9+z///////////////////////////////////////////////////////738//1kFT/9IVC//SFQv/0hUL/9plg///////////////////////+/v5W/f39nP///////////////4jf/f8FvPv/Bbz7/yG1s/9QqDz/vN2w//////////////////////////////////////////////////////////////////rHqP/0hUL/9IVC//SFQv/0hUL//vDn//////////////////39/Zn9/f3L////////////////R878/wW8+/8FvPv/Bbz7/y7C5P/7/fr//////////////////////////////////////////////////////////////////ere//SFQv/0hUL/9IVC//SFQv/718H//////////////////f39yP39/ez///////////////8cwvv/Bbz7/wW8+/8FvPv/WNL8///////////////////////////////////////0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//rIqv/////////////////9/f3q/f39+v///////////////we9+/8FvPv/Bbz7/wW8+/993P3///////////////////////////////////////SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/+cGf//////////////////39/fn9/f36////////////////B737/wW8+/8FvPv/Bbz7/33c/f//////////////////////////////////////9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/6xaX//////////////////f39+f39/e3///////////////8cwvv/Bbz7/wW8+/8FvPv/WdP8///////////////////////////////////////0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//vVv//////////////////9/f3q/f39y////////////////0bN/P8FvPv/Bbz7/wW8+/8hrvn/+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////39/cj9/f2c////////////////ht/9/wW8+/8FvPv/FZP1/zRJ6/+zuPf//////////////////////////////////////////////////////////////////////////////////////////////////////////////////f39mf7+/lr////////////////d9v7/B7n7/yB38f81Q+r/NUPq/0hV7P/u8P3////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v5X////D/39/ff///////////////9tkPT/NUPq/zVD6v81Q+r/NUPq/2Fs7//y8v7////////////////////////////////////////////09f7//////////////////////////////////////////////////f399f7+/g0AAAAA/f39n////////////////+Tm/P89Suv/NUPq/zVD6v81Q+r/NUPq/1Bc7f/IzPn/////////////////////////////////x8v5/0xY7P+MlPP////////////////////////////////////////////9/f2cAAAAAAAAAAD+/v4n/f39/P///////////////7W69/81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9ZZe7/k5v0/6609/+vtff/lJv0/1pm7v81Q+r/NUPq/zVD6v+GjvL//v7//////////////////////////////f39+/7+/iQAAAAAAAAAAAAAAAD9/f2N/////////////////////6Cn9f81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v+BivL////////////////////////////9/f2KAAAAAAAAAAAAAAAAAAAAAP7+/gv9/f3V/////////////////////7W69/8+S+v/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/P0zr/7q/+P///////////////////////f390v7+/gkAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ib9/f3r/////////////////////+Xn/P94gfH/NkTq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NkTq/3Z/8f/l5/z///////////////////////39/er+/v4kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/jL9/f3r///////////////////////////k5vz/nqX1/2p08P9IVez/OEbq/zdF6v9GU+z/aHLv/5qh9f/i5Pz////////////////////////////9/f3q////MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ib9/f3V/////////////////////////////////////////////////////////////////////////////////////////////////f390v7+/iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wr9/f2N/f39/P///////////////////////////////////////////////////////////////////////////f39+/39/Yv+/v4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4n/f39n/39/ff//////////////////////////////////////////////////////f399v39/Z3+/v4lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Dv7+/lr9/f2c/f39y/39/e39/f36/f39+v39/ez9/f3L/f39nP7+/ln+/v4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AA///AAD//AAAP/gAAB/wAAAP4AAAB8AAAAPAAAADgAAAAYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAcAAAAPAAAAD4AAAB/AAAA/4AAAf/AAAP/8AAP//wAP/",
- _urls : [
- {
- type: "application/x-suggestions+json",
- method: "GET",
- template: "https://www.google.com/complete/search?client=firefox&q={searchTerms}",
- params: "",
- },
- {
- type: "text/html",
- method: "GET",
- template: "https://www.google.com/search",
- params: [
- {
- "name": "q",
- "value": "{searchTerms}",
- "purpose": undefined,
- },
- {
- "name": "ie",
- "value": "utf-8",
- "purpose": undefined,
- },
- {
- "name": "oe",
- "value": "utf-8",
- "purpose": undefined,
- },
- {
- "name": "client",
- "value": "firefox-b-ab",
- "purpose": "keyword",
- },
- {
- "name": "client",
- "value": "firefox-b",
- "purpose": "searchbar",
- },
- ],
- mozparams: {
- },
- },
- ],
- },
- };
-
- isSubObjectOf(EXPECTED_ENGINE, engine, "Google");
-}
diff --git a/browser/components/search/test/browser_google_behavior.js b/browser/components/search/test/browser_google_behavior.js
deleted file mode 100644
index 55405bb29..000000000
--- a/browser/components/search/test/browser_google_behavior.js
+++ /dev/null
@@ -1,165 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/*
- * Test Google search plugin URLs
- */
-
-"use strict";
-
-function test() {
- let engine = Services.search.getEngineByName("Google");
- ok(engine, "Google is installed");
-
- let previouslySelectedEngine = Services.search.currentEngine;
- Services.search.currentEngine = engine;
- engine.alias = "g";
-
- let base = "https://www.google.com/search?q=foo&ie=utf-8&oe=utf-8&client=firefox-b";
- let keywordBase = base + "-ab";
-
- let url;
-
- // Test search URLs (including purposes).
- url = engine.getSubmission("foo").uri.spec;
- is(url, base, "Check search URL for 'foo'");
-
- waitForExplicitFinish();
-
- var gCurrTest;
- var gTests = [
- {
- name: "context menu search",
- searchURL: base,
- run: function () {
- // Simulate a contextmenu search
- // FIXME: This is a bit "low-level"...
- BrowserSearch.loadSearch("foo", false, "contextmenu");
- }
- },
- {
- name: "keyword search",
- searchURL: keywordBase,
- run: function () {
- gURLBar.value = "? foo";
- gURLBar.focus();
- EventUtils.synthesizeKey("VK_RETURN", {});
- }
- },
- {
- name: "keyword search",
- searchURL: keywordBase,
- run: function () {
- gURLBar.value = "g foo";
- gURLBar.focus();
- EventUtils.synthesizeKey("VK_RETURN", {});
- }
- },
- {
- name: "search bar search",
- searchURL: base,
- run: function () {
- let sb = BrowserSearch.searchBar;
- sb.focus();
- sb.value = "foo";
- registerCleanupFunction(function () {
- sb.value = "";
- });
- EventUtils.synthesizeKey("VK_RETURN", {});
- }
- },
- {
- name: "new tab search",
- searchURL: base,
- run: function () {
- function doSearch(doc) {
- // Re-add the listener, and perform a search
- gBrowser.addProgressListener(listener);
- doc.getElementById("newtab-search-text").value = "foo";
- doc.getElementById("newtab-search-submit").click();
- }
-
- // load about:newtab, but remove the listener first so it doesn't
- // get in the way
- gBrowser.removeProgressListener(listener);
- gBrowser.loadURI("about:newtab");
- info("Waiting for about:newtab load");
- tab.linkedBrowser.addEventListener("load", function load(event) {
- if (event.originalTarget != tab.linkedBrowser.contentDocument ||
- event.target.location.href == "about:blank") {
- info("skipping spurious load event");
- return;
- }
- tab.linkedBrowser.removeEventListener("load", load, true);
-
- // Observe page setup
- let win = gBrowser.contentWindow;
- if (win.gSearch.currentEngineName ==
- Services.search.currentEngine.name) {
- doSearch(win.document);
- }
- else {
- info("Waiting for newtab search init");
- win.addEventListener("ContentSearchService", function done(event) {
- info("Got newtab search event " + event.detail.type);
- if (event.detail.type == "State") {
- win.removeEventListener("ContentSearchService", done);
- // Let gSearch respond to the event before continuing.
- executeSoon(() => doSearch(win.document));
- }
- });
- }
- }, true);
- }
- }
- ];
-
- function nextTest() {
- if (gTests.length) {
- gCurrTest = gTests.shift();
- info("Running : " + gCurrTest.name);
- executeSoon(gCurrTest.run);
- } else {
- finish();
- }
- }
-
- let tab = gBrowser.selectedTab = gBrowser.addTab();
-
- let listener = {
- onStateChange: function onStateChange(webProgress, req, flags, status) {
- info("onStateChange");
- // Only care about top-level document starts
- let docStart = Ci.nsIWebProgressListener.STATE_IS_DOCUMENT |
- Ci.nsIWebProgressListener.STATE_START;
- if (!(flags & docStart) || !webProgress.isTopLevel)
- return;
-
- if (req.originalURI.spec == "about:blank")
- return;
-
- info("received document start");
-
- ok(req instanceof Ci.nsIChannel, "req is a channel");
- is(req.originalURI.spec, gCurrTest.searchURL, "search URL was loaded");
- info("Actual URI: " + req.URI.spec);
-
- req.cancel(Components.results.NS_ERROR_FAILURE);
-
- executeSoon(nextTest);
- }
- }
-
- registerCleanupFunction(function () {
- engine.alias = undefined;
- gBrowser.removeProgressListener(listener);
- gBrowser.removeTab(tab);
- Services.search.currentEngine = previouslySelectedEngine;
- });
-
- tab.linkedBrowser.addEventListener("load", function load() {
- tab.linkedBrowser.removeEventListener("load", load, true);
- gBrowser.addProgressListener(listener);
- nextTest();
- }, true);
-}
diff --git a/browser/components/search/test/browser_google_codes.js b/browser/components/search/test/browser_google_codes.js
deleted file mode 100644
index e166b6868..000000000
--- a/browser/components/search/test/browser_google_codes.js
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-const kUrlPref = "geoSpecificDefaults.url";
-const BROWSER_SEARCH_PREF = "browser.search.";
-
-var originalGeoURL;
-
-/**
- * Clean the profile of any cache file left from a previous run.
- * Returns a boolean indicating if the cache file existed.
- */
-function removeCacheFile()
-{
- const CACHE_FILENAME = "search.json.mozlz4";
-
- let file = Services.dirsvc.get("ProfD", Ci.nsIFile);
- file.append(CACHE_FILENAME);
- if (file.exists()) {
- file.remove(false);
- return true;
- }
- return false;
-}
-
-/**
- * Returns a promise that is resolved when an observer notification from the
- * search service fires with the specified data.
- *
- * @param aExpectedData
- * The value the observer notification sends that causes us to resolve
- * the promise.
- */
-function waitForSearchNotification(aExpectedData, aCallback) {
- const SEARCH_SERVICE_TOPIC = "browser-search-service";
- Services.obs.addObserver(function observer(aSubject, aTopic, aData) {
- if (aData != aExpectedData)
- return;
-
- Services.obs.removeObserver(observer, SEARCH_SERVICE_TOPIC);
- aCallback();
- }, SEARCH_SERVICE_TOPIC, false);
-}
-
-function asyncInit() {
- return new Promise(resolve => {
- Services.search.init(function() {
- ok(Services.search.isInitialized, "search service should be initialized");
- resolve();
- });
- });
-}
-
-function asyncReInit() {
- const kLocalePref = "general.useragent.locale";
-
- let promise = new Promise(resolve => {
- waitForSearchNotification("reinit-complete", resolve);
- });
-
- Services.search.QueryInterface(Ci.nsIObserver)
- .observe(null, "nsPref:changed", kLocalePref);
-
- return promise;
-}
-
-let gEngineCount;
-
-add_task(function* preparation() {
- // ContentSearch is interferring with our async re-initializations of the
- // search service: once _initServicePromise has resolved, it will access
- // the search service, thus causing unpredictable behavior due to
- // synchronous initializations of the service.
- let originalContentSearchPromise = ContentSearch._initServicePromise;
- ContentSearch._initServicePromise = new Promise(resolve => {
- registerCleanupFunction(() => {
- ContentSearch._initServicePromise = originalContentSearchPromise;
- resolve();
- });
- });
-
- yield asyncInit();
- gEngineCount = Services.search.getVisibleEngines().length;
-
- waitForSearchNotification("uninit-complete", () => {
- // Verify search service is not initialized
- is(Services.search.isInitialized, false, "Search service should NOT be initialized");
-
- removeCacheFile();
-
- // Geo specific defaults won't be fetched if there's no country code.
- Services.prefs.setCharPref("browser.search.geoip.url",
- 'data:application/json,{"country_code": "US"}');
-
- Services.prefs.setBoolPref("browser.search.geoSpecificDefaults", true);
-
- // Make the new Google the only engine
- originalGeoURL = Services.prefs.getCharPref(BROWSER_SEARCH_PREF + kUrlPref);
- let geoUrl = 'data:application/json,{"interval": 31536000, "settings": {"searchDefault": "Google", "visibleDefaultEngines": ["google"]}}';
- Services.prefs.getDefaultBranch(BROWSER_SEARCH_PREF).setCharPref(kUrlPref, geoUrl);
- });
-
- yield asyncReInit();
-
- yield new Promise(resolve => {
- waitForSearchNotification("write-cache-to-disk-complete", resolve);
- });
-});
-
-add_task(function* tests() {
- let engines = Services.search.getEngines();
- is(Services.search.currentEngine.name, "Google", "Search engine should be Google");
- is(engines.length, 1, "There should only be one engine");
-
- let engine = Services.search.getEngineByName("Google");
- ok(engine, "Google");
-
- let base = "https://www.google.com/search?q=foo&ie=utf-8&oe=utf-8&client=firefox-b";
-
- // Keyword uses a slightly different code
- let keywordBase = base + "-ab";
-
- let url;
-
- // Test search URLs (including purposes).
- url = engine.getSubmission("foo", null, "contextmenu").uri.spec;
- is(url, base, "Check context menu search URL for 'foo'");
- url = engine.getSubmission("foo", null, "keyword").uri.spec;
- is(url, keywordBase, "Check keyword search URL for 'foo'");
- url = engine.getSubmission("foo", null, "searchbar").uri.spec;
- is(url, base, "Check search bar search URL for 'foo'");
- url = engine.getSubmission("foo", null, "homepage").uri.spec;
- is(url, base, "Check homepage search URL for 'foo'");
- url = engine.getSubmission("foo", null, "newtab").uri.spec;
- is(url, base, "Check newtab search URL for 'foo'");
- url = engine.getSubmission("foo", null, "system").uri.spec;
- is(url, base, "Check system search URL for 'foo'");
-});
-
-
-add_task(function* cleanup() {
- waitForSearchNotification("uninit-complete", () => {
- // Verify search service is not initialized
- is(Services.search.isInitialized, false,
- "Search service should NOT be initialized");
- removeCacheFile();
-
- Services.prefs.clearUserPref("browser.search.geoip.url");
-
- // We can't clear the pref because it's set to false by testing/profiles/prefs_general.js
- Services.prefs.setBoolPref("browser.search.geoSpecificDefaults", false);
-
- Services.prefs.getDefaultBranch(BROWSER_SEARCH_PREF).setCharPref(kUrlPref, originalGeoURL);
- });
-
- yield asyncReInit();
- is(gEngineCount, Services.search.getVisibleEngines().length,
- "correct engine count after cleanup");
-});
diff --git a/browser/components/search/test/browser_healthreport.js b/browser/components/search/test/browser_healthreport.js
deleted file mode 100644
index c68ad174c..000000000
--- a/browser/components/search/test/browser_healthreport.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-var Preferences = Cu.import("resource://gre/modules/Preferences.jsm", {}).Preferences;
-
-function test() {
- waitForExplicitFinish();
- resetPreferences();
-
- function testTelemetry() {
- // Find the right bucket for the "Foo" engine.
- let engine = Services.search.getEngineByName("Foo");
- let histogramKey = (engine.identifier || "other-Foo") + ".searchbar";
- let numSearchesBefore = 0;
- try {
- let hs = Services.telemetry.getKeyedHistogramById("SEARCH_COUNTS").snapshot();
- if (histogramKey in hs) {
- numSearchesBefore = hs[histogramKey].sum;
- }
- } catch (ex) {
- // No searches performed yet, not a problem, |numSearchesBefore| is 0.
- }
-
- // Now perform a search and ensure the count is incremented.
- let tab = gBrowser.addTab();
- gBrowser.selectedTab = tab;
- let searchBar = BrowserSearch.searchBar;
-
- searchBar.value = "firefox health report";
- searchBar.focus();
-
- function afterSearch() {
- searchBar.value = "";
- gBrowser.removeTab(tab);
-
- // Make sure that the context searches are correctly recorded.
- let hs = Services.telemetry.getKeyedHistogramById("SEARCH_COUNTS").snapshot();
- Assert.ok(histogramKey in hs, "The histogram must contain the correct key");
- Assert.equal(hs[histogramKey].sum, numSearchesBefore + 1,
- "Performing a search increments the related SEARCH_COUNTS key by 1.");
-
- let engine = Services.search.getEngineByName("Foo");
- Services.search.removeEngine(engine);
- }
-
- EventUtils.synthesizeKey("VK_RETURN", {});
- executeSoon(() => executeSoon(afterSearch));
- }
-
- function observer(subject, topic, data) {
- switch (data) {
- case "engine-added":
- let engine = Services.search.getEngineByName("Foo");
- ok(engine, "Engine was added.");
- Services.search.currentEngine = engine;
- break;
-
- case "engine-current":
- is(Services.search.currentEngine.name, "Foo", "Current engine is Foo");
- testTelemetry();
- break;
-
- case "engine-removed":
- Services.obs.removeObserver(observer, "browser-search-engine-modified");
- finish();
- break;
- }
- }
-
- Services.obs.addObserver(observer, "browser-search-engine-modified", false);
- SpecialPowers.pushPrefEnv({set: [["toolkit.telemetry.enabled", true]]}).then(function() {
- Services.search.addEngine("http://mochi.test:8888/browser/browser/components/search/test/testEngine.xml",
- null, "data:image/x-icon,%00", false);
- });
-}
-
-function resetPreferences() {
- Preferences.resetBranch("datareporting.policy.");
- Preferences.set("datareporting.policy.dataSubmissionPolicyBypassNotification", true);
-}
diff --git a/browser/components/search/test/browser_hiddenOneOffs_cleanup.js b/browser/components/search/test/browser_hiddenOneOffs_cleanup.js
deleted file mode 100644
index 9a584feb6..000000000
--- a/browser/components/search/test/browser_hiddenOneOffs_cleanup.js
+++ /dev/null
@@ -1,99 +0,0 @@
-/* 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/. */
-const testPref = "Foo,FooDupe";
-
-function promiseNewEngine(basename) {
- return new Promise((resolve, reject) => {
- info("Waiting for engine to be added: " + basename);
- Services.search.init({
- onInitComplete: function() {
- let url = getRootDirectory(gTestPath) + basename;
- Services.search.addEngine(url, null, "", false, {
- onSuccess: function (engine) {
- info("Search engine added: " + basename);
- resolve(engine);
- },
- onError: function (errCode) {
- ok(false, "addEngine failed with error code " + errCode);
- reject();
- }
- });
- }
- });
- });
-}
-
-add_task(function* test_remove() {
- yield promiseNewEngine("testEngine_dupe.xml");
- yield promiseNewEngine("testEngine.xml");
- Services.prefs.setCharPref("browser.search.hiddenOneOffs", testPref);
-
- info("Removing testEngine_dupe.xml");
- Services.search.removeEngine(Services.search.getEngineByName("FooDupe"));
-
- let hiddenOneOffs =
- Services.prefs.getCharPref("browser.search.hiddenOneOffs").split(",");
-
- is(hiddenOneOffs.length, 1,
- "hiddenOneOffs has the correct engine count post removal.");
- is(hiddenOneOffs.some(x => x == "FooDupe"), false,
- "Removed Engine is not in hiddenOneOffs after removal");
- is(hiddenOneOffs.some(x => x == "Foo"), true,
- "Current hidden engine is not affected by removal.");
-
- info("Removing testEngine.xml");
- Services.search.removeEngine(Services.search.getEngineByName("Foo"));
-
- is(Services.prefs.getCharPref("browser.search.hiddenOneOffs"), "",
- "hiddenOneOffs is empty after removing all hidden engines.");
-});
-
-add_task(function* test_add() {
- yield promiseNewEngine("testEngine.xml");
- info("setting prefs to " + testPref);
- Services.prefs.setCharPref("browser.search.hiddenOneOffs", testPref);
- yield promiseNewEngine("testEngine_dupe.xml");
-
- let hiddenOneOffs =
- Services.prefs.getCharPref("browser.search.hiddenOneOffs").split(",");
-
- is(hiddenOneOffs.length, 1,
- "hiddenOneOffs has the correct number of hidden engines present post add.");
- is(hiddenOneOffs.some(x => x == "FooDupe"), false,
- "Added engine is not present in hidden list.");
- is(hiddenOneOffs.some(x => x == "Foo"), true,
- "Adding an engine does not remove engines from hidden list.");
-});
-
-add_task(function* test_diacritics() {
- const diacritic_engine = "Foo \u2661";
- let Preferences =
- Cu.import("resource://gre/modules/Preferences.jsm", {}).Preferences;
-
- Preferences.set("browser.search.hiddenOneOffs", diacritic_engine);
- yield promiseNewEngine("testEngine_diacritics.xml");
-
- let hiddenOneOffs =
- Preferences.get("browser.search.hiddenOneOffs").split(",");
- is(hiddenOneOffs.some(x => x == diacritic_engine), false,
- "Observer cleans up added hidden engines that include a diacritic.");
-
- Preferences.set("browser.search.hiddenOneOffs", diacritic_engine);
-
- info("Removing testEngine_diacritics.xml");
- Services.search.removeEngine(Services.search.getEngineByName(diacritic_engine));
-
- hiddenOneOffs =
- Preferences.get("browser.search.hiddenOneOffs").split(",");
- is(hiddenOneOffs.some(x => x == diacritic_engine), false,
- "Observer cleans up removed hidden engines that include a diacritic.");
-});
-
-registerCleanupFunction(() => {
- info("Removing testEngine.xml");
- Services.search.removeEngine(Services.search.getEngineByName("Foo"));
- info("Removing testEngine_dupe.xml");
- Services.search.removeEngine(Services.search.getEngineByName("FooDupe"));
- Services.prefs.clearUserPref("browser.search.hiddenOneOffs");
-});
diff --git a/browser/components/search/test/browser_hiddenOneOffs_diacritics.js b/browser/components/search/test/browser_hiddenOneOffs_diacritics.js
deleted file mode 100644
index db24c7192..000000000
--- a/browser/components/search/test/browser_hiddenOneOffs_diacritics.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/* 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/. */
-// Tests that keyboard navigation in the search panel works as designed.
-
-const searchbar = document.getElementById("searchbar");
-const textbox = searchbar._textbox;
-const searchPopup = document.getElementById("PopupSearchAutoComplete");
-const searchIcon = document.getAnonymousElementByAttribute(searchbar, "anonid",
- "searchbar-search-button");
-
-const diacritic_engine = "Foo \u2661";
-
-var Preferences =
- Cu.import("resource://gre/modules/Preferences.jsm", {}).Preferences;
-
-add_task(function* init() {
- let currentEngine = Services.search.currentEngine;
- yield promiseNewEngine("testEngine_diacritics.xml", {setAsCurrent: false});
- registerCleanupFunction(() => {
- Services.search.currentEngine = currentEngine;
- Services.prefs.clearUserPref("browser.search.hiddenOneOffs");
- });
-});
-
-add_task(function* test_hidden() {
- Preferences.set("browser.search.hiddenOneOffs", diacritic_engine);
-
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- EventUtils.synthesizeMouseAtCenter(searchIcon, {});
- yield promise;
-
- ok(!getOneOffs().some(x => x.getAttribute("tooltiptext") == diacritic_engine),
- "Search engines with diacritics are hidden when added to hiddenOneOffs preference.");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- info("Closing search panel");
- EventUtils.synthesizeKey("VK_ESCAPE", {});
- yield promise;
-});
-
-add_task(function* test_shown() {
- Preferences.set("browser.search.hiddenOneOffs", "");
-
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- SimpleTest.executeSoon(() => {
- EventUtils.synthesizeMouseAtCenter(searchIcon, {});
- });
- yield promise;
-
- ok(getOneOffs().some(x => x.getAttribute("tooltiptext") == diacritic_engine),
- "Search engines with diacritics are shown when removed from hiddenOneOffs preference.");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- searchPopup.hidePopup();
- yield promise;
-});
diff --git a/browser/components/search/test/browser_oneOffContextMenu.js b/browser/components/search/test/browser_oneOffContextMenu.js
deleted file mode 100644
index 69207923b..000000000
--- a/browser/components/search/test/browser_oneOffContextMenu.js
+++ /dev/null
@@ -1,105 +0,0 @@
-"use strict";
-
-const TEST_ENGINE_NAME = "Foo";
-const TEST_ENGINE_BASENAME = "testEngine.xml";
-
-const searchbar = document.getElementById("searchbar");
-const searchPopup = document.getElementById("PopupSearchAutoComplete");
-const searchIcon = document.getAnonymousElementByAttribute(
- searchbar, "anonid", "searchbar-search-button"
-);
-const oneOffBinding = document.getAnonymousElementByAttribute(
- searchPopup, "anonid", "search-one-off-buttons"
-);
-const contextMenu = document.getAnonymousElementByAttribute(
- oneOffBinding, "anonid", "search-one-offs-context-menu"
-);
-const oneOffButtons = document.getAnonymousElementByAttribute(
- oneOffBinding, "anonid", "search-panel-one-offs"
-);
-const searchInNewTabMenuItem = document.getAnonymousElementByAttribute(
- oneOffBinding, "anonid", "search-one-offs-context-open-in-new-tab"
-);
-
-add_task(function* init() {
- yield promiseNewEngine(TEST_ENGINE_BASENAME, {
- setAsCurrent: false,
- });
-});
-
-add_task(function* extendedTelemetryDisabled() {
- yield SpecialPowers.pushPrefEnv({set: [["toolkit.telemetry.enabled", false]]});
- yield doTest();
- checkTelemetry("other");
-});
-
-add_task(function* extendedTelemetryEnabled() {
- yield SpecialPowers.pushPrefEnv({set: [["toolkit.telemetry.enabled", true]]});
- yield doTest();
- checkTelemetry("other-" + TEST_ENGINE_NAME);
-});
-
-function* doTest() {
- // Open the popup.
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- EventUtils.synthesizeMouseAtCenter(searchIcon, {});
- yield promise;
-
- // Get the one-off button for the test engine.
- let oneOffButton;
- for (let node of oneOffButtons.childNodes) {
- if (node.engine && node.engine.name == TEST_ENGINE_NAME) {
- oneOffButton = node;
- break;
- }
- }
- Assert.notEqual(oneOffButton, undefined,
- "One-off for test engine should exist");
-
- // Open the context menu on the one-off.
- promise = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
- EventUtils.synthesizeMouseAtCenter(oneOffButton, {
- type: "contextmenu",
- button: 2,
- });
- yield promise;
-
- // Click the Search in New Tab menu item.
- promise = BrowserTestUtils.waitForNewTab(gBrowser);
- EventUtils.synthesizeMouseAtCenter(searchInNewTabMenuItem, {});
- let tab = yield promise;
-
- // By default the search will open in the background and the popup will stay open:
- promise = promiseEvent(searchPopup, "popuphidden");
- info("Closing search panel");
- EventUtils.synthesizeKey("VK_ESCAPE", {});
- yield promise;
-
- // Check the loaded tab.
- Assert.equal(tab.linkedBrowser.currentURI.spec,
- "http://mochi.test:8888/browser/browser/components/search/test/",
- "Expected search tab should have loaded");
-
- yield BrowserTestUtils.removeTab(tab);
-
- // Move the cursor out of the panel area to avoid messing with other tests.
- yield EventUtils.synthesizeNativeMouseMove(searchbar);
-}
-
-function checkTelemetry(expectedEngineName) {
- let propertyPath = [
- "countableEvents",
- "__DEFAULT__",
- "search-oneoff",
- expectedEngineName + ".oneoff-context-searchbar",
- "unknown",
- "tab-background",
- ];
- let telem = BrowserUITelemetry.getToolbarMeasures();
- for (let prop of propertyPath) {
- Assert.ok(prop in telem, "Property " + prop + " should be in the telemetry");
- telem = telem[prop];
- }
- Assert.equal(telem, 1, "Click count");
-}
diff --git a/browser/components/search/test/browser_oneOffContextMenu_setDefault.js b/browser/components/search/test/browser_oneOffContextMenu_setDefault.js
deleted file mode 100644
index ff49cb0c6..000000000
--- a/browser/components/search/test/browser_oneOffContextMenu_setDefault.js
+++ /dev/null
@@ -1,195 +0,0 @@
-"use strict";
-
-const TEST_ENGINE_NAME = "Foo";
-const TEST_ENGINE_BASENAME = "testEngine.xml";
-const SEARCHBAR_BASE_ID = "searchbar-engine-one-off-item-";
-const URLBAR_BASE_ID = "urlbar-engine-one-off-item-";
-const ONEOFF_URLBAR_PREF = "browser.urlbar.oneOffSearches";
-
-const searchbar = document.getElementById("searchbar");
-const urlbar = document.getElementById("urlbar");
-const searchPopup = document.getElementById("PopupSearchAutoComplete");
-const urlbarPopup = document.getElementById("PopupAutoCompleteRichResult");
-const searchIcon = document.getAnonymousElementByAttribute(
- searchbar, "anonid", "searchbar-search-button"
-);
-const searchOneOffBinding = document.getAnonymousElementByAttribute(
- searchPopup, "anonid", "search-one-off-buttons"
-);
-const urlBarOneOffBinding = document.getAnonymousElementByAttribute(
- urlbarPopup, "anonid", "one-off-search-buttons"
-);
-
-let originalEngine = Services.search.currentEngine;
-
-function resetEngine() {
- Services.search.currentEngine = originalEngine;
-}
-
-registerCleanupFunction(resetEngine);
-
-add_task(function* init() {
- yield promiseNewEngine(TEST_ENGINE_BASENAME, {
- setAsCurrent: false,
- });
-});
-
-add_task(function* test_searchBarChangeEngine() {
- let oneOffButton = yield openPopupAndGetEngineButton(true, searchPopup,
- searchOneOffBinding,
- SEARCHBAR_BASE_ID);
-
- const setDefaultEngineMenuItem = document.getAnonymousElementByAttribute(
- searchOneOffBinding, "anonid", "search-one-offs-context-set-default"
- );
-
- // Click the set default engine menu item.
- let promise = promiseCurrentEngineChanged();
- EventUtils.synthesizeMouseAtCenter(setDefaultEngineMenuItem, {});
-
- // This also checks the engine correctly changed.
- yield promise;
-
- Assert.equal(oneOffButton.id, SEARCHBAR_BASE_ID + originalEngine.name,
- "Should now have the original engine's id for the button");
- Assert.equal(oneOffButton.getAttribute("tooltiptext"), originalEngine.name,
- "Should now have the original engine's name for the tooltip");
- Assert.equal(oneOffButton.image, originalEngine.iconURI.spec,
- "Should now have the original engine's uri for the image");
-
- yield promiseClosePopup(searchPopup);
-});
-
-add_task(function* test_urlBarChangeEngine() {
- Services.prefs.setBoolPref(ONEOFF_URLBAR_PREF, true);
- registerCleanupFunction(function* () {
- Services.prefs.clearUserPref(ONEOFF_URLBAR_PREF);
- });
-
- // Ensure the engine is reset.
- resetEngine();
-
- let oneOffButton = yield openPopupAndGetEngineButton(false, urlbarPopup,
- urlBarOneOffBinding,
- URLBAR_BASE_ID);
-
- const setDefaultEngineMenuItem = document.getAnonymousElementByAttribute(
- urlBarOneOffBinding, "anonid", "search-one-offs-context-set-default"
- );
-
- // Click the set default engine menu item.
- let promise = promiseCurrentEngineChanged();
- EventUtils.synthesizeMouseAtCenter(setDefaultEngineMenuItem, {});
-
- // This also checks the engine correctly changed.
- yield promise;
-
- let currentEngine = Services.search.currentEngine;
-
- // For the urlbar, we should keep the new engine's icon.
- Assert.equal(oneOffButton.id, URLBAR_BASE_ID + currentEngine.name,
- "Should now have the original engine's id for the button");
- Assert.equal(oneOffButton.getAttribute("tooltiptext"), currentEngine.name,
- "Should now have the original engine's name for the tooltip");
- Assert.equal(oneOffButton.image, currentEngine.iconURI.spec,
- "Should now have the original engine's uri for the image");
-
- yield promiseClosePopup(urlbarPopup);
-});
-
-/**
- * Promises that an engine change has happened for the current engine, which
- * has resulted in the test engine now being the current engine.
- *
- * @return {Promise} Resolved once the test engine is set as the current engine.
- */
-function promiseCurrentEngineChanged() {
- return new Promise(resolve => {
- function observer(aSub, aTopic, aData) {
- if (aData == "engine-current") {
- Assert.ok(Services.search.currentEngine.name, TEST_ENGINE_NAME, "currentEngine set");
- Services.obs.removeObserver(observer, "browser-search-engine-modified");
- resolve();
- }
- }
-
- Services.obs.addObserver(observer, "browser-search-engine-modified", false);
- });
-}
-
-/**
- * Opens the specified urlbar/search popup and gets the test engine from the
- * one-off buttons.
- *
- * @param {Boolean} isSearch true if the search popup should be opened; false
- * for the urlbar popup.
- * @param {Object} popup The expected popup.
- * @param {Object} oneOffBinding The expected one-off-binding for the popup.
- * @param {String} baseId The expected string for the id of the current
- * engine button, without the engine name.
- * @return {Object} Returns an object that represents the one off button for the
- * test engine.
- */
-function* openPopupAndGetEngineButton(isSearch, popup, oneOffBinding, baseId) {
- // Open the popup.
- let promise = promiseEvent(popup, "popupshown");
- info("Opening panel");
-
- // We have to open the popups in differnt ways.
- if (isSearch) {
- // Use the search icon to avoid hitting the network.
- EventUtils.synthesizeMouseAtCenter(searchIcon, {});
- } else {
- // There's no history at this stage, so we need to press a key.
- urlbar.focus();
- EventUtils.synthesizeKey("a", {});
- }
- yield promise;
-
- const contextMenu = document.getAnonymousElementByAttribute(
- oneOffBinding, "anonid", "search-one-offs-context-menu"
- );
- const oneOffButtons = document.getAnonymousElementByAttribute(
- oneOffBinding, "anonid", "search-panel-one-offs"
- );
-
- // Get the one-off button for the test engine.
- let oneOffButton;
- for (let node of oneOffButtons.childNodes) {
- if (node.engine && node.engine.name == TEST_ENGINE_NAME) {
- oneOffButton = node;
- break;
- }
- }
- Assert.notEqual(oneOffButton, undefined,
- "One-off for test engine should exist");
- Assert.equal(oneOffButton.getAttribute("tooltiptext"), TEST_ENGINE_NAME,
- "One-off should have the tooltip set to the engine name");
- Assert.equal(oneOffButton.id, baseId + TEST_ENGINE_NAME,
- "Should have the correct id");
-
- // Open the context menu on the one-off.
- promise = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
- EventUtils.synthesizeMouseAtCenter(oneOffButton, {
- type: "contextmenu",
- button: 2,
- });
- yield promise;
-
- return oneOffButton;
-}
-
-/**
- * Closes the popup and moves the mouse away from it.
- *
- * @param {Button} popup The popup to close.
- */
-function* promiseClosePopup(popup) {
- // close the panel using the escape key.
- let promise = promiseEvent(popup, "popuphidden");
- EventUtils.synthesizeKey("VK_ESCAPE", {});
- yield promise;
-
- // Move the cursor out of the panel area to avoid messing with other tests.
- yield EventUtils.synthesizeNativeMouseMove(popup);
-}
diff --git a/browser/components/search/test/browser_oneOffHeader.js b/browser/components/search/test/browser_oneOffHeader.js
deleted file mode 100644
index 3a209bf56..000000000
--- a/browser/components/search/test/browser_oneOffHeader.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/* 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/. */
-// Tests that keyboard navigation in the search panel works as designed.
-
-const isMac = ("nsILocalFileMac" in Ci);
-
-const searchbar = document.getElementById("searchbar");
-const textbox = searchbar._textbox;
-const searchPopup = document.getElementById("PopupSearchAutoComplete");
-const searchIcon = document.getAnonymousElementByAttribute(searchbar, "anonid",
- "searchbar-search-button");
-
-const oneOffsContainer =
- document.getAnonymousElementByAttribute(searchPopup, "anonid",
- "search-one-off-buttons");
-const searchSettings =
- document.getAnonymousElementByAttribute(oneOffsContainer, "anonid",
- "search-settings");
-var header =
- document.getAnonymousElementByAttribute(oneOffsContainer, "anonid",
- "search-panel-one-offs-header");
-function getHeaderText() {
- let headerChild = header.selectedPanel;
- while (headerChild.hasChildNodes()) {
- headerChild = headerChild.firstChild;
- }
- let headerStrings = [];
- for (let label = headerChild; label; label = label.nextSibling) {
- headerStrings.push(label.value);
- }
- return headerStrings.join("");
-}
-
-const msg = isMac ? 5 : 1;
-const utils = window.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindowUtils);
-const scale = utils.screenPixelsPerCSSPixel;
-function* synthesizeNativeMouseMove(aElement) {
- let rect = aElement.getBoundingClientRect();
- let win = aElement.ownerGlobal;
- let x = win.mozInnerScreenX + (rect.left + rect.right) / 2;
- let y = win.mozInnerScreenY + (rect.top + rect.bottom) / 2;
-
- // Wait for the mouseup event to occur before continuing.
- return new Promise((resolve, reject) => {
- function eventOccurred(e)
- {
- aElement.removeEventListener("mouseover", eventOccurred, true);
- resolve();
- }
-
- aElement.addEventListener("mouseover", eventOccurred, true);
-
- utils.sendNativeMouseEvent(x * scale, y * scale, msg, 0, null);
- });
-}
-
-
-add_task(function* init() {
- yield promiseNewEngine("testEngine.xml");
-});
-
-add_task(function* test_notext() {
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- EventUtils.synthesizeMouseAtCenter(searchIcon, {});
- yield promise;
-
- is(header.getAttribute("selectedIndex"), 0,
- "Header has the correct index selected with no search terms.");
-
- is(getHeaderText(), "Search with:",
- "Search header string is correct when no search terms have been entered");
-
- yield synthesizeNativeMouseMove(searchSettings);
- is(header.getAttribute("selectedIndex"), 0,
- "Header has the correct index when no search terms have been entered and the Change Search Settings button is selected.");
- is(getHeaderText(), "Search with:",
- "Header has the correct text when no search terms have been entered and the Change Search Settings button is selected.");
-
- let buttons = getOneOffs();
- yield synthesizeNativeMouseMove(buttons[0]);
- is(header.getAttribute("selectedIndex"), 2,
- "Header has the correct index selected when a search engine has been selected");
- is(getHeaderText(), "Search " + buttons[0].engine.name,
- "Is the header text correct when a search engine is selected and no terms have been entered.");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- info("Closing search panel");
- EventUtils.synthesizeKey("VK_ESCAPE", {});
- yield promise;
-});
-
-add_task(function* test_text() {
- textbox.value = "foo";
- registerCleanupFunction(() => {
- textbox.value = "";
- });
-
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- SimpleTest.executeSoon(() => {
- EventUtils.synthesizeMouseAtCenter(searchIcon, {});
- });
- yield promise;
-
- is(header.getAttribute("selectedIndex"), 1,
- "Header has the correct index selected with a search term.");
- is(getHeaderText(), "Search for foo with:",
- "Search header string is correct when a search term has been entered");
-
- let buttons = getOneOffs();
- yield synthesizeNativeMouseMove(buttons[0]);
- is(header.getAttribute("selectedIndex"), 2,
- "Header has the correct index selected when a search engine has been selected");
- is(getHeaderText(), "Search " + buttons[0].engine.name,
- "Is the header text correct when search terms are entered after a search engine has been selected.");
-
- yield synthesizeNativeMouseMove(searchSettings);
- is(header.getAttribute("selectedIndex"), 1,
- "Header has the correct index selected when search terms have been entered and the Change Search Settings button is selected.");
- is(getHeaderText(), "Search for foo with:",
- "Header has the correct text when search terms have been entered and the Change Search Settings button is selected.");
-
- // Click the "Foo Search" header at the top of the popup and make sure it
- // loads the search results.
- let searchbarEngine =
- document.getAnonymousElementByAttribute(searchPopup, "anonid",
- "searchbar-engine");
-
- yield synthesizeNativeMouseMove(searchbarEngine);
- SimpleTest.executeSoon(() => {
- EventUtils.synthesizeMouseAtCenter(searchbarEngine, {});
- });
-
- let url = Services.search.currentEngine.getSubmission(textbox.value).uri.spec;
- yield promiseTabLoadEvent(gBrowser.selectedTab, url);
-
- // Move the cursor out of the panel area to avoid messing with other tests.
- yield synthesizeNativeMouseMove(searchbar);
-});
diff --git a/browser/components/search/test/browser_private_search_perwindowpb.js b/browser/components/search/test/browser_private_search_perwindowpb.js
deleted file mode 100644
index c0410371b..000000000
--- a/browser/components/search/test/browser_private_search_perwindowpb.js
+++ /dev/null
@@ -1,76 +0,0 @@
-// This test performs a search in a public window, then a different
-// search in a private window, and then checks in the public window
-// whether there is an autocomplete entry for the private search.
-
-add_task(function* () {
- // Don't use about:home as the homepage for new windows
- Services.prefs.setIntPref("browser.startup.page", 0);
- registerCleanupFunction(() => Services.prefs.clearUserPref("browser.startup.page"));
-
- let windowsToClose = [];
-
- function performSearch(aWin, aIsPrivate) {
- let searchBar = aWin.BrowserSearch.searchBar;
- ok(searchBar, "got search bar");
-
- let loadPromise = BrowserTestUtils.browserLoaded(aWin.gBrowser.selectedBrowser);
-
- searchBar.value = aIsPrivate ? "private test" : "public test";
- searchBar.focus();
- EventUtils.synthesizeKey("VK_RETURN", {}, aWin);
-
- return loadPromise;
- }
-
- function* testOnWindow(aIsPrivate) {
- let win = yield BrowserTestUtils.openNewBrowserWindow({ private: aIsPrivate });
- yield SimpleTest.promiseFocus(win);
- windowsToClose.push(win);
- return win;
- }
-
- yield promiseNewEngine("426329.xml", { iconURL: "data:image/x-icon,%00" });
-
- let newWindow = yield* testOnWindow(false);
- yield performSearch(newWindow, false);
-
- newWindow = yield* testOnWindow(true);
- yield performSearch(newWindow, true);
-
- newWindow = yield* testOnWindow(false);
-
- let searchBar = newWindow.BrowserSearch.searchBar;
- searchBar.value = "p";
- searchBar.focus();
-
- let popup = searchBar.textbox.popup;
- let popupPromise = BrowserTestUtils.waitForEvent(popup, "popupshown");
- searchBar.textbox.showHistoryPopup();
- yield popupPromise;
-
- let entries = getMenuEntries(searchBar);
- for (let i = 0; i < entries.length; i++) {
- isnot(entries[i], "private test",
- "shouldn't see private autocomplete entries");
- }
-
- searchBar.textbox.toggleHistoryPopup();
- searchBar.value = "";
-
- windowsToClose.forEach(function(win) {
- win.close();
- });
-});
-
-function getMenuEntries(searchBar) {
- let entries = [];
- let autocompleteMenu = searchBar.textbox.popup;
- // Could perhaps pull values directly from the controller, but it seems
- // more reliable to test the values that are actually in the tree?
- let column = autocompleteMenu.tree.columns[0];
- let numRows = autocompleteMenu.tree.view.rowCount;
- for (let i = 0; i < numRows; i++) {
- entries.push(autocompleteMenu.tree.view.getValueAt(i, column));
- }
- return entries;
-}
diff --git a/browser/components/search/test/browser_searchbar_keyboard_navigation.js b/browser/components/search/test/browser_searchbar_keyboard_navigation.js
deleted file mode 100644
index d395dfdc2..000000000
--- a/browser/components/search/test/browser_searchbar_keyboard_navigation.js
+++ /dev/null
@@ -1,425 +0,0 @@
-// Tests that keyboard navigation in the search panel works as designed.
-
-const searchbar = document.getElementById("searchbar");
-const textbox = searchbar._textbox;
-const searchPopup = document.getElementById("PopupSearchAutoComplete");
-const oneOffsContainer =
- document.getAnonymousElementByAttribute(searchPopup, "anonid",
- "search-one-off-buttons");
-
-const kValues = ["foo1", "foo2", "foo3"];
-const kUserValue = "foo";
-
-function getOpenSearchItems() {
- let os = [];
-
- let addEngineList =
- document.getAnonymousElementByAttribute(oneOffsContainer, "anonid",
- "add-engines");
- for (let item = addEngineList.firstChild; item; item = item.nextSibling)
- os.push(item);
-
- return os;
-}
-
-add_task(function* init() {
- yield promiseNewEngine("testEngine.xml");
-
- // First cleanup the form history in case other tests left things there.
- yield new Promise((resolve, reject) => {
- info("cleanup the search history");
- searchbar.FormHistory.update({op: "remove", fieldname: "searchbar-history"},
- {handleCompletion: resolve,
- handleError: reject});
- });
-
- yield new Promise((resolve, reject) => {
- info("adding search history values: " + kValues);
- let ops = kValues.map(value => { return {op: "add",
- fieldname: "searchbar-history",
- value: value}
- });
- searchbar.FormHistory.update(ops, {
- handleCompletion: function() {
- registerCleanupFunction(() => {
- info("removing search history values: " + kValues);
- let ops =
- kValues.map(value => { return {op: "remove",
- fieldname: "searchbar-history",
- value: value}
- });
- searchbar.FormHistory.update(ops);
- });
- resolve();
- },
- handleError: reject
- });
- });
-
- textbox.value = kUserValue;
- registerCleanupFunction(() => { textbox.value = ""; });
-});
-
-
-add_task(function* test_arrows() {
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- searchbar.focus();
- yield promise;
- is(textbox.mController.searchString, kUserValue, "The search string should be 'foo'");
-
- // Check the initial state of the panel before sending keyboard events.
- is(searchPopup.view.rowCount, kValues.length, "There should be 3 suggestions");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
-
- // The tests will be less meaningful if the first, second, last, and
- // before-last one-off buttons aren't different. We should always have more
- // than 4 default engines, but it's safer to check this assumption.
- let oneOffs = getOneOffs();
- ok(oneOffs.length >= 4, "we have at least 4 one-off buttons displayed")
-
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- // The down arrow should first go through the suggestions.
- for (let i = 0; i < kValues.length; ++i) {
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(searchPopup.selectedIndex, i,
- "the suggestion at index " + i + " should be selected");
- is(textbox.value, kValues[i],
- "the textfield value should be " + kValues[i]);
- }
-
- // Pressing down again should remove suggestion selection and change the text
- // field value back to what the user typed, and select the first one-off.
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, kUserValue,
- "the textfield value should be back to initial value");
-
- // now cycle through the one-off items, the first one is already selected.
- for (let i = 0; i < oneOffs.length; ++i) {
- is(textbox.selectedButton, oneOffs[i],
- "the one-off button #" + (i + 1) + " should be selected");
- EventUtils.synthesizeKey("VK_DOWN", {});
- }
-
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
- EventUtils.synthesizeKey("VK_DOWN", {});
-
- // We should now be back to the initial situation.
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- info("now test the up arrow key");
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
-
- // cycle through the one-off items, the first one is already selected.
- for (let i = oneOffs.length; i; --i) {
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton, oneOffs[i - 1],
- "the one-off button #" + i + " should be selected");
- }
-
- // Another press on up should clear the one-off selection and select the
- // last suggestion.
- EventUtils.synthesizeKey("VK_UP", {});
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- for (let i = kValues.length - 1; i >= 0; --i) {
- is(searchPopup.selectedIndex, i,
- "the suggestion at index " + i + " should be selected");
- is(textbox.value, kValues[i],
- "the textfield value should be " + kValues[i]);
- EventUtils.synthesizeKey("VK_UP", {});
- }
-
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, kUserValue,
- "the textfield value should be back to initial value");
-});
-
-add_task(function* test_typing_clears_button_selection() {
- is(Services.focus.focusedElement, textbox.inputField,
- "the search bar should be focused"); // from the previous test.
- ok(!textbox.selectedButton, "no button should be selected");
-
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
-
- // Type a character.
- EventUtils.synthesizeKey("a", {});
- ok(!textbox.selectedButton, "the settings item should be de-selected");
-
- // Remove the character.
- EventUtils.synthesizeKey("VK_BACK_SPACE", {});
-});
-
-add_task(function* test_tab() {
- is(Services.focus.focusedElement, textbox.inputField,
- "the search bar should be focused"); // from the previous test.
-
- let oneOffs = getOneOffs();
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- // Pressing tab should select the first one-off without selecting suggestions.
- // now cycle through the one-off items, the first one is already selected.
- for (let i = 0; i < oneOffs.length; ++i) {
- EventUtils.synthesizeKey("VK_TAB", {});
- is(textbox.selectedButton, oneOffs[i],
- "the one-off button #" + (i + 1) + " should be selected");
- }
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, kUserValue, "the textfield value should be unmodified");
-
- // One more <tab> selects the settings button.
- EventUtils.synthesizeKey("VK_TAB", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
-
- // Pressing tab again should close the panel...
- let promise = promiseEvent(searchPopup, "popuphidden");
- EventUtils.synthesizeKey("VK_TAB", {});
- yield promise;
-
- // ... and move the focus out of the searchbox.
- isnot(Services.focus.focusedElement, textbox.inputField,
- "the search bar no longer be focused");
-});
-
-add_task(function* test_shift_tab() {
- // First reopen the panel.
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- searchbar.focus();
- yield promise;
-
- let oneOffs = getOneOffs();
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- // Press up once to select the last button.
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
-
- // Press up again to select the last one-off button.
- EventUtils.synthesizeKey("VK_UP", {});
-
- // Pressing shift+tab should cycle through the one-off items.
- for (let i = oneOffs.length - 1; i >= 0; --i) {
- is(textbox.selectedButton, oneOffs[i],
- "the one-off button #" + (i + 1) + " should be selected");
- if (i)
- EventUtils.synthesizeKey("VK_TAB", {shiftKey: true});
- }
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, kUserValue, "the textfield value should be unmodified");
-
- // Pressing shift+tab again should close the panel...
- promise = promiseEvent(searchPopup, "popuphidden");
- EventUtils.synthesizeKey("VK_TAB", {shiftKey: true});
- yield promise;
-
- // ... and move the focus out of the searchbox.
- isnot(Services.focus.focusedElement, textbox.inputField,
- "the search bar no longer be focused");
-});
-
-add_task(function* test_alt_down() {
- // First refocus the panel.
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- searchbar.focus();
- yield promise;
-
- // close the panel using the escape key.
- promise = promiseEvent(searchPopup, "popuphidden");
- EventUtils.synthesizeKey("VK_ESCAPE", {});
- yield promise;
-
- // check that alt+down opens the panel...
- promise = promiseEvent(searchPopup, "popupshown");
- EventUtils.synthesizeKey("VK_DOWN", {altKey: true});
- yield promise;
-
- // ... and does nothing else.
- ok(!textbox.selectedButton, "no one-off button should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, kUserValue, "the textfield value should be unmodified");
-
- // Pressing alt+down should select the first one-off without selecting suggestions
- // and cycle through the one-off items.
- let oneOffs = getOneOffs();
- for (let i = 0; i < oneOffs.length; ++i) {
- EventUtils.synthesizeKey("VK_DOWN", {altKey: true});
- is(textbox.selectedButton, oneOffs[i],
- "the one-off button #" + (i + 1) + " should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- }
-
- // One more alt+down keypress and nothing should be selected.
- EventUtils.synthesizeKey("VK_DOWN", {altKey: true});
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- // another one and the first one-off should be selected.
- EventUtils.synthesizeKey("VK_DOWN", {altKey: true});
- is(textbox.selectedButton, oneOffs[0],
- "the first one-off button should be selected");
-});
-
-add_task(function* test_alt_up() {
- // close the panel using the escape key.
- let promise = promiseEvent(searchPopup, "popuphidden");
- EventUtils.synthesizeKey("VK_ESCAPE", {});
- yield promise;
-
- // check that alt+up opens the panel...
- promise = promiseEvent(searchPopup, "popupshown");
- EventUtils.synthesizeKey("VK_UP", {altKey: true});
- yield promise;
-
- // ... and does nothing else.
- ok(!textbox.selectedButton, "no one-off button should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, kUserValue, "the textfield value should be unmodified");
-
- // Pressing alt+up should select the last one-off without selecting suggestions
- // and cycle up through the one-off items.
- let oneOffs = getOneOffs();
- for (let i = oneOffs.length - 1; i >= 0; --i) {
- EventUtils.synthesizeKey("VK_UP", {altKey: true});
- is(textbox.selectedButton, oneOffs[i],
- "the one-off button #" + (i + 1) + " should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- }
-
- // One more alt+down keypress and nothing should be selected.
- EventUtils.synthesizeKey("VK_UP", {altKey: true});
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- // another one and the last one-off should be selected.
- EventUtils.synthesizeKey("VK_UP", {altKey: true});
- is(textbox.selectedButton, oneOffs[oneOffs.length - 1],
- "the last one-off button should be selected");
-
- // Cleanup for the next test.
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
- EventUtils.synthesizeKey("VK_DOWN", {});
- ok(!textbox.selectedButton, "no one-off should be selected anymore");
-});
-
-add_task(function* test_tab_and_arrows() {
- // Check the initial state is as expected.
- ok(!textbox.selectedButton, "no one-off button should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, kUserValue, "the textfield value should be unmodified");
-
- // After pressing down, the first sugggestion should be selected.
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(searchPopup.selectedIndex, 0, "first suggestion should be selected");
- is(textbox.value, kValues[0], "the textfield value should have changed");
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- // After pressing tab, the first one-off should be selected,
- // and the first suggestion still selected.
- let oneOffs = getOneOffs();
- EventUtils.synthesizeKey("VK_TAB", {});
- is(textbox.selectedButton, oneOffs[0],
- "the first one-off button should be selected");
- is(searchPopup.selectedIndex, 0, "first suggestion should still be selected");
-
- // After pressing down, the second suggestion should be selected,
- // and the first one-off still selected.
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(textbox.selectedButton, oneOffs[0],
- "the first one-off button should still be selected");
- is(searchPopup.selectedIndex, 1, "second suggestion should be selected");
-
- // After pressing up, the first suggestion should be selected again,
- // and the first one-off still selected.
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton, oneOffs[0],
- "the first one-off button should still be selected");
- is(searchPopup.selectedIndex, 0, "second suggestion should be selected again");
-
- // After pressing up again, we should have no suggestion selected anymore,
- // the textfield value back to the user-typed value, and still the first one-off
- // selected.
- EventUtils.synthesizeKey("VK_UP", {});
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, kUserValue,
- "the textfield value should be back to user typed value");
- is(textbox.selectedButton, oneOffs[0],
- "the first one-off button should still be selected");
-
- // Now pressing down should select the second one-off.
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(textbox.selectedButton, oneOffs[1],
- "the second one-off button should be selected");
- is(searchPopup.selectedIndex, -1, "there should still be no selected suggestion");
-
- // Finally close the panel.
- let promise = promiseEvent(searchPopup, "popuphidden");
- searchPopup.hidePopup();
- yield promise;
-});
-
-add_task(function* test_open_search() {
- let rootDir = getRootDirectory(gTestPath);
- yield BrowserTestUtils.openNewForegroundTab(gBrowser, rootDir + "opensearch.html");
-
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- searchbar.focus();
- yield promise;
-
- let engines = getOpenSearchItems();
- is(engines.length, 2, "the opensearch.html page exposes 2 engines")
-
- // Check that there's initially no selection.
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- ok(!textbox.selectedButton, "no button should be selected");
-
- // Pressing up once selects the setting button...
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
-
- // ...and then pressing up selects open search engines.
- for (let i = engines.length; i; --i) {
- EventUtils.synthesizeKey("VK_UP", {});
- let selectedButton = textbox.selectedButton;
- is(selectedButton, engines[i - 1],
- "the engine #" + i + " should be selected");
- ok(selectedButton.classList.contains("addengine-item"),
- "the button is themed as an engine item");
- }
-
- // Pressing up again should select the last one-off button.
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton, getOneOffs().pop(),
- "the last one-off button should be selected");
-
- info("now check that the down key navigates open search items as expected");
- for (let i = 0; i < engines.length; ++i) {
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(textbox.selectedButton, engines[i],
- "the engine #" + (i + 1) + " should be selected");
- }
-
- // Pressing down on the last engine item selects the settings button.
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- searchPopup.hidePopup();
- yield promise;
-
- gBrowser.removeCurrentTab();
-});
diff --git a/browser/components/search/test/browser_searchbar_openpopup.js b/browser/components/search/test/browser_searchbar_openpopup.js
deleted file mode 100644
index befc8f142..000000000
--- a/browser/components/search/test/browser_searchbar_openpopup.js
+++ /dev/null
@@ -1,521 +0,0 @@
-// Tests that the suggestion popup appears at the right times in response to
-// focus and user events (mouse, keyboard, drop).
-
-// Instead of loading EventUtils.js into the test scope in browser-test.js for all tests,
-// we only need EventUtils.js for a few files which is why we are using loadSubScript.
-var EventUtils = {};
-this._scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
- getService(Ci.mozIJSSubScriptLoader);
-this._scriptLoader.loadSubScript("chrome://mochikit/content/tests/SimpleTest/EventUtils.js", EventUtils);
-
-const searchbar = document.getElementById("searchbar");
-const searchIcon = document.getAnonymousElementByAttribute(searchbar, "anonid", "searchbar-search-button");
-const goButton = document.getAnonymousElementByAttribute(searchbar, "anonid", "search-go-button");
-const textbox = searchbar._textbox;
-const searchPopup = document.getElementById("PopupSearchAutoComplete");
-const kValues = ["long text", "long text 2", "long text 3"];
-
-const isWindows = Services.appinfo.OS == "WINNT";
-const mouseDown = isWindows ? 2 : 1;
-const mouseUp = isWindows ? 4 : 2;
-const utils = window.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindowUtils);
-const scale = utils.screenPixelsPerCSSPixel;
-
-function* synthesizeNativeMouseClick(aElement) {
- let rect = aElement.getBoundingClientRect();
- let win = aElement.ownerGlobal;
- let x = win.mozInnerScreenX + (rect.left + rect.right) / 2;
- let y = win.mozInnerScreenY + (rect.top + rect.bottom) / 2;
-
- // Wait for the mouseup event to occur before continuing.
- return new Promise((resolve, reject) => {
- function eventOccurred(e)
- {
- aElement.removeEventListener("mouseup", eventOccurred, true);
- resolve();
- }
-
- aElement.addEventListener("mouseup", eventOccurred, true);
-
- utils.sendNativeMouseEvent(x * scale, y * scale, mouseDown, 0, null);
- utils.sendNativeMouseEvent(x * scale, y * scale, mouseUp, 0, null);
- });
-}
-
-add_task(function* init() {
- yield promiseNewEngine("testEngine.xml");
-
- // First cleanup the form history in case other tests left things there.
- yield new Promise((resolve, reject) => {
- info("cleanup the search history");
- searchbar.FormHistory.update({op: "remove", fieldname: "searchbar-history"},
- {handleCompletion: resolve,
- handleError: reject});
- });
-
- yield new Promise((resolve, reject) => {
- info("adding search history values: " + kValues);
- let ops = kValues.map(value => { return {op: "add",
- fieldname: "searchbar-history",
- value: value}
- });
- searchbar.FormHistory.update(ops, {
- handleCompletion: function() {
- registerCleanupFunction(() => {
- info("removing search history values: " + kValues);
- let ops =
- kValues.map(value => { return {op: "remove",
- fieldname: "searchbar-history",
- value: value}
- });
- searchbar.FormHistory.update(ops);
- });
- resolve();
- },
- handleError: reject
- });
- });
-});
-
-// Adds a task that shouldn't show the search suggestions popup.
-function add_no_popup_task(task) {
- add_task(function*() {
- let sawPopup = false;
- function listener() {
- sawPopup = true;
- }
-
- info("Entering test " + task.name);
- searchPopup.addEventListener("popupshowing", listener, false);
- yield Task.spawn(task);
- searchPopup.removeEventListener("popupshowing", listener, false);
- ok(!sawPopup, "Shouldn't have seen the suggestions popup");
- info("Leaving test " + task.name);
- });
-}
-
-// Simulates the full set of events for a context click
-function context_click(target) {
- for (let event of ["mousedown", "contextmenu", "mouseup"])
- EventUtils.synthesizeMouseAtCenter(target, { type: event, button: 2 });
-}
-
-// Right clicking the icon should not open the popup.
-add_no_popup_task(function* open_icon_context() {
- gURLBar.focus();
- let toolbarPopup = document.getElementById("toolbar-context-menu");
-
- let promise = promiseEvent(toolbarPopup, "popupshown");
- context_click(searchIcon);
- yield promise;
-
- promise = promiseEvent(toolbarPopup, "popuphidden");
- toolbarPopup.hidePopup();
- yield promise;
-});
-
-// With no text in the search box left clicking the icon should open the popup.
-// Clicking the icon again should hide the popup and not show it again.
-add_task(function* open_empty() {
- gURLBar.focus();
-
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Clicking icon");
- EventUtils.synthesizeMouseAtCenter(searchIcon, {});
- yield promise;
- is(searchPopup.getAttribute("showonlysettings"), "true", "Should only show the settings");
- is(textbox.mController.searchString, "", "Should be an empty search string");
-
- // By giving the textbox some text any next attempt to open the search popup
- // from the click handler will try to search for this text.
- textbox.value = "foo";
-
- promise = promiseEvent(searchPopup, "popuphidden");
-
- info("Hiding popup");
- yield synthesizeNativeMouseClick(searchIcon);
- yield promise;
-
- is(textbox.mController.searchString, "", "Should not have started to search for the new text");
-
- // Cancel the search if it started.
- if (textbox.mController.searchString != "") {
- textbox.mController.stopSearch();
- }
-
- textbox.value = "";
-});
-
-// With no text in the search box left clicking it should not open the popup.
-add_no_popup_task(function* click_doesnt_open_popup() {
- gURLBar.focus();
-
- EventUtils.synthesizeMouseAtCenter(textbox, {});
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
- is(textbox.selectionStart, 0, "Should have selected all of the text");
- is(textbox.selectionEnd, 0, "Should have selected all of the text");
-});
-
-// Left clicking in a non-empty search box when unfocused should focus it and open the popup.
-add_task(function* click_opens_popup() {
- gURLBar.focus();
- textbox.value = "foo";
-
- let promise = promiseEvent(searchPopup, "popupshown");
- EventUtils.synthesizeMouseAtCenter(textbox, {});
- yield promise;
- isnot(searchPopup.getAttribute("showonlysettings"), "true", "Should show the full popup");
-
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
- is(textbox.selectionStart, 0, "Should have selected all of the text");
- is(textbox.selectionEnd, 3, "Should have selected all of the text");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- searchPopup.hidePopup();
- yield promise;
-
- textbox.value = "";
-});
-
-// Right clicking in a non-empty search box when unfocused should open the edit context menu.
-add_no_popup_task(function* right_click_doesnt_open_popup() {
- gURLBar.focus();
- textbox.value = "foo";
-
- let contextPopup = document.getAnonymousElementByAttribute(textbox.inputField.parentNode, "anonid", "input-box-contextmenu");
- let promise = promiseEvent(contextPopup, "popupshown");
- context_click(textbox);
- yield promise;
-
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
- is(textbox.selectionStart, 0, "Should have selected all of the text");
- is(textbox.selectionEnd, 3, "Should have selected all of the text");
-
- promise = promiseEvent(contextPopup, "popuphidden");
- contextPopup.hidePopup();
- yield promise;
-
- textbox.value = "";
-});
-
-// Moving focus away from the search box should close the popup
-add_task(function* focus_change_closes_popup() {
- gURLBar.focus();
- textbox.value = "foo";
-
- let promise = promiseEvent(searchPopup, "popupshown");
- EventUtils.synthesizeMouseAtCenter(textbox, {});
- yield promise;
- isnot(searchPopup.getAttribute("showonlysettings"), "true", "Should show the full popup");
-
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
- is(textbox.selectionStart, 0, "Should have selected all of the text");
- is(textbox.selectionEnd, 3, "Should have selected all of the text");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- let promise2 = promiseEvent(searchbar, "blur");
- EventUtils.synthesizeKey("VK_TAB", { shiftKey: true });
- yield promise;
- yield promise2;
-
- textbox.value = "";
-});
-
-// Moving focus away from the search box should close the small popup
-add_task(function* focus_change_closes_small_popup() {
- gURLBar.focus();
-
- let promise = promiseEvent(searchPopup, "popupshown");
- // For some reason sending the mouse event immediately doesn't open the popup.
- SimpleTest.executeSoon(() => {
- EventUtils.synthesizeMouseAtCenter(searchIcon, {});
- });
- yield promise;
- is(searchPopup.getAttribute("showonlysettings"), "true", "Should show the small popup");
-
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- let promise2 = promiseEvent(searchbar, "blur");
- EventUtils.synthesizeKey("VK_TAB", { shiftKey: true });
- yield promise;
- yield promise2;
-});
-
-// Pressing escape should close the popup.
-add_task(function* escape_closes_popup() {
- gURLBar.focus();
- textbox.value = "foo";
-
- let promise = promiseEvent(searchPopup, "popupshown");
- EventUtils.synthesizeMouseAtCenter(textbox, {});
- yield promise;
- isnot(searchPopup.getAttribute("showonlysettings"), "true", "Should show the full popup");
-
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
- is(textbox.selectionStart, 0, "Should have selected all of the text");
- is(textbox.selectionEnd, 3, "Should have selected all of the text");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- EventUtils.synthesizeKey("VK_ESCAPE", {});
- yield promise;
-
- textbox.value = "";
-});
-
-// Pressing contextmenu should close the popup.
-add_task(function* contextmenu_closes_popup() {
- gURLBar.focus();
- textbox.value = "foo";
-
- let promise = promiseEvent(searchPopup, "popupshown");
- EventUtils.synthesizeMouseAtCenter(textbox, {});
- yield promise;
- isnot(searchPopup.getAttribute("showonlysettings"), "true", "Should show the full popup");
-
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
- is(textbox.selectionStart, 0, "Should have selected all of the text");
- is(textbox.selectionEnd, 3, "Should have selected all of the text");
-
- promise = promiseEvent(searchPopup, "popuphidden");
-
- // synthesizeKey does not work with VK_CONTEXT_MENU (bug 1127368)
- EventUtils.synthesizeMouseAtCenter(textbox, { type: "contextmenu", button: null });
-
- yield promise;
-
- let contextPopup =
- document.getAnonymousElementByAttribute(textbox.inputField.parentNode,
- "anonid", "input-box-contextmenu");
- promise = promiseEvent(contextPopup, "popuphidden");
- contextPopup.hidePopup();
- yield promise;
-
- textbox.value = "";
-});
-
-// Tabbing to the search box should open the popup if it contains text.
-add_task(function* tab_opens_popup() {
- gURLBar.focus();
- textbox.value = "foo";
-
- let promise = promiseEvent(searchPopup, "popupshown");
- EventUtils.synthesizeKey("VK_TAB", {});
- yield promise;
- isnot(searchPopup.getAttribute("showonlysettings"), "true", "Should show the full popup");
-
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
- is(textbox.selectionStart, 0, "Should have selected all of the text");
- is(textbox.selectionEnd, 3, "Should have selected all of the text");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- searchPopup.hidePopup();
- yield promise;
-
- textbox.value = "";
-});
-
-// Tabbing to the search box should not open the popup if it doesn't contain text.
-add_no_popup_task(function* tab_doesnt_open_popup() {
- gURLBar.focus();
- textbox.value = "foo";
-
- EventUtils.synthesizeKey("VK_TAB", {});
-
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
- is(textbox.selectionStart, 0, "Should have selected all of the text");
- is(textbox.selectionEnd, 3, "Should have selected all of the text");
-
- textbox.value = "";
-});
-
-// Switching back to the window when the search box has focus from mouse should not open the popup.
-add_task(function* refocus_window_doesnt_open_popup_mouse() {
- gURLBar.focus();
- textbox.value = "foo";
-
- let promise = promiseEvent(searchPopup, "popupshown");
- EventUtils.synthesizeMouseAtCenter(searchbar, {});
- yield promise;
- isnot(searchPopup.getAttribute("showonlysettings"), "true", "Should show the full popup");
-
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
- is(textbox.selectionStart, 0, "Should have selected all of the text");
- is(textbox.selectionEnd, 3, "Should have selected all of the text");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- let newWin = OpenBrowserWindow();
- yield new Promise(resolve => waitForFocus(resolve, newWin));
- yield promise;
-
- function listener() {
- ok(false, "Should not have shown the popup.");
- }
- searchPopup.addEventListener("popupshowing", listener, false);
-
- promise = promiseEvent(searchbar, "focus");
- newWin.close();
- yield promise;
-
- // Wait a few ticks to allow any focus handlers to show the popup if they are going to.
- yield new Promise(resolve => executeSoon(resolve));
- yield new Promise(resolve => executeSoon(resolve));
- yield new Promise(resolve => executeSoon(resolve));
-
- searchPopup.removeEventListener("popupshowing", listener, false);
- textbox.value = "";
-});
-
-// Switching back to the window when the search box has focus from keyboard should not open the popup.
-add_task(function* refocus_window_doesnt_open_popup_keyboard() {
- gURLBar.focus();
- textbox.value = "foo";
-
- let promise = promiseEvent(searchPopup, "popupshown");
- EventUtils.synthesizeKey("VK_TAB", {});
- yield promise;
- isnot(searchPopup.getAttribute("showonlysettings"), "true", "Should show the full popup");
-
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
- is(textbox.selectionStart, 0, "Should have selected all of the text");
- is(textbox.selectionEnd, 3, "Should have selected all of the text");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- let newWin = OpenBrowserWindow();
- yield new Promise(resolve => waitForFocus(resolve, newWin));
- yield promise;
-
- function listener() {
- ok(false, "Should not have shown the popup.");
- }
- searchPopup.addEventListener("popupshowing", listener, false);
-
- promise = promiseEvent(searchbar, "focus");
- newWin.close();
- yield promise;
-
- // Wait a few ticks to allow any focus handlers to show the popup if they are going to.
- yield new Promise(resolve => executeSoon(resolve));
- yield new Promise(resolve => executeSoon(resolve));
- yield new Promise(resolve => executeSoon(resolve));
-
- searchPopup.removeEventListener("popupshowing", listener, false);
- textbox.value = "";
-});
-
-// Clicking the search go button shouldn't open the popup
-add_no_popup_task(function* search_go_doesnt_open_popup() {
- gBrowser.selectedTab = gBrowser.addTab();
-
- gURLBar.focus();
- textbox.value = "foo";
- searchbar.updateGoButtonVisibility();
-
- let promise = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
- EventUtils.synthesizeMouseAtCenter(goButton, {});
- yield promise;
-
- textbox.value = "";
- gBrowser.removeCurrentTab();
-});
-
-// Clicks outside the search popup should close the popup but not consume the click.
-add_task(function* dont_consume_clicks() {
- gURLBar.focus();
- textbox.value = "foo";
-
- let promise = promiseEvent(searchPopup, "popupshown");
- EventUtils.synthesizeMouseAtCenter(textbox, {});
- yield promise;
- isnot(searchPopup.getAttribute("showonlysettings"), "true", "Should show the full popup");
-
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
- is(textbox.selectionStart, 0, "Should have selected all of the text");
- is(textbox.selectionEnd, 3, "Should have selected all of the text");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- yield synthesizeNativeMouseClick(gURLBar);
- yield promise;
-
- is(Services.focus.focusedElement, gURLBar.inputField, "Should have focused the URL bar");
-
- textbox.value = "";
-});
-
-// Dropping text to the searchbar should open the popup
-add_task(function* drop_opens_popup() {
- let promise = promiseEvent(searchPopup, "popupshown");
- EventUtils.synthesizeDrop(searchIcon, textbox.inputField, [[ {type: "text/plain", data: "foo" } ]], "move", window);
- yield promise;
-
- isnot(searchPopup.getAttribute("showonlysettings"), "true", "Should show the full popup");
- is(Services.focus.focusedElement, textbox.inputField, "Should have focused the search bar");
- promise = promiseEvent(searchPopup, "popuphidden");
- searchPopup.hidePopup();
- yield promise;
-
- textbox.value = "";
-});
-
-// Moving the caret using the cursor keys should not close the popup.
-add_task(function* dont_rollup_oncaretmove() {
- gURLBar.focus();
- textbox.value = "long text";
-
- let promise = promiseEvent(searchPopup, "popupshown");
- EventUtils.synthesizeMouseAtCenter(textbox, {});
- yield promise;
-
- // Deselect the text
- EventUtils.synthesizeKey("VK_RIGHT", {});
- is(textbox.selectionStart, 9, "Should have moved the caret (selectionStart after deselect right)");
- is(textbox.selectionEnd, 9, "Should have moved the caret (selectionEnd after deselect right)");
- is(searchPopup.state, "open", "Popup should still be open");
-
- EventUtils.synthesizeKey("VK_LEFT", {});
- is(textbox.selectionStart, 8, "Should have moved the caret (selectionStart after left)");
- is(textbox.selectionEnd, 8, "Should have moved the caret (selectionEnd after left)");
- is(searchPopup.state, "open", "Popup should still be open");
-
- EventUtils.synthesizeKey("VK_RIGHT", {});
- is(textbox.selectionStart, 9, "Should have moved the caret (selectionStart after right)");
- is(textbox.selectionEnd, 9, "Should have moved the caret (selectionEnd after right)");
- is(searchPopup.state, "open", "Popup should still be open");
-
- // Ensure caret movement works while a suggestion is selected.
- is(textbox.popup.selectedIndex, -1, "No selected item in list");
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(textbox.popup.selectedIndex, 0, "Selected item in list");
- is(textbox.selectionStart, 9, "Should have moved the caret to the end (selectionStart after selection)");
- is(textbox.selectionEnd, 9, "Should have moved the caret to the end (selectionEnd after selection)");
-
- EventUtils.synthesizeKey("VK_LEFT", {});
- is(textbox.selectionStart, 8, "Should have moved the caret again (selectionStart after left)");
- is(textbox.selectionEnd, 8, "Should have moved the caret again (selectionEnd after left)");
- is(searchPopup.state, "open", "Popup should still be open");
-
- EventUtils.synthesizeKey("VK_LEFT", {});
- is(textbox.selectionStart, 7, "Should have moved the caret (selectionStart after left)");
- is(textbox.selectionEnd, 7, "Should have moved the caret (selectionEnd after left)");
- is(searchPopup.state, "open", "Popup should still be open");
-
- EventUtils.synthesizeKey("VK_RIGHT", {});
- is(textbox.selectionStart, 8, "Should have moved the caret (selectionStart after right)");
- is(textbox.selectionEnd, 8, "Should have moved the caret (selectionEnd after right)");
- is(searchPopup.state, "open", "Popup should still be open");
-
- if (navigator.platform.indexOf("Mac") == -1) {
- EventUtils.synthesizeKey("VK_HOME", {});
- is(textbox.selectionStart, 0, "Should have moved the caret (selectionStart after home)");
- is(textbox.selectionEnd, 0, "Should have moved the caret (selectionEnd after home)");
- is(searchPopup.state, "open", "Popup should still be open");
- }
-
- // Close the popup again
- promise = promiseEvent(searchPopup, "popuphidden");
- EventUtils.synthesizeKey("VK_ESCAPE", {});
- yield promise;
-
- textbox.value = "";
-});
diff --git a/browser/components/search/test/browser_searchbar_smallpanel_keyboard_navigation.js b/browser/components/search/test/browser_searchbar_smallpanel_keyboard_navigation.js
deleted file mode 100644
index 37ca32cf2..000000000
--- a/browser/components/search/test/browser_searchbar_smallpanel_keyboard_navigation.js
+++ /dev/null
@@ -1,354 +0,0 @@
-// Tests that keyboard navigation in the search panel works as designed.
-
-const searchbar = document.getElementById("searchbar");
-const textbox = searchbar._textbox;
-const searchPopup = document.getElementById("PopupSearchAutoComplete");
-const oneOffsContainer =
- document.getAnonymousElementByAttribute(searchPopup, "anonid",
- "search-one-off-buttons");
-const searchIcon = document.getAnonymousElementByAttribute(searchbar, "anonid",
- "searchbar-search-button");
-
-const kValues = ["foo1", "foo2", "foo3"];
-
-function getOpenSearchItems() {
- let os = [];
-
- let addEngineList =
- document.getAnonymousElementByAttribute(oneOffsContainer, "anonid",
- "add-engines");
- for (let item = addEngineList.firstChild; item; item = item.nextSibling)
- os.push(item);
-
- return os;
-}
-
-add_task(function* init() {
- yield promiseNewEngine("testEngine.xml");
-
- // First cleanup the form history in case other tests left things there.
- yield new Promise((resolve, reject) => {
- info("cleanup the search history");
- searchbar.FormHistory.update({op: "remove", fieldname: "searchbar-history"},
- {handleCompletion: resolve,
- handleError: reject});
- });
-
- yield new Promise((resolve, reject) => {
- info("adding search history values: " + kValues);
- let ops = kValues.map(value => { return {op: "add",
- fieldname: "searchbar-history",
- value: value}
- });
- searchbar.FormHistory.update(ops, {
- handleCompletion: function() {
- registerCleanupFunction(() => {
- info("removing search history values: " + kValues);
- let ops =
- kValues.map(value => { return {op: "remove",
- fieldname: "searchbar-history",
- value: value}
- });
- searchbar.FormHistory.update(ops);
- });
- resolve();
- },
- handleError: reject
- });
- });
-});
-
-
-add_task(function* test_arrows() {
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- EventUtils.synthesizeMouseAtCenter(searchIcon, {});
- yield promise;
-info("textbox.mController.searchString = " + textbox.mController.searchString);
- is(textbox.mController.searchString, "", "The search string should be empty");
-
- // Check the initial state of the panel before sending keyboard events.
- is(searchPopup.getAttribute("showonlysettings"), "true", "Should show the small popup");
- // Having suggestions populated (but hidden) is important, because if there
- // are none we can't ensure the keyboard events don't reach them.
- is(searchPopup.view.rowCount, kValues.length, "There should be 3 suggestions");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
-
- // The tests will be less meaningful if the first, second, last, and
- // before-last one-off buttons aren't different. We should always have more
- // than 4 default engines, but it's safer to check this assumption.
- let oneOffs = getOneOffs();
- ok(oneOffs.length >= 4, "we have at least 4 one-off buttons displayed")
-
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- // Pressing should select the first one-off.
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, "", "the textfield value should be unmodified");
-
- // now cycle through the one-off items, the first one is already selected.
- for (let i = 0; i < oneOffs.length; ++i) {
- is(textbox.selectedButton, oneOffs[i],
- "the one-off button #" + (i + 1) + " should be selected");
- EventUtils.synthesizeKey("VK_DOWN", {});
- }
-
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
- EventUtils.synthesizeKey("VK_DOWN", {});
-
- // We should now be back to the initial situation.
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- info("now test the up arrow key");
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
-
- // cycle through the one-off items, the first one is already selected.
- for (let i = oneOffs.length; i; --i) {
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton, oneOffs[i - 1],
- "the one-off button #" + i + " should be selected");
- }
-
- // Another press on up should clear the one-off selection.
- EventUtils.synthesizeKey("VK_UP", {});
- ok(!textbox.selectedButton, "no one-off button should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, "", "the textfield value should be unmodified");
-});
-
-add_task(function* test_tab() {
- is(Services.focus.focusedElement, textbox.inputField,
- "the search bar should be focused"); // from the previous test.
-
- let oneOffs = getOneOffs();
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- // Pressing tab should select the first one-off without selecting suggestions.
- // now cycle through the one-off items, the first one is already selected.
- for (let i = 0; i < oneOffs.length; ++i) {
- EventUtils.synthesizeKey("VK_TAB", {});
- is(textbox.selectedButton, oneOffs[i],
- "the one-off button #" + (i + 1) + " should be selected");
- }
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, "", "the textfield value should be unmodified");
-
- // One more <tab> selects the settings button.
- EventUtils.synthesizeKey("VK_TAB", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
-
- // Pressing tab again should close the panel...
- let promise = promiseEvent(searchPopup, "popuphidden");
- EventUtils.synthesizeKey("VK_TAB", {});
- yield promise;
-
- // ... and move the focus out of the searchbox.
- isnot(Services.focus.focusedElement, textbox.inputField,
- "the search bar no longer be focused");
-});
-
-add_task(function* test_shift_tab() {
- // First reopen the panel.
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- SimpleTest.executeSoon(() => {
- EventUtils.synthesizeMouseAtCenter(searchIcon, {});
- });
- yield promise;
-
- let oneOffs = getOneOffs();
- ok(!textbox.selectedButton, "no one-off button should be selected");
- is(searchPopup.getAttribute("showonlysettings"), "true", "Should show the small popup");
-
- // Press up once to select the last button.
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
-
- // Press up again to select the last one-off button.
- EventUtils.synthesizeKey("VK_UP", {});
-
- // Pressing shift+tab should cycle through the one-off items.
- for (let i = oneOffs.length - 1; i >= 0; --i) {
- is(textbox.selectedButton, oneOffs[i],
- "the one-off button #" + (i + 1) + " should be selected");
- if (i)
- EventUtils.synthesizeKey("VK_TAB", {shiftKey: true});
- }
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, "", "the textfield value should be unmodified");
-
- // Pressing shift+tab again should close the panel...
- promise = promiseEvent(searchPopup, "popuphidden");
- EventUtils.synthesizeKey("VK_TAB", {shiftKey: true});
- yield promise;
-
- // ... and move the focus out of the searchbox.
- isnot(Services.focus.focusedElement, textbox.inputField,
- "the search bar no longer be focused");
-});
-
-add_task(function* test_alt_down() {
- // First reopen the panel.
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- SimpleTest.executeSoon(() => {
- EventUtils.synthesizeMouseAtCenter(searchIcon, {});
- });
- yield promise;
-
- // and check it's in a correct initial state.
- is(searchPopup.getAttribute("showonlysettings"), "true", "Should show the small popup");
- ok(!textbox.selectedButton, "no one-off button should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, "", "the textfield value should be unmodified");
-
- // Pressing alt+down should select the first one-off without selecting suggestions
- // and cycle through the one-off items.
- let oneOffs = getOneOffs();
- for (let i = 0; i < oneOffs.length; ++i) {
- EventUtils.synthesizeKey("VK_DOWN", {altKey: true});
- is(textbox.selectedButton, oneOffs[i],
- "the one-off button #" + (i + 1) + " should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- }
-
- // One more alt+down keypress and nothing should be selected.
- EventUtils.synthesizeKey("VK_DOWN", {altKey: true});
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- // another one and the first one-off should be selected.
- EventUtils.synthesizeKey("VK_DOWN", {altKey: true});
- is(textbox.selectedButton, oneOffs[0],
- "the first one-off button should be selected");
-
- // Clear the selection with an alt+up keypress
- EventUtils.synthesizeKey("VK_UP", {altKey: true});
- ok(!textbox.selectedButton, "no one-off button should be selected");
-});
-
-add_task(function* test_alt_up() {
- // Check the initial state of the panel
- ok(!textbox.selectedButton, "no one-off button should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, "", "the textfield value should be unmodified");
-
- // Pressing alt+up should select the last one-off without selecting suggestions
- // and cycle up through the one-off items.
- let oneOffs = getOneOffs();
- for (let i = oneOffs.length - 1; i >= 0; --i) {
- EventUtils.synthesizeKey("VK_UP", {altKey: true});
- is(textbox.selectedButton, oneOffs[i],
- "the one-off button #" + (i + 1) + " should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- }
-
- // One more alt+down keypress and nothing should be selected.
- EventUtils.synthesizeKey("VK_UP", {altKey: true});
- ok(!textbox.selectedButton, "no one-off button should be selected");
-
- // another one and the last one-off should be selected.
- EventUtils.synthesizeKey("VK_UP", {altKey: true});
- is(textbox.selectedButton, oneOffs[oneOffs.length - 1],
- "the last one-off button should be selected");
-
- // Cleanup for the next test.
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
- EventUtils.synthesizeKey("VK_DOWN", {});
- ok(!textbox.selectedButton, "no one-off should be selected anymore");
-});
-
-add_task(function* test_tab_and_arrows() {
- // Check the initial state is as expected.
- ok(!textbox.selectedButton, "no one-off button should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- is(textbox.value, "", "the textfield value should be unmodified");
-
- // After pressing down, the first one-off should be selected.
- let oneOffs = getOneOffs();
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(textbox.selectedButton, oneOffs[0],
- "the first one-off button should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
-
- // After pressing tab, the second one-off should be selected.
- EventUtils.synthesizeKey("VK_TAB", {});
- is(textbox.selectedButton, oneOffs[1],
- "the second one-off button should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
-
- // After pressing up, the first one-off should be selected again.
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton, oneOffs[0],
- "the first one-off button should be selected");
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
-
- // Finally close the panel.
- let promise = promiseEvent(searchPopup, "popuphidden");
- searchPopup.hidePopup();
- yield promise;
-});
-
-add_task(function* test_open_search() {
- let rootDir = getRootDirectory(gTestPath);
- yield BrowserTestUtils.openNewForegroundTab(gBrowser, rootDir + "opensearch.html");
-
- let promise = promiseEvent(searchPopup, "popupshown");
- info("Opening search panel");
- EventUtils.synthesizeMouseAtCenter(searchIcon, {});
- yield promise;
- is(searchPopup.getAttribute("showonlysettings"), "true", "Should show the small popup");
-
- let engines = getOpenSearchItems();
- is(engines.length, 2, "the opensearch.html page exposes 2 engines")
-
- // Check that there's initially no selection.
- is(searchPopup.selectedIndex, -1, "no suggestion should be selected");
- ok(!textbox.selectedButton, "no button should be selected");
-
- // Pressing up once selects the setting button...
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
-
- // ...and then pressing up selects open search engines.
- for (let i = engines.length; i; --i) {
- EventUtils.synthesizeKey("VK_UP", {});
- let selectedButton = textbox.selectedButton;
- is(selectedButton, engines[i - 1],
- "the engine #" + i + " should be selected");
- ok(selectedButton.classList.contains("addengine-item"),
- "the button is themed as an engine item");
- }
-
- // Pressing up again should select the last one-off button.
- EventUtils.synthesizeKey("VK_UP", {});
- is(textbox.selectedButton, getOneOffs().pop(),
- "the last one-off button should be selected");
-
- info("now check that the down key navigates open search items as expected");
- for (let i = 0; i < engines.length; ++i) {
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(textbox.selectedButton, engines[i],
- "the engine #" + (i + 1) + " should be selected");
- }
-
- // Pressing down on the last engine item selects the settings button.
- EventUtils.synthesizeKey("VK_DOWN", {});
- is(textbox.selectedButton.getAttribute("anonid"), "search-settings",
- "the settings item should be selected");
-
- promise = promiseEvent(searchPopup, "popuphidden");
- searchPopup.hidePopup();
- yield promise;
-
- gBrowser.removeCurrentTab();
-});
diff --git a/browser/components/search/test/browser_webapi.js b/browser/components/search/test/browser_webapi.js
deleted file mode 100644
index d8161ffbe..000000000
--- a/browser/components/search/test/browser_webapi.js
+++ /dev/null
@@ -1,92 +0,0 @@
-var ROOT = getRootDirectory(gTestPath).replace("chrome://mochitests/content", "http://example.com");
-const searchBundle = Services.strings.createBundle("chrome://global/locale/search/search.properties");
-const brandBundle = Services.strings.createBundle("chrome://branding/locale/brand.properties");
-const brandName = brandBundle.GetStringFromName("brandShortName");
-
-function getString(key, ...params) {
- return searchBundle.formatStringFromName(key, params, params.length);
-}
-
-function AddSearchProvider(...args) {
- return gBrowser.addTab(ROOT + "webapi.html?" + encodeURIComponent(JSON.stringify(args)));
-}
-
-function promiseDialogOpened() {
- return new Promise((resolve, reject) => {
- Services.wm.addListener({
- onOpenWindow: function(xulWin) {
- Services.wm.removeListener(this);
-
- let win = xulWin.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindow);
- waitForFocus(() => {
- if (win.location == "chrome://global/content/commonDialog.xul")
- resolve(win)
- else
- reject();
- }, win);
- }
- });
- });
-}
-
-add_task(function* test_working() {
- gBrowser.selectedTab = AddSearchProvider(ROOT + "testEngine.xml");
-
- let dialog = yield promiseDialogOpened();
- is(dialog.args.promptType, "confirmEx", "Should see the confirmation dialog.");
- is(dialog.args.text, getString("addEngineConfirmation", "Foo", "example.com"),
- "Should have seen the right install message");
- dialog.document.documentElement.cancelDialog();
-
- gBrowser.removeCurrentTab();
-});
-
-add_task(function* test_HTTP() {
- gBrowser.selectedTab = AddSearchProvider(ROOT.replace("http:", "HTTP:") + "testEngine.xml");
-
- let dialog = yield promiseDialogOpened();
- is(dialog.args.promptType, "confirmEx", "Should see the confirmation dialog.");
- is(dialog.args.text, getString("addEngineConfirmation", "Foo", "example.com"),
- "Should have seen the right install message");
- dialog.document.documentElement.cancelDialog();
-
- gBrowser.removeCurrentTab();
-});
-
-add_task(function* test_relative() {
- gBrowser.selectedTab = AddSearchProvider("testEngine.xml");
-
- let dialog = yield promiseDialogOpened();
- is(dialog.args.promptType, "confirmEx", "Should see the confirmation dialog.");
- is(dialog.args.text, getString("addEngineConfirmation", "Foo", "example.com"),
- "Should have seen the right install message");
- dialog.document.documentElement.cancelDialog();
-
- gBrowser.removeCurrentTab();
-});
-
-add_task(function* test_invalid() {
- gBrowser.selectedTab = AddSearchProvider("z://foobar");
-
- let dialog = yield promiseDialogOpened();
- is(dialog.args.promptType, "alert", "Should see the alert dialog.");
- is(dialog.args.text, getString("error_invalid_engine_msg", brandName),
- "Should have seen the right error message")
- dialog.document.documentElement.acceptDialog();
-
- gBrowser.removeCurrentTab();
-});
-
-add_task(function* test_missing() {
- let url = ROOT + "foobar.xml";
- gBrowser.selectedTab = AddSearchProvider(url);
-
- let dialog = yield promiseDialogOpened();
- is(dialog.args.promptType, "alert", "Should see the alert dialog.");
- is(dialog.args.text, getString("error_loading_engine_msg2", brandName, url),
- "Should have seen the right error message")
- dialog.document.documentElement.acceptDialog();
-
- gBrowser.removeCurrentTab();
-});
diff --git a/browser/components/search/test/browser_yahoo.js b/browser/components/search/test/browser_yahoo.js
deleted file mode 100644
index f45b47d0c..000000000
--- a/browser/components/search/test/browser_yahoo.js
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/*
- * Test Yahoo search plugin URLs
- */
-
-"use strict";
-
-const BROWSER_SEARCH_PREF = "browser.search.";
-
-function test() {
- let engine = Services.search.getEngineByName("Yahoo");
- ok(engine, "Yahoo");
-
- let base = "https://search.yahoo.com/yhs/search?p=foo&ei=UTF-8&hspart=mozilla";
- let url;
-
- // Test search URLs (including purposes).
- url = engine.getSubmission("foo").uri.spec;
- is(url, base + "&hsimp=yhs-001", "Check search URL for 'foo'");
- url = engine.getSubmission("foo", null, "searchbar").uri.spec;
- is(url, base + "&hsimp=yhs-001", "Check search bar search URL for 'foo'");
- url = engine.getSubmission("foo", null, "keyword").uri.spec;
- is(url, base + "&hsimp=yhs-002", "Check keyword search URL for 'foo'");
- url = engine.getSubmission("foo", null, "homepage").uri.spec;
- is(url, base + "&hsimp=yhs-003", "Check homepage search URL for 'foo'");
- url = engine.getSubmission("foo", null, "newtab").uri.spec;
- is(url, base + "&hsimp=yhs-004", "Check newtab search URL for 'foo'");
- url = engine.getSubmission("foo", null, "contextmenu").uri.spec;
- is(url, base + "&hsimp=yhs-005", "Check context menu search URL for 'foo'");
- url = engine.getSubmission("foo", null, "system").uri.spec;
- is(url, base + "&hsimp=yhs-007", "Check system search URL for 'foo'");
- url = engine.getSubmission("foo", null, "invalid").uri.spec;
- is(url, base + "&hsimp=yhs-001", "Check invalid URL for 'foo'");
-
- // Check search suggestion URL.
- url = engine.getSubmission("foo", "application/x-suggestions+json").uri.spec;
- is(url, "https://search.yahoo.com/sugg/ff?output=fxjson&appid=ffd&command=foo", "Check search suggestion URL for 'foo'");
-
- // Check all other engine properties.
- const EXPECTED_ENGINE = {
- name: "Yahoo",
- alias: null,
- description: "Yahoo Search",
- searchForm: "https://search.yahoo.com/yhs/search?p=&ei=UTF-8&hspart=mozilla&hsimp=yhs-001",
- hidden: false,
- wrappedJSObject: {
- queryCharset: "UTF-8",
- "_iconURL": "data:image/x-icon;base64,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",
- _urls : [
- {
- type: "application/x-suggestions+json",
- method: "GET",
- template: "https://search.yahoo.com/sugg/ff",
- params: [
- {
- name: "output",
- value: "fxjson",
- purpose: undefined,
- },
- {
- name: "appid",
- value: "ffd",
- purpose: undefined,
- },
- {
- name: "command",
- value: "{searchTerms}",
- purpose: undefined,
- },
- ],
- },
- {
- type: "text/html",
- method: "GET",
- template: "https://search.yahoo.com/yhs/search",
- params: [
- {
- name: "p",
- value: "{searchTerms}",
- purpose: undefined,
- },
- {
- name: "ei",
- value: "UTF-8",
- purpose: undefined,
- },
- {
- name: "hspart",
- value: "mozilla",
- purpose: undefined,
- },
- {
- name: "hsimp",
- value: "yhs-001",
- purpose: "searchbar",
- },
- {
- name: "hsimp",
- value: "yhs-002",
- purpose: "keyword",
- },
- {
- name: "hsimp",
- value: "yhs-003",
- purpose: "homepage",
- },
- {
- name: "hsimp",
- value: "yhs-004",
- purpose: "newtab",
- },
- {
- name: "hsimp",
- value: "yhs-005",
- purpose: "contextmenu",
- },
- {
- name: "hsimp",
- value: "yhs-007",
- purpose: "system",
- },
- ],
- mozparams: {},
- },
- ],
- },
- };
-
- isSubObjectOf(EXPECTED_ENGINE, engine, "Yahoo");
-}
diff --git a/browser/components/search/test/browser_yahoo_behavior.js b/browser/components/search/test/browser_yahoo_behavior.js
deleted file mode 100644
index 5b2d61422..000000000
--- a/browser/components/search/test/browser_yahoo_behavior.js
+++ /dev/null
@@ -1,166 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/*
- * Test Yahoo search plugin URLs
- */
-
-"use strict";
-
-const BROWSER_SEARCH_PREF = "browser.search.";
-
-
-function test() {
- let engine = Services.search.getEngineByName("Yahoo");
- ok(engine, "Yahoo is installed");
-
- let previouslySelectedEngine = Services.search.currentEngine;
- Services.search.currentEngine = engine;
- engine.alias = "y";
-
- let base = "https://search.yahoo.com/yhs/search?p=foo&ei=UTF-8&hspart=mozilla";
- let url;
-
- // Test search URLs (including purposes).
- url = engine.getSubmission("foo").uri.spec;
- is(url, base + "&hsimp=yhs-001", "Check search URL for 'foo'");
-
- waitForExplicitFinish();
-
- var gCurrTest;
- var gTests = [
- {
- name: "context menu search",
- searchURL: base + "&hsimp=yhs-005",
- run: function () {
- // Simulate a contextmenu search
- // FIXME: This is a bit "low-level"...
- BrowserSearch.loadSearch("foo", false, "contextmenu");
- }
- },
- {
- name: "keyword search",
- searchURL: base + "&hsimp=yhs-002",
- run: function () {
- gURLBar.value = "? foo";
- gURLBar.focus();
- EventUtils.synthesizeKey("VK_RETURN", {});
- }
- },
- {
- name: "keyword search with alias",
- searchURL: base + "&hsimp=yhs-002",
- run: function () {
- gURLBar.value = "y foo";
- gURLBar.focus();
- EventUtils.synthesizeKey("VK_RETURN", {});
- }
- },
- {
- name: "search bar search",
- searchURL: base + "&hsimp=yhs-001",
- run: function () {
- let sb = BrowserSearch.searchBar;
- sb.focus();
- sb.value = "foo";
- registerCleanupFunction(function () {
- sb.value = "";
- });
- EventUtils.synthesizeKey("VK_RETURN", {});
- }
- },
- {
- name: "new tab search",
- searchURL: base + "&hsimp=yhs-004",
- run: function () {
- function doSearch(doc) {
- // Re-add the listener, and perform a search
- gBrowser.addProgressListener(listener);
- doc.getElementById("newtab-search-text").value = "foo";
- doc.getElementById("newtab-search-submit").click();
- }
-
- // load about:newtab, but remove the listener first so it doesn't
- // get in the way
- gBrowser.removeProgressListener(listener);
- gBrowser.loadURI("about:newtab");
- info("Waiting for about:newtab load");
- tab.linkedBrowser.addEventListener("load", function load(event) {
- if (event.originalTarget != tab.linkedBrowser.contentDocument ||
- event.target.location.href == "about:blank") {
- info("skipping spurious load event");
- return;
- }
- tab.linkedBrowser.removeEventListener("load", load, true);
-
- // Observe page setup
- let win = gBrowser.contentWindow;
- if (win.gSearch.currentEngineName ==
- Services.search.currentEngine.name) {
- doSearch(win.document);
- }
- else {
- info("Waiting for newtab search init");
- win.addEventListener("ContentSearchService", function done(event) {
- info("Got newtab search event " + event.detail.type);
- if (event.detail.type == "State") {
- win.removeEventListener("ContentSearchService", done);
- // Let gSearch respond to the event before continuing.
- executeSoon(() => doSearch(win.document));
- }
- });
- }
- }, true);
- }
- }
- ];
-
- function nextTest() {
- if (gTests.length) {
- gCurrTest = gTests.shift();
- info("Running : " + gCurrTest.name);
- executeSoon(gCurrTest.run);
- } else {
- finish();
- }
- }
-
- let tab = gBrowser.selectedTab = gBrowser.addTab();
-
- let listener = {
- onStateChange: function onStateChange(webProgress, req, flags, status) {
- info("onStateChange");
- // Only care about top-level document starts
- let docStart = Ci.nsIWebProgressListener.STATE_IS_DOCUMENT |
- Ci.nsIWebProgressListener.STATE_START;
- if (!(flags & docStart) || !webProgress.isTopLevel)
- return;
-
- if (req.originalURI.spec == "about:blank")
- return;
-
- info("received document start");
-
- ok(req instanceof Ci.nsIChannel, "req is a channel");
- is(req.originalURI.spec, gCurrTest.searchURL, "search URL was loaded");
- info("Actual URI: " + req.URI.spec);
-
- req.cancel(Components.results.NS_ERROR_FAILURE);
-
- executeSoon(nextTest);
- }
- }
-
- registerCleanupFunction(function () {
- engine.alias = undefined;
- gBrowser.removeProgressListener(listener);
- gBrowser.removeTab(tab);
- Services.search.currentEngine = previouslySelectedEngine;
- });
-
- tab.linkedBrowser.addEventListener("load", function load() {
- tab.linkedBrowser.removeEventListener("load", load, true);
- gBrowser.addProgressListener(listener);
- nextTest();
- }, true);
-}
diff --git a/browser/components/search/test/head.js b/browser/components/search/test/head.js
deleted file mode 100644
index de27b5e1e..000000000
--- a/browser/components/search/test/head.js
+++ /dev/null
@@ -1,156 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-Cu.import("resource://gre/modules/Promise.jsm");
-
-/**
- * Recursively compare two objects and check that every property of expectedObj has the same value
- * on actualObj.
- */
-function isSubObjectOf(expectedObj, actualObj, name) {
- for (let prop in expectedObj) {
- if (typeof expectedObj[prop] == 'function')
- continue;
- if (expectedObj[prop] instanceof Object) {
- is(actualObj[prop].length, expectedObj[prop].length, name + "[" + prop + "]");
- isSubObjectOf(expectedObj[prop], actualObj[prop], name + "[" + prop + "]");
- } else {
- is(actualObj[prop], expectedObj[prop], name + "[" + prop + "]");
- }
- }
-}
-
-function getLocale() {
- const localePref = "general.useragent.locale";
- return getLocalizedPref(localePref, Services.prefs.getCharPref(localePref));
-}
-
-/**
- * Wrapper for nsIPrefBranch::getComplexValue.
- * @param aPrefName
- * The name of the pref to get.
- * @returns aDefault if the requested pref doesn't exist.
- */
-function getLocalizedPref(aPrefName, aDefault) {
- try {
- return Services.prefs.getComplexValue(aPrefName, Ci.nsIPrefLocalizedString).data;
- } catch (ex) {
- return aDefault;
- }
-}
-
-function promiseEvent(aTarget, aEventName, aPreventDefault) {
- function cancelEvent(event) {
- if (aPreventDefault) {
- event.preventDefault();
- }
-
- return true;
- }
-
- return BrowserTestUtils.waitForEvent(aTarget, aEventName, false, cancelEvent);
-}
-
-/**
- * Adds a new search engine to the search service and confirms it completes.
- *
- * @param {String} basename The file to load that contains the search engine
- * details.
- * @param {Object} [options] Options for the test:
- * - {String} [iconURL] The icon to use for the search engine.
- * - {Boolean} [setAsCurrent] Whether to set the new engine to be the
- * current engine or not.
- * - {String} [testPath] Used to override the current test path if this
- * file is used from a different directory.
- * @returns {Promise} The promise is resolved once the engine is added, or
- * rejected if the addition failed.
- */
-function promiseNewEngine(basename, options = {}) {
- return new Promise((resolve, reject) => {
- // Default the setAsCurrent option to true.
- let setAsCurrent =
- options.setAsCurrent == undefined ? true : options.setAsCurrent;
- info("Waiting for engine to be added: " + basename);
- Services.search.init({
- onInitComplete: function() {
- let url = getRootDirectory(options.testPath || gTestPath) + basename;
- let current = Services.search.currentEngine;
- Services.search.addEngine(url, null, options.iconURL || "", false, {
- onSuccess: function (engine) {
- info("Search engine added: " + basename);
- if (setAsCurrent) {
- Services.search.currentEngine = engine;
- }
- registerCleanupFunction(() => {
- if (setAsCurrent) {
- Services.search.currentEngine = current;
- }
- Services.search.removeEngine(engine);
- info("Search engine removed: " + basename);
- });
- resolve(engine);
- },
- onError: function (errCode) {
- ok(false, "addEngine failed with error code " + errCode);
- reject();
- }
- });
- }
- });
- });
-}
-
-/**
- * Waits for a load (or custom) event to finish in a given tab. If provided
- * load an uri into the tab.
- *
- * @param tab
- * The tab to load into.
- * @param [optional] url
- * The url to load, or the current url.
- * @return {Promise} resolved when the event is handled.
- * @resolves to the received event
- * @rejects if a valid load event is not received within a meaningful interval
- */
-function promiseTabLoadEvent(tab, url)
-{
- info("Wait tab event: load");
-
- function handle(loadedUrl) {
- if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) {
- info(`Skipping spurious load event for ${loadedUrl}`);
- return false;
- }
-
- info("Tab event received: load");
- return true;
- }
-
- let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle);
-
- if (url)
- BrowserTestUtils.loadURI(tab.linkedBrowser, url);
-
- return loaded;
-}
-
-// Get an array of the one-off buttons.
-function getOneOffs() {
- let oneOffs = [];
- let searchPopup = document.getElementById("PopupSearchAutoComplete");
- let oneOffsContainer =
- document.getAnonymousElementByAttribute(searchPopup, "anonid",
- "search-one-off-buttons");
- let oneOff =
- document.getAnonymousElementByAttribute(oneOffsContainer, "anonid",
- "search-panel-one-offs");
- for (oneOff = oneOff.firstChild; oneOff; oneOff = oneOff.nextSibling) {
- if (oneOff.nodeType == Node.ELEMENT_NODE) {
- if (oneOff.classList.contains("dummy") ||
- oneOff.classList.contains("search-setting-button-compact"))
- break;
- oneOffs.push(oneOff);
- }
- }
- return oneOffs;
-}
diff --git a/browser/components/search/test/opensearch.html b/browser/components/search/test/opensearch.html
deleted file mode 100644
index f4c0cc98e..000000000
--- a/browser/components/search/test/opensearch.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="UTF-8">
-<link rel="search" type="application/opensearchdescription+xml" title="engine1" href="http://mochi.test:8888/browser/browser/components/search/test/testEngine.xml">
-<link rel="search" type="application/opensearchdescription+xml" title="engine2" href="http://mochi.test:8888/browser/browser/components/search/test/testEngine_mozsearch.xml">
-</head>
-<body></body>
-</html>
diff --git a/browser/components/search/test/test.html b/browser/components/search/test/test.html
deleted file mode 100644
index a39bece4f..000000000
--- a/browser/components/search/test/test.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8" />
- <title>Bug 426329</title>
-</head>
-<body></body>
-</html>
diff --git a/browser/components/search/test/testEngine.xml b/browser/components/search/test/testEngine.xml
deleted file mode 100644
index 21ddc4b9a..000000000
--- a/browser/components/search/test/testEngine.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
- xmlns:moz="http://www.mozilla.org/2006/browser/search/">
- <ShortName>Foo</ShortName>
- <Description>Foo Search</Description>
- <InputEncoding>utf-8</InputEncoding>
- <Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABGklEQVQoz2NgGB6AnZ1dUlJSXl4eSDIyMhLW4Ovr%2B%2Fr168uXL69Zs4YoG%2BLi4i5dusTExMTGxsbNzd3f37937976%2BnpmZmagbHR09J49e5YvX66kpATVEBYW9ubNm2nTphkbG7e2tp44cQLIuHfvXm5urpaWFlDKysqqu7v73LlzECMYIiIiHj58mJCQoKKicvXq1bS0NKBgW1vbjh074uPjgeqAXE1NzSdPnvDz84M0AEUvXLgAsW379u1z5swBen3jxo2zZ892cHB4%2BvQp0KlAfwI1cHJyghQFBwfv2rULokFXV%2FfixYu7d%2B8GGqGgoMDKyrpu3br9%2B%2FcDuXl5eVA%2FAEWBfoWHAdAYoNuAYQ0XAeoUERFhGDYAAPoUaT2dfWJuAAAAAElFTkSuQmCC</Image>
- <Url type="text/html" method="GET" template="http://mochi.test:8888/browser/browser/components/search/test/?search">
- <Param name="test" value="{searchTerms}"/>
- </Url>
- <moz:SearchForm>http://mochi.test:8888/browser/browser/components/search/test/</moz:SearchForm>
- <moz:Alias>fooalias</moz:Alias>
-</OpenSearchDescription>
diff --git a/browser/components/search/test/testEngine_diacritics.xml b/browser/components/search/test/testEngine_diacritics.xml
deleted file mode 100644
index 0744921eb..000000000
--- a/browser/components/search/test/testEngine_diacritics.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
- xmlns:moz="http://www.mozilla.org/2006/browser/search/">
- <ShortName>Foo &#9825;</ShortName>
- <Description>Engine whose ShortName contains non-BMP Unicode characters</Description>
- <InputEncoding>utf-8</InputEncoding>
- <Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABGklEQVQoz2NgGB6AnZ1dUlJSXl4eSDIyMhLW4Ovr%2B%2Fr168uXL69Zs4YoG%2BLi4i5dusTExMTGxsbNzd3f37937976%2BnpmZmagbHR09J49e5YvX66kpATVEBYW9ubNm2nTphkbG7e2tp44cQLIuHfvXm5urpaWFlDKysqqu7v73LlzECMYIiIiHj58mJCQoKKicvXq1bS0NKBgW1vbjh074uPjgeqAXE1NzSdPnvDz84M0AEUvXLgAsW379u1z5swBen3jxo2zZ892cHB4%2BvQp0KlAfwI1cHJyghQFBwfv2rULokFXV%2FfixYu7d%2B8GGqGgoMDKyrpu3br9%2B%2FcDuXl5eVA%2FAEWBfoWHAdAYoNuAYQ0XAeoUERFhGDYAAPoUaT2dfWJuAAAAAElFTkSuQmCC</Image>
- <Url type="text/html" method="GET" template="http://mochi.test:8888/browser/browser/components/search/test/?search">
- <Param name="test" value="{searchTerms}"/>
- </Url>
- <moz:SearchForm>http://mochi.test:8888/browser/browser/components/search/test/</moz:SearchForm>
- <moz:Alias>diacriticalias</moz:Alias>
-</OpenSearchDescription>
diff --git a/browser/components/search/test/testEngine_dupe.xml b/browser/components/search/test/testEngine_dupe.xml
deleted file mode 100644
index d2db580c4..000000000
--- a/browser/components/search/test/testEngine_dupe.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
- xmlns:moz="http://www.mozilla.org/2006/browser/search/">
- <ShortName>FooDupe</ShortName>
- <Description>Second Engine Search</Description>
- <InputEncoding>utf-8</InputEncoding>
- <Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABGklEQVQoz2NgGB6AnZ1dUlJSXl4eSDIyMhLW4Ovr%2B%2Fr168uXL69Zs4YoG%2BLi4i5dusTExMTGxsbNzd3f37937976%2BnpmZmagbHR09J49e5YvX66kpATVEBYW9ubNm2nTphkbG7e2tp44cQLIuHfvXm5urpaWFlDKysqqu7v73LlzECMYIiIiHj58mJCQoKKicvXq1bS0NKBgW1vbjh074uPjgeqAXE1NzSdPnvDz84M0AEUvXLgAsW379u1z5swBen3jxo2zZ892cHB4%2BvQp0KlAfwI1cHJyghQFBwfv2rULokFXV%2FfixYu7d%2B8GGqGgoMDKyrpu3br9%2B%2FcDuXl5eVA%2FAEWBfoWHAdAYoNuAYQ0XAeoUERFhGDYAAPoUaT2dfWJuAAAAAElFTkSuQmCC</Image>
- <Url type="text/html" method="GET" template="http://mochi.test:8888/browser/browser/components/search/test/?search">
- <Param name="test" value="{searchTerms}"/>
- </Url>
- <moz:SearchForm>http://mochi.test:8888/browser/browser/components/search/test/</moz:SearchForm>
- <moz:Alias>secondalias</moz:Alias>
-</OpenSearchDescription>
diff --git a/browser/components/search/test/testEngine_mozsearch.xml b/browser/components/search/test/testEngine_mozsearch.xml
deleted file mode 100644
index 9b4c02a0c..000000000
--- a/browser/components/search/test/testEngine_mozsearch.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
- <ShortName>Foo</ShortName>
- <Description>Foo Search</Description>
- <InputEncoding>utf-8</InputEncoding>
- <Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABGklEQVQoz2NgGB6AnZ1dUlJSXl4eSDIyMhLW4Ovr%2B%2Fr168uXL69Zs4YoG%2BLi4i5dusTExMTGxsbNzd3f37937976%2BnpmZmagbHR09J49e5YvX66kpATVEBYW9ubNm2nTphkbG7e2tp44cQLIuHfvXm5urpaWFlDKysqqu7v73LlzECMYIiIiHj58mJCQoKKicvXq1bS0NKBgW1vbjh074uPjgeqAXE1NzSdPnvDz84M0AEUvXLgAsW379u1z5swBen3jxo2zZ892cHB4%2BvQp0KlAfwI1cHJyghQFBwfv2rULokFXV%2FfixYu7d%2B8GGqGgoMDKyrpu3br9%2B%2FcDuXl5eVA%2FAEWBfoWHAdAYoNuAYQ0XAeoUERFhGDYAAPoUaT2dfWJuAAAAAElFTkSuQmCC</Image>
- <Url type="application/x-suggestions+json" method="GET" template="http://mochi.test:8888/browser/browser/components/search/test/?suggestions&amp;locale={moz:locale}&amp;test={searchTerms}"/>
- <Url type="text/html" method="GET" template="http://mochi.test:8888/browser/browser/components/search/test/">
- <Param name="test" value="{searchTerms}"/>
- <Param name="ie" value="utf-8"/>
- <MozParam name="channel" condition="purpose" purpose="keyword" value="keywordsearch"/>
- <MozParam name="channel" condition="purpose" purpose="contextmenu" value="contextsearch"/>
- </Url>
- <SearchForm>http://mochi.test:8888/browser/browser/components/search/test/</SearchForm>
-</SearchPlugin>
diff --git a/browser/components/search/test/webapi.html b/browser/components/search/test/webapi.html
deleted file mode 100644
index 1ef38b895..000000000
--- a/browser/components/search/test/webapi.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-<head>
-<script>
-function installEngine() {
- var query = window.location.search.substring(1);
- var args = JSON.parse(decodeURIComponent(query));
-
- window.external.AddSearchProvider(...args);
-}
-</script>
-</head>
-<body onload="installEngine()">
-</body>
-</html>