108 lines
3.4 KiB
JavaScript
108 lines
3.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const DIRPATH = getRootDirectory(gTestPath).replace(
|
|
"chrome://mochitests/content/",
|
|
""
|
|
);
|
|
|
|
const ORIGIN = "https://example.com";
|
|
const CROSSORIGIN = "https://example.org";
|
|
|
|
const TABURL = `${ORIGIN}/${DIRPATH}dummy_page.html`;
|
|
|
|
const IMAGEURL = `${ORIGIN}/${DIRPATH}image.png`;
|
|
const CROSSIMAGEURL = `${CROSSORIGIN}/${DIRPATH}image.png`;
|
|
|
|
const DOCUMENTURL = `${ORIGIN}/${DIRPATH}dummy_page.html`;
|
|
const CROSSDOCUMENTURL = `${CROSSORIGIN}/${DIRPATH}dummy_page.html`;
|
|
|
|
function getPids(browser) {
|
|
return browser.browsingContext.children.map(
|
|
child => child.currentWindowContext.osPid
|
|
);
|
|
}
|
|
|
|
async function runTest(spec, tabUrl, imageurl, crossimageurl, check) {
|
|
await BrowserTestUtils.withNewTab(tabUrl, async browser => {
|
|
await SpecialPowers.spawn(
|
|
browser,
|
|
[spec, imageurl, crossimageurl],
|
|
async ({ element, attribute }, url1, url2) => {
|
|
for (let url of [url1, url2]) {
|
|
const object = content.document.createElement(element);
|
|
object[attribute] = url;
|
|
const onloadPromise = new Promise(res => {
|
|
object.onload = res;
|
|
});
|
|
content.document.body.appendChild(object);
|
|
await onloadPromise;
|
|
}
|
|
}
|
|
);
|
|
|
|
await check(browser);
|
|
});
|
|
}
|
|
|
|
let iframe = { element: "iframe", attribute: "src" };
|
|
let embed = { element: "embed", attribute: "src" };
|
|
let object = { element: "object", attribute: "data" };
|
|
|
|
async function checkImage(browser) {
|
|
let pids = getPids(browser);
|
|
is(pids.length, 2, "There should be two browsing contexts");
|
|
ok(pids[0], "The first pid should have a sane value");
|
|
ok(pids[1], "The second pid should have a sane value");
|
|
isnot(pids[0], pids[1], "The two pids should be different");
|
|
|
|
let images = [];
|
|
for (let context of browser.browsingContext.children) {
|
|
images.push(
|
|
await SpecialPowers.spawn(context, [], async () => {
|
|
let img = new URL(content.document.querySelector("img").src);
|
|
is(
|
|
`${img.protocol}//${img.host}`,
|
|
`${content.location.protocol}//${content.location.host}`,
|
|
"Images should be loaded in the same domain as the document"
|
|
);
|
|
return img.href;
|
|
})
|
|
);
|
|
}
|
|
isnot(images[0], images[1], "The images should have different sources");
|
|
}
|
|
|
|
function checkDocument(browser) {
|
|
let pids = getPids(browser);
|
|
is(pids.length, 2, "There should be two browsing contexts");
|
|
ok(pids[0], "The first pid should have a sane value");
|
|
ok(pids[1], "The second pid should have a sane value");
|
|
isnot(pids[0], pids[1], "The two pids should be different");
|
|
}
|
|
|
|
add_task(async function test_iframeImageDocument() {
|
|
await runTest(iframe, TABURL, IMAGEURL, CROSSIMAGEURL, checkImage);
|
|
});
|
|
|
|
add_task(async function test_embedImageDocument() {
|
|
await runTest(embed, TABURL, IMAGEURL, CROSSIMAGEURL, checkImage);
|
|
});
|
|
|
|
add_task(async function test_objectImageDocument() {
|
|
await runTest(object, TABURL, IMAGEURL, CROSSIMAGEURL, checkImage);
|
|
});
|
|
|
|
add_task(async function test_iframeDocument() {
|
|
await runTest(iframe, TABURL, DOCUMENTURL, CROSSDOCUMENTURL, checkDocument);
|
|
});
|
|
|
|
add_task(async function test_embedDocument() {
|
|
await runTest(embed, TABURL, DOCUMENTURL, CROSSDOCUMENTURL, checkDocument);
|
|
});
|
|
|
|
add_task(async function test_objectDocument() {
|
|
await runTest(object, TABURL, DOCUMENTURL, CROSSDOCUMENTURL, checkDocument);
|
|
});
|