79 lines
2.3 KiB
JavaScript
79 lines
2.3 KiB
JavaScript
/*
|
|
* Test that following a link with a scheme that opens externally (like
|
|
* irc:) does not blank the page (Bug 1630757).
|
|
*/
|
|
|
|
const { HandlerServiceTestUtils } = ChromeUtils.importESModule(
|
|
"resource://testing-common/HandlerServiceTestUtils.sys.mjs"
|
|
);
|
|
|
|
let gHandlerService = Cc["@mozilla.org/uriloader/handler-service;1"].getService(
|
|
Ci.nsIHandlerService
|
|
);
|
|
|
|
let Pages = [httpURL("dummy_page.html"), fileURL("dummy_page.html")];
|
|
|
|
/**
|
|
* Creates dummy protocol handler
|
|
*/
|
|
function initTestHandlers() {
|
|
let handlerInfo =
|
|
HandlerServiceTestUtils.getBlankHandlerInfo("test-proto://");
|
|
|
|
let appHandler = Cc[
|
|
"@mozilla.org/uriloader/local-handler-app;1"
|
|
].createInstance(Ci.nsILocalHandlerApp);
|
|
// This is a dir and not executable, but that's enough for here.
|
|
appHandler.executable = Services.dirsvc.get("XCurProcD", Ci.nsIFile);
|
|
handlerInfo.possibleApplicationHandlers.appendElement(appHandler);
|
|
handlerInfo.preferredApplicationHandler = appHandler;
|
|
handlerInfo.preferredAction = handlerInfo.useHelperApp;
|
|
handlerInfo.alwaysAskBeforeHandling = false;
|
|
gHandlerService.store(handlerInfo);
|
|
|
|
registerCleanupFunction(() => {
|
|
gHandlerService.remove(handlerInfo);
|
|
});
|
|
}
|
|
|
|
async function runTest() {
|
|
initTestHandlers();
|
|
|
|
for (let page of Pages) {
|
|
await BrowserTestUtils.withNewTab(page, async function (aBrowser) {
|
|
await SpecialPowers.spawn(aBrowser, [], async () => {
|
|
let h = content.document.createElement("h1");
|
|
ok(h);
|
|
h.innerHTML = "My heading";
|
|
h.id = "my-heading";
|
|
content.document.body.append(h);
|
|
is(content.document.getElementById("my-heading"), h, "h exists");
|
|
|
|
let a = content.document.createElement("a");
|
|
ok(a);
|
|
a.innerHTML = "my link";
|
|
a.id = "my-link";
|
|
content.document.body.append(a);
|
|
});
|
|
|
|
await SpecialPowers.spawn(aBrowser, [], async () => {
|
|
let url = "test-proto://some-thing";
|
|
|
|
let a = content.document.getElementById("my-link");
|
|
ok(a);
|
|
a.href = url;
|
|
a.click();
|
|
});
|
|
|
|
await SpecialPowers.spawn(aBrowser, [], async () => {
|
|
ok(
|
|
content.document.getElementById("my-heading"),
|
|
"Page contents not erased"
|
|
);
|
|
});
|
|
});
|
|
}
|
|
await SpecialPowers.popPrefEnv();
|
|
}
|
|
|
|
add_task(runTest);
|