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