Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

"use strict";
const kChildPage = getRootDirectory(gTestPath) + "file_about_child.html";
const kParentPage = getRootDirectory(gTestPath) + "file_about_parent.html";
const kAboutPagesRegistered = Promise.all([
BrowserTestUtils.registerAboutPage(
registerCleanupFunction,
"test-about-principal-child",
kChildPage,
Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD |
Ci.nsIAboutModule.ALLOW_SCRIPT |
Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT
),
BrowserTestUtils.registerAboutPage(
registerCleanupFunction,
"test-about-principal-parent",
kParentPage,
Ci.nsIAboutModule.ALLOW_SCRIPT
),
]);
add_task(async function test_principal_click() {
await kAboutPagesRegistered;
await SpecialPowers.pushPrefEnv({
set: [["dom.security.skip_about_page_has_csp_assert", true]],
});
await BrowserTestUtils.withNewTab(
"about:test-about-principal-parent",
async function (browser) {
let loadPromise = BrowserTestUtils.browserLoaded(
browser,
false,
"about:test-about-principal-child"
);
let myLink = browser.contentDocument.getElementById(
"aboutchildprincipal"
);
myLink.click();
await loadPromise;
await SpecialPowers.spawn(
gBrowser.selectedBrowser,
[],
async function () {
let channel = content.docShell.currentDocumentChannel;
is(
channel.originalURI.asciiSpec,
"about:test-about-principal-child",
"sanity check - make sure we test the principal for the correct URI"
);
let triggeringPrincipal = channel.loadInfo.triggeringPrincipal;
ok(
triggeringPrincipal.isSystemPrincipal,
"loading about: from privileged page must have a triggering of System"
);
let contentPolicyType = channel.loadInfo.externalContentPolicyType;
is(
contentPolicyType,
Ci.nsIContentPolicy.TYPE_DOCUMENT,
"sanity check - loading a top level document"
);
let loadingPrincipal = channel.loadInfo.loadingPrincipal;
is(
loadingPrincipal,
null,
"sanity check - load of TYPE_DOCUMENT must have a null loadingPrincipal"
);
}
);
}
);
});
add_task(async function test_principal_ctrl_click() {
await kAboutPagesRegistered;
await SpecialPowers.pushPrefEnv({
set: [
["security.sandbox.content.level", 1],
["dom.security.skip_about_page_has_csp_assert", true],
],
});
await BrowserTestUtils.withNewTab(
"about:test-about-principal-parent",
async function () {
let loadPromise = BrowserTestUtils.waitForNewTab(
gBrowser,
"about:test-about-principal-child",
true
);
// simulate ctrl+click
BrowserTestUtils.synthesizeMouseAtCenter(
"#aboutchildprincipal",
{ ctrlKey: true, metaKey: true },
gBrowser.selectedBrowser
);
let tab = await loadPromise;
gBrowser.selectTabAtIndex(2);
await SpecialPowers.spawn(
gBrowser.selectedBrowser,
[],
async function () {
let channel = content.docShell.currentDocumentChannel;
is(
channel.originalURI.asciiSpec,
"about:test-about-principal-child",
"sanity check - make sure we test the principal for the correct URI"
);
let triggeringPrincipal = channel.loadInfo.triggeringPrincipal;
ok(
triggeringPrincipal.isSystemPrincipal,
"loading about: from privileged page must have a triggering of System"
);
let contentPolicyType = channel.loadInfo.externalContentPolicyType;
is(
contentPolicyType,
Ci.nsIContentPolicy.TYPE_DOCUMENT,
"sanity check - loading a top level document"
);
let loadingPrincipal = channel.loadInfo.loadingPrincipal;
is(
loadingPrincipal,
null,
"sanity check - load of TYPE_DOCUMENT must have a null loadingPrincipal"
);
}
);
BrowserTestUtils.removeTab(tab);
}
);
});
add_task(async function test_principal_right_click_open_link_in_new_tab() {
await kAboutPagesRegistered;
await SpecialPowers.pushPrefEnv({
set: [
["security.sandbox.content.level", 1],
["dom.security.skip_about_page_has_csp_assert", true],
],
});
await BrowserTestUtils.withNewTab(
"about:test-about-principal-parent",
async function () {
let loadPromise = BrowserTestUtils.waitForNewTab(
gBrowser,
"about:test-about-principal-child",
true
);
// simulate right-click open link in tab
BrowserTestUtils.waitForEvent(document, "popupshown", false, event => {
// These are operations that must be executed synchronously with the event.
document.getElementById("context-openlinkintab").doCommand();
event.target.hidePopup();
return true;
});
BrowserTestUtils.synthesizeMouseAtCenter(
"#aboutchildprincipal",
{ type: "contextmenu", button: 2 },
gBrowser.selectedBrowser
);
let tab = await loadPromise;
gBrowser.selectTabAtIndex(2);
await SpecialPowers.spawn(
gBrowser.selectedBrowser,
[],
async function () {
let channel = content.docShell.currentDocumentChannel;
is(
channel.originalURI.asciiSpec,
"about:test-about-principal-child",
"sanity check - make sure we test the principal for the correct URI"
);
let triggeringPrincipal = channel.loadInfo.triggeringPrincipal;
ok(
triggeringPrincipal.isSystemPrincipal,
"loading about: from privileged page must have a triggering of System"
);
let contentPolicyType = channel.loadInfo.externalContentPolicyType;
is(
contentPolicyType,
Ci.nsIContentPolicy.TYPE_DOCUMENT,
"sanity check - loading a top level document"
);
let loadingPrincipal = channel.loadInfo.loadingPrincipal;
is(
loadingPrincipal,
null,
"sanity check - load of TYPE_DOCUMENT must have a null loadingPrincipal"
);
}
);
BrowserTestUtils.removeTab(tab);
}
);
});