tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

browser_bug356571.js (2791B)


      1 // Bug 356571 - loadOneOrMoreURIs gives up if one of the URLs has an unknown protocol
      2 
      3 var Cm = Components.manager;
      4 
      5 // Set to true when docShell alerts for unknown protocol error
      6 var didFail = false;
      7 
      8 // Override Alert to avoid blocking the test due to unknown protocol error
      9 const kPromptServiceUUID = "{6cc9c9fe-bc0b-432b-a410-253ef8bcc699}";
     10 const kPromptServiceContractID = "@mozilla.org/prompter;1";
     11 
     12 // Save original prompt service factory
     13 const kPromptServiceFactory = Cm.getClassObject(
     14  Cc[kPromptServiceContractID],
     15  Ci.nsIFactory
     16 );
     17 
     18 var fakePromptServiceFactory = {
     19  createInstance(aIid) {
     20    return promptService.QueryInterface(aIid);
     21  },
     22 };
     23 
     24 var promptService = {
     25  QueryInterface: ChromeUtils.generateQI(["nsIPromptService"]),
     26  alert() {
     27    didFail = true;
     28  },
     29 };
     30 
     31 /* FIXME
     32 Cm.QueryInterface(Ci.nsIComponentRegistrar)
     33  .registerFactory(Components.ID(kPromptServiceUUID), "Prompt Service",
     34                   kPromptServiceContractID, fakePromptServiceFactory);
     35 */
     36 
     37 const kCompleteState =
     38  Ci.nsIWebProgressListener.STATE_STOP +
     39  Ci.nsIWebProgressListener.STATE_IS_NETWORK;
     40 
     41 const kDummyPage =
     42  // eslint-disable-next-line @microsoft/sdl/no-insecure-url
     43  "http://example.org/browser/browser/base/content/test/general/dummy_page.html";
     44 const kURIs = ["bad://www.mozilla.org/", kDummyPage, kDummyPage];
     45 
     46 var gProgressListener = {
     47  _runCount: 0,
     48  onStateChange(aBrowser, aWebProgress, aRequest, aStateFlags) {
     49    if ((aStateFlags & kCompleteState) == kCompleteState) {
     50      if (++this._runCount != kURIs.length) {
     51        return;
     52      }
     53      // Check we failed on unknown protocol (received an alert from docShell)
     54      ok(didFail, "Correctly failed on unknown protocol");
     55      // Check we opened all tabs
     56      Assert.equal(
     57        gBrowser.tabs.length,
     58        kURIs.length,
     59        "Correctly opened all expected tabs"
     60      );
     61      finishTest();
     62    }
     63  },
     64 };
     65 
     66 function test() {
     67  todo(false, "temp. disabled");
     68  /* FIXME */
     69  /*
     70  waitForExplicitFinish();
     71  // Wait for all tabs to finish loading
     72  gBrowser.addTabsProgressListener(gProgressListener);
     73  loadOneOrMoreURIs(kURIs.join("|"));
     74  */
     75 }
     76 
     77 function finishTest() {
     78  // Unregister the factory so we do not leak
     79  Cm.QueryInterface(Ci.nsIComponentRegistrar).unregisterFactory(
     80    Components.ID(kPromptServiceUUID),
     81    fakePromptServiceFactory
     82  );
     83 
     84  // Restore the original factory
     85  Cm.QueryInterface(Ci.nsIComponentRegistrar).registerFactory(
     86    Components.ID(kPromptServiceUUID),
     87    "Prompt Service",
     88    kPromptServiceContractID,
     89    kPromptServiceFactory
     90  );
     91 
     92  // Remove the listener
     93  gBrowser.removeTabsProgressListener(gProgressListener);
     94 
     95  // Close opened tabs
     96  for (var i = gBrowser.tabs.length - 1; i > 0; i--) {
     97    gBrowser.removeTab(gBrowser.tabs[i]);
     98  }
     99 
    100  finish();
    101 }