gecko-dev/browser/base/content/test/general/browser_bug356571.js
Ian Moody 011b59d595 Bug 1536556 - Replace raw thrown Cr.ERRORs with Components.Exception. r=mossop,remote-protocol-reviewers,marionette-reviewers,whimboo,necko-reviewers,geckoview-reviewers,valentin,agi
Raw Cr.ERROR don't get stack information, same as throwing JS literals instead
of `new Error()`s.

This was done automatically with a new eslint rule that will be introduced in
the next commit.  One instance of a raw Cr.ERROR was not replaced since it is
used in a test that specifically checks the preservation of raw Cr values in
XPCJS.  The rule will be disabled for that instance.

Differential Revision: https://phabricator.services.mozilla.com/D28073
2020-05-05 17:41:36 +00:00

102 lines
2.8 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(aOuter, aIid) {
if (aOuter != null) {
throw Components.Exception("", Cr.NS_ERROR_NO_AGGREGATION);
}
return promptService.QueryInterface(aIid);
},
};
var promptService = {
QueryInterface: ChromeUtils.generateQI([Ci.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();
}