summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_bug356571.js
blob: 69b45e040d57765f02673653cc2d6a50391a6a5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// Bug 356571 - loadOneOrMoreURIs gives up if one of the URLs has an unknown protocol

var Cm = Components.manager;

// Set to true when docShell alerts for unknown protocol error
var didFail = false;

// Override Alert to avoid blocking the test due to unknown protocol error
const kPromptServiceUUID = "{6cc9c9fe-bc0b-432b-a410-253ef8bcc699}";
const kPromptServiceContractID = "@mozilla.org/prompter;1";

// Save original prompt service factory
const kPromptServiceFactory = Cm.getClassObject(
  Cc[kPromptServiceContractID],
  Ci.nsIFactory
);

var fakePromptServiceFactory = {
  createInstance(aIid) {
    return promptService.QueryInterface(aIid);
  },
};

var promptService = {
  QueryInterface: ChromeUtils.generateQI(["nsIPromptService"]),
  alert() {
    didFail = true;
  },
};

/* FIXME
Cm.QueryInterface(Ci.nsIComponentRegistrar)
  .registerFactory(Components.ID(kPromptServiceUUID), "Prompt Service",
                   kPromptServiceContractID, fakePromptServiceFactory);
*/

const kCompleteState =
  Ci.nsIWebProgressListener.STATE_STOP +
  Ci.nsIWebProgressListener.STATE_IS_NETWORK;

const kDummyPage =
  // eslint-disable-next-line @microsoft/sdl/no-insecure-url
  "http://example.org/browser/browser/base/content/test/general/dummy_page.html";
const kURIs = ["bad://www.mozilla.org/", kDummyPage, kDummyPage];

var gProgressListener = {
  _runCount: 0,
  onStateChange(aBrowser, aWebProgress, aRequest, aStateFlags) {
    if ((aStateFlags & kCompleteState) == kCompleteState) {
      if (++this._runCount != kURIs.length) {
        return;
      }
      // Check we failed on unknown protocol (received an alert from docShell)
      ok(didFail, "Correctly failed on unknown protocol");
      // Check we opened all tabs
      Assert.equal(
        gBrowser.tabs.length,
        kURIs.length,
        "Correctly opened all expected tabs"
      );
      finishTest();
    }
  },
};

function test() {
  todo(false, "temp. disabled");
  /* FIXME */
  /*
  waitForExplicitFinish();
  // Wait for all tabs to finish loading
  gBrowser.addTabsProgressListener(gProgressListener);
  loadOneOrMoreURIs(kURIs.join("|"));
  */
}

function finishTest() {
  // Unregister the factory so we do not leak
  Cm.QueryInterface(Ci.nsIComponentRegistrar).unregisterFactory(
    Components.ID(kPromptServiceUUID),
    fakePromptServiceFactory
  );

  // Restore the original factory
  Cm.QueryInterface(Ci.nsIComponentRegistrar).registerFactory(
    Components.ID(kPromptServiceUUID),
    "Prompt Service",
    kPromptServiceContractID,
    kPromptServiceFactory
  );

  // Remove the listener
  gBrowser.removeTabsProgressListener(gProgressListener);

  // Close opened tabs
  for (var i = gBrowser.tabs.length - 1; i > 0; i--) {
    gBrowser.removeTab(gBrowser.tabs[i]);
  }

  finish();
}