gecko-dev/browser/base/content/test/general/browser_bug356571.js
Andrew McCreight c8c5c819df Bug 1514936, part 1 - Remove the outer argument to nsIFactory::createInstance. r=xpcom-reviewers,preferences-reviewers,nika,Gijs
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
2022-05-17 20:24:19 +00:00

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();
}