toolkit/components/search/tests/xpcshell/test_addEngine_callback.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* Any copyright is dedicated to the Public Domain.
     2  *    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 /*
     5  * Tests covering nsIBrowserSearchService::addEngine's optional callback.
     6  */
     8 "use strict";
    10 const Ci = Components.interfaces;
    11 let gHttpServer;
    12 let gBaseUrl;
    14 Components.utils.import("resource://testing-common/httpd.js");
    16 // Override the prompt service and nsIPrompt, since the search service currently
    17 // prompts in response to certain installation failures we test here
    18 // XXX this should disappear once bug 863474 is fixed
    19 function replaceService(contractID, component) {
    20   let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
    21   let cid = registrar.contractIDToCID(contractID);
    23   let oldFactory = Components.manager.getClassObject(Components.classes[contractID],
    24                                                      Ci.nsIFactory);
    25   registrar.unregisterFactory(cid, oldFactory);
    27   let factory = {
    28     createInstance: function(aOuter, aIid) {
    29       if (aOuter != null)
    30         throw Components.results.NS_ERROR_NO_AGGREGATION;
    31       return component.QueryInterface(aIid);
    32     }
    33   };
    35   registrar.registerFactory(cid, "", contractID, factory);
    36 }
    37 // Only need to stub the methods actually called by nsSearchService
    38 let promptService = {
    39   QueryInterface: XPCOMUtils.generateQI([Ci.nsIPromptService]),
    40   confirmEx: function() {}
    41 };
    42 let prompt = {
    43   QueryInterface: XPCOMUtils.generateQI([Ci.nsIPrompt]),
    44   alert: function() {}
    45 };
    46 replaceService("@mozilla.org/embedcomp/prompt-service;1", promptService);
    47 replaceService("@mozilla.org/prompter;1", prompt);
    50 // First test inits the search service
    51 add_test(function init_search_service() {
    52   Services.search.init(function (status) {
    53     if (!Components.isSuccessCode(status))
    54       do_throw("Failed to initialize search service");
    56     run_next_test();
    57   });
    58 });
    60 // Simple test of the search callback
    61 add_test(function simple_callback_test() {
    62   let searchCallback = {
    63     onSuccess: function (engine) {
    64       do_check_true(!!engine);
    65       do_check_neq(engine.name, Services.search.defaultEngine.name);
    66       run_next_test();
    67     },
    68     onError: function (errorCode) {
    69       do_throw("search callback returned error: " + errorCode);
    70     }
    71   }
    72   Services.search.addEngine(gBaseUrl + "/data/engine.xml",
    73                             Ci.nsISearchEngine.DATA_XML,
    74                             null, false, searchCallback);
    75 });
    77 // Test of the search callback on duplicate engine failures
    78 add_test(function duplicate_failure_test() {
    79   let searchCallback = {
    80     onSuccess: function (engine) {
    81       do_throw("this addition should not have succeeded");
    82     },
    83     onError: function (errorCode) {
    84       do_check_true(!!errorCode);
    85       do_check_eq(errorCode, Ci.nsISearchInstallCallback.ERROR_DUPLICATE_ENGINE);
    86       run_next_test();
    87     }
    88   }
    89   // Re-add the same engine added in the previous test
    90   Services.search.addEngine(gBaseUrl + "/data/engine.xml",
    91                             Ci.nsISearchEngine.DATA_XML,
    92                             null, false, searchCallback);
    93 });
    95 // Test of the search callback on failure to load the engine failures
    96 add_test(function load_failure_test() {
    97   let searchCallback = {
    98     onSuccess: function (engine) {
    99       do_throw("this addition should not have succeeded");
   100     },
   101     onError: function (errorCode) {
   102       do_check_true(!!errorCode);
   103       do_check_eq(errorCode, Ci.nsISearchInstallCallback.ERROR_UNKNOWN_FAILURE);
   104       run_next_test();
   105     }
   106   }
   107   // Try adding an engine that doesn't exist
   108   Services.search.addEngine("http://invalid/data/engine.xml",
   109                             Ci.nsISearchEngine.DATA_XML,
   110                             null, false, searchCallback);
   111 });
   113 function run_test() {
   114   updateAppInfo();
   116   gHttpServer = new HttpServer();
   117   gHttpServer.start(-1);
   118   gHttpServer.registerDirectory("/", do_get_cwd());
   119   gBaseUrl = "http://localhost:" + gHttpServer.identity.primaryPort;
   121   do_register_cleanup(function cleanup() {
   122     gHttpServer.stop(function() {});
   123   });
   125   run_next_test();
   126 }

mercurial