browser/base/content/test/general/browser_bug356571.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/browser/base/content/test/general/browser_bug356571.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,91 @@
     1.4 +// Bug 356571 - loadOneOrMoreURIs gives up if one of the URLs has an unknown protocol
     1.5 +
     1.6 +const Cr = Components.results;
     1.7 +const Cm = Components.manager;
     1.8 +
     1.9 +// Set to true when docShell alerts for unknown protocol error
    1.10 +var didFail = false;
    1.11 +
    1.12 +// Override Alert to avoid blocking the test due to unknown protocol error
    1.13 +const kPromptServiceUUID = "{6cc9c9fe-bc0b-432b-a410-253ef8bcc699}";
    1.14 +const kPromptServiceContractID = "@mozilla.org/embedcomp/prompt-service;1";
    1.15 +
    1.16 +// Save original prompt service factory
    1.17 +const kPromptServiceFactory = Cm.getClassObject(Cc[kPromptServiceContractID],
    1.18 +                                                Ci.nsIFactory);
    1.19 +
    1.20 +let fakePromptServiceFactory = {
    1.21 +  createInstance: function(aOuter, aIid) {
    1.22 +    if (aOuter != null)
    1.23 +      throw Cr.NS_ERROR_NO_AGGREGATION;
    1.24 +    return promptService.QueryInterface(aIid);
    1.25 +  }
    1.26 +};
    1.27 +
    1.28 +let promptService = {
    1.29 +  QueryInterface: XPCOMUtils.generateQI([Ci.nsIPromptService]),
    1.30 +  alert: function() {
    1.31 +    didFail = true;
    1.32 +  }
    1.33 +};
    1.34 +
    1.35 +/* FIXME
    1.36 +Cm.QueryInterface(Ci.nsIComponentRegistrar)
    1.37 +  .registerFactory(Components.ID(kPromptServiceUUID), "Prompt Service",
    1.38 +                   kPromptServiceContractID, fakePromptServiceFactory);
    1.39 +*/
    1.40 +
    1.41 +const kCompleteState = Ci.nsIWebProgressListener.STATE_STOP +
    1.42 +                       Ci.nsIWebProgressListener.STATE_IS_NETWORK;
    1.43 +
    1.44 +const kDummyPage = "http://example.org/browser/browser/base/content/test/general/dummy_page.html";
    1.45 +const kURIs = [
    1.46 +  "bad://www.mozilla.org/",
    1.47 +  kDummyPage,
    1.48 +  kDummyPage,
    1.49 +];
    1.50 +
    1.51 +var gProgressListener = {
    1.52 +  _runCount: 0,
    1.53 +  onStateChange: function (aBrowser, aWebProgress, aRequest, aStateFlags, aStatus) {
    1.54 +    if ((aStateFlags & kCompleteState) == kCompleteState) {
    1.55 +      if (++this._runCount != kURIs.length)
    1.56 +        return;
    1.57 +      // Check we failed on unknown protocol (received an alert from docShell)
    1.58 +      ok(didFail, "Correctly failed on unknown protocol");
    1.59 +      // Check we opened all tabs
    1.60 +      ok(gBrowser.tabs.length == kURIs.length, "Correctly opened all expected tabs");
    1.61 +      finishTest();
    1.62 +    }
    1.63 +  }
    1.64 +}
    1.65 +
    1.66 +function test() {
    1.67 +  todo(false, "temp. disabled");
    1.68 +  return; /* FIXME */
    1.69 +  waitForExplicitFinish();
    1.70 +  // Wait for all tabs to finish loading
    1.71 +  gBrowser.addTabsProgressListener(gProgressListener);
    1.72 +  loadOneOrMoreURIs(kURIs.join("|"));
    1.73 +}
    1.74 +
    1.75 +function finishTest() {
    1.76 +  // Unregister the factory so we do not leak
    1.77 +  Cm.QueryInterface(Ci.nsIComponentRegistrar)
    1.78 +    .unregisterFactory(Components.ID(kPromptServiceUUID),
    1.79 +                       fakePromptServiceFactory);
    1.80 +
    1.81 +  // Restore the original factory
    1.82 +  Cm.QueryInterface(Ci.nsIComponentRegistrar)
    1.83 +    .registerFactory(Components.ID(kPromptServiceUUID), "Prompt Service",
    1.84 +                     kPromptServiceContractID, kPromptServiceFactory);
    1.85 +
    1.86 +  // Remove the listener
    1.87 +  gBrowser.removeTabsProgressListener(gProgressListener);
    1.88 +
    1.89 +  // Close opened tabs
    1.90 +  for (var i = gBrowser.tabs.length-1; i > 0; i--)
    1.91 +    gBrowser.removeTab(gBrowser.tabs[i]);
    1.92 +
    1.93 +  finish();
    1.94 +}

mercurial