browser/components/search/test/browser_google_behavior.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/ */
     4 /*
     5  * Test Google search plugin URLs
     6  */
     8 "use strict";
    10 const BROWSER_SEARCH_PREF      = "browser.search.";
    12 const MOZ_PARAM_LOCALE         = /\{moz:locale\}/g;
    13 const MOZ_PARAM_DIST_ID        = /\{moz:distributionID\}/g;
    14 const MOZ_PARAM_OFFICIAL       = /\{moz:official\}/g;
    16 let runtime = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime);
    17 // Custom search parameters
    18 const MOZ_OFFICIAL = runtime.isOfficialBranding ? "official" : "unofficial";
    20 var google_client;
    21 switch (runtime.defaultUpdateChannel) {
    22 case "beta":
    23   google_client = "firefox-beta";
    24   break;
    25 case "aurora":
    26   google_client = "firefox-aurora";
    27   break;
    28 case "nightly":
    29   google_client = "firefox-nightly";
    30   break;
    31 default:
    32   google_client = "firefox-a";
    33   break;
    34 }
    36 const GOOGLE_CLIENT = google_client;
    37 const MOZ_DISTRIBUTION_ID = runtime.distributionID;
    39 function test() {
    40   let engine = Services.search.getEngineByName("Google");
    41   ok(engine, "Google is installed");
    43   is(Services.search.defaultEngine, engine, "Check that Google is the default search engine");
    45   let distributionID;
    46   try {
    47     distributionID = Services.prefs.getCharPref(BROWSER_SEARCH_PREF + "distributionID");
    48   } catch (ex) {
    49     distributionID = MOZ_DISTRIBUTION_ID;
    50   }
    52   let base = "https://www.google.com/search?q=foo&ie=utf-8&oe=utf-8&aq=t&rls={moz:distributionID}:{moz:locale}:{moz:official}&client=" + GOOGLE_CLIENT;
    53   base = base.replace(MOZ_PARAM_LOCALE, getLocale());
    54   base = base.replace(MOZ_PARAM_DIST_ID, distributionID);
    55   base = base.replace(MOZ_PARAM_OFFICIAL, MOZ_OFFICIAL);
    57   let url;
    59   // Test search URLs (including purposes).
    60   url = engine.getSubmission("foo").uri.spec;
    61   is(url, base, "Check search URL for 'foo'");
    63   waitForExplicitFinish();
    65   var gCurrTest;
    66   var gTests = [
    67     {
    68       name: "context menu search",
    69       searchURL: base + "&channel=rcs",
    70       run: function () {
    71         // Simulate a contextmenu search
    72         // FIXME: This is a bit "low-level"...
    73         BrowserSearch.loadSearch("foo", false, "contextmenu");
    74       }
    75     },
    76     {
    77       name: "keyword search",
    78       searchURL: base + "&channel=fflb",
    79       run: function () {
    80         gURLBar.value = "? foo";
    81         gURLBar.focus();
    82         EventUtils.synthesizeKey("VK_RETURN", {});
    83       }
    84     },
    85     {
    86       name: "search bar search",
    87       searchURL: base + "&channel=sb",
    88       run: function () {
    89         let sb = BrowserSearch.searchBar;
    90         sb.focus();
    91         sb.value = "foo";
    92         registerCleanupFunction(function () {
    93           sb.value = "";
    94         });
    95         EventUtils.synthesizeKey("VK_RETURN", {});
    96       }
    97     },
    98     {
    99       name: "new tab search",
   100       searchURL: base + "&channel=nts",
   101       run: function () {
   102         function doSearch(doc) {
   103           // Re-add the listener, and perform a search
   104           gBrowser.addProgressListener(listener);
   105           doc.getElementById("newtab-search-text").value = "foo";
   106           doc.getElementById("newtab-search-submit").click();
   107         }
   109         // load about:newtab, but remove the listener first so it doesn't
   110         // get in the way
   111         gBrowser.removeProgressListener(listener);
   112         gBrowser.loadURI("about:newtab");
   113         info("Waiting for about:newtab load");
   114         tab.linkedBrowser.addEventListener("load", function load(event) {
   115           if (event.originalTarget != tab.linkedBrowser.contentDocument ||
   116               event.target.location.href == "about:blank") {
   117             info("skipping spurious load event");
   118             return;
   119           }
   120           tab.linkedBrowser.removeEventListener("load", load, true);
   122           // Observe page setup
   123           let win = gBrowser.contentWindow;
   124           if (win.gSearch.currentEngineName ==
   125               Services.search.currentEngine.name) {
   126             doSearch(win.document);
   127           }
   128           else {
   129             info("Waiting for newtab search init");
   130             win.addEventListener("ContentSearchService", function done(event) {
   131               info("Got newtab search event " + event.detail.type);
   132               if (event.detail.type == "State") {
   133                 win.removeEventListener("ContentSearchService", done);
   134                 // Let gSearch respond to the event before continuing.
   135                 executeSoon(() => doSearch(win.document));
   136               }
   137             });
   138           }
   139         }, true);
   140       }
   141     },
   142     {
   143       name: "home page search",
   144       searchURL: base + "&channel=np&source=hp",
   145       run: function () {
   146         // Bug 992270: Ignore uncaught about:home exceptions (related to snippets from IndexedDB)
   147         ignoreAllUncaughtExceptions(true);
   149         // load about:home, but remove the listener first so it doesn't
   150         // get in the way
   151         gBrowser.removeProgressListener(listener);
   152         gBrowser.loadURI("about:home");
   153         info("Waiting for about:home load");
   154         tab.linkedBrowser.addEventListener("load", function load(event) {
   155           if (event.originalTarget != tab.linkedBrowser.contentDocument ||
   156               event.target.location.href == "about:blank") {
   157             info("skipping spurious load event");
   158             return;
   159           }
   160           tab.linkedBrowser.removeEventListener("load", load, true);
   162           // Observe page setup
   163           let doc = gBrowser.contentDocument;
   164           let mutationObserver = new MutationObserver(function (mutations) {
   165             for (let mutation of mutations) {
   166               if (mutation.attributeName == "searchEngineName") {
   167                 // Re-add the listener, and perform a search
   168                 gBrowser.addProgressListener(listener);
   169                 doc.getElementById("searchText").value = "foo";
   170                 doc.getElementById("searchSubmit").click();
   171               }
   172             }
   173           });
   174           mutationObserver.observe(doc.documentElement, { attributes: true });
   175         }, true);
   176       }
   177     }
   178   ];
   180   function nextTest() {
   181     // Make sure we listen again for uncaught exceptions in the next test or cleanup.
   182     ignoreAllUncaughtExceptions(false);
   184     if (gTests.length) {
   185       gCurrTest = gTests.shift();
   186       info("Running : " + gCurrTest.name);
   187       executeSoon(gCurrTest.run);
   188     } else {
   189       finish();
   190     }
   191   }
   193   let tab = gBrowser.selectedTab = gBrowser.addTab();
   195   let listener = {
   196     onStateChange: function onStateChange(webProgress, req, flags, status) {
   197       info("onStateChange");
   198       // Only care about top-level document starts
   199       let docStart = Ci.nsIWebProgressListener.STATE_IS_DOCUMENT |
   200                      Ci.nsIWebProgressListener.STATE_START;
   201       if (!(flags & docStart) || !webProgress.isTopLevel)
   202         return;
   204       info("received document start");
   206       ok(req instanceof Ci.nsIChannel, "req is a channel");
   207       is(req.originalURI.spec, gCurrTest.searchURL, "search URL was loaded");
   208       info("Actual URI: " + req.URI.spec);
   210       req.cancel(Components.results.NS_ERROR_FAILURE);
   212       executeSoon(nextTest);
   213     }
   214   }
   216   registerCleanupFunction(function () {
   217     gBrowser.removeProgressListener(listener);
   218     gBrowser.removeTab(tab);
   219   });
   221   tab.linkedBrowser.addEventListener("load", function load() {
   222     tab.linkedBrowser.removeEventListener("load", load, true);
   223     gBrowser.addProgressListener(listener);
   224     nextTest();
   225   }, true);
   226 }

mercurial