mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-08 20:28:42 +02:00
This patch won't actually build, because a few bits of code are used for both nsIFactory::createInstance and static components, and static components are not fixed until the next patch. The first place is nsLoadGroupConstructor, which uses an nsIFactory macro to create a static component constructor. (This could be worked around by expanding the macro to the state before this patch.) The other issue is that nsAppShellConstructor is used in an nsIFactory on OSX, but as a static component on all other platforms. This could be worked around by wrapping nsAppShellConstructor in an adaptor that passes in the extra null argument to nsAppShellConstructor. Differential Revision: https://phabricator.services.mozilla.com/D146456
99 lines
2.7 KiB
JavaScript
99 lines
2.7 KiB
JavaScript
// 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/embedcomp/prompt-service;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 =
|
|
"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
|
|
ok(
|
|
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();
|
|
}
|