mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 14:45:29 +00:00
93 lines
2.9 KiB
JavaScript
93 lines
2.9 KiB
JavaScript
// 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;
|
|
}
|
|
};
|
|
|
|
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.mTabs.length == kURIs.length, "Correctly opened all expected tabs");
|
|
finishTest();
|
|
}
|
|
},
|
|
|
|
onProgressChange: function () {},
|
|
onLocationChange: function () {},
|
|
onStatusChange: function () {},
|
|
onSecurityChange: function () {}
|
|
}
|
|
|
|
function test() {
|
|
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.mTabs.length-1; i > 0; i--)
|
|
gBrowser.removeTab(gBrowser.mTabs[i]);
|
|
|
|
finish();
|
|
}
|