diff options
Diffstat (limited to '')
-rw-r--r-- | browser/base/content/test/general/browser_bug356571.js | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_bug356571.js b/browser/base/content/test/general/browser_bug356571.js new file mode 100644 index 0000000000..aa3569c93d --- /dev/null +++ b/browser/base/content/test/general/browser_bug356571.js @@ -0,0 +1,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, 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 + 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(); +} |