diff options
Diffstat (limited to 'browser/base/content/test/browser_bug356571.js')
-rw-r--r-- | browser/base/content/test/browser_bug356571.js | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/browser/base/content/test/browser_bug356571.js b/browser/base/content/test/browser_bug356571.js new file mode 100644 index 000000000..aeb07c785 --- /dev/null +++ b/browser/base/content/test/browser_bug356571.js @@ -0,0 +1,91 @@ +// Bug 356571 - loadOneOrMoreURIs gives up if one of the URLs has an unknown protocol + +const Cr = Components.results; +const 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/embedcomp/prompt-service;1"; + +// Save original prompt service factory +const kPromptServiceFactory = Cm.getClassObject(Cc[kPromptServiceContractID], + Ci.nsIFactory); + +let fakePromptServiceFactory = { + createInstance: function(aOuter, aIid) { + if (aOuter != null) + throw Cr.NS_ERROR_NO_AGGREGATION; + return promptService.QueryInterface(aIid); + } +}; + +let promptService = { + QueryInterface: XPCOMUtils.generateQI([Ci.nsIPromptService]), + alert: function() { + 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 = "http://example.org/browser/browser/base/content/test/dummy_page.html"; +const kURIs = [ + "bad://www.mozilla.org/", + kDummyPage, + kDummyPage, +]; + +var gProgressListener = { + _runCount: 0, + onStateChange: function (aBrowser, aWebProgress, aRequest, aStateFlags, aStatus) { + 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 + ok(gBrowser.tabs.length == kURIs.length, "Correctly opened all expected tabs"); + finishTest(); + } + } +} + +function test() { + todo(false, "temp. disabled"); + return; /* 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(); +} |