Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [
["extensions.InstallTrigger.enabled", true],
["extensions.InstallTriggerImpl.enabled", true],
],
});
});
// ----------------------------------------------------------------------------
// Test whether an install fails if the url is a local file when requested from
// web content
add_task(async function test() {
var cr = Cc["@mozilla.org/chrome/chrome-registry;1"].getService(
Ci.nsIChromeRegistry
);
var chromeroot = getChromeRoot(gTestPath);
var xpipath = chromeroot + "amosigned.xpi";
try {
xpipath = cr.convertChromeURL(makeURI(xpipath)).spec;
} catch (ex) {
// scenario where we are running from a .jar and already extracted
}
var triggers = encodeURIComponent(
JSON.stringify({
"Unsigned XPI": xpipath,
})
);
// In non-e10s the exception in the content page would trigger a test failure
if (!gMultiProcessBrowser) {
expectUncaughtException();
}
let URI = TESTROOT + "installtrigger.html?manualStartInstall" + triggers;
await BrowserTestUtils.withNewTab(
{ gBrowser, url: URI },
async function (browser) {
await SpecialPowers.spawn(browser, [], async function () {
let installTriggered = ContentTaskUtils.waitForEvent(
docShell.chromeEventHandler,
"InstallTriggered",
true,
null,
true
);
content.wrappedJSObject.startInstall();
await installTriggered;
let doc = content.document;
is(
doc.getElementById("return").textContent,
"exception",
"installTrigger should have failed"
);
});
}
);
});
// ----------------------------------------------------------------------------