summaryrefslogtreecommitdiffstats
path: root/browser/components/search/test/browser_abouthome_behavior.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/search/test/browser_abouthome_behavior.js')
-rw-r--r--browser/components/search/test/browser_abouthome_behavior.js144
1 files changed, 144 insertions, 0 deletions
diff --git a/browser/components/search/test/browser_abouthome_behavior.js b/browser/components/search/test/browser_abouthome_behavior.js
new file mode 100644
index 000000000..3291b41f4
--- /dev/null
+++ b/browser/components/search/test/browser_abouthome_behavior.js
@@ -0,0 +1,144 @@
+/* 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);
+}