Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

// META: script=/common/get-host-info.sub.js
// META: script=/common/utils.js
// META: script=/common/dispatcher/dispatcher.js
const testBaseUriAboutBlankFromGrandParent = (description, child_origin) => {
promise_test(async test => {
// Create a child in an iframe.
const child_token = token();
const child_url = child_origin +
'/common/dispatcher/executor.html' +
`?uuid=${child_token}`;
const iframe = document.createElement("iframe");
iframe.src = child_url;
document.body.appendChild(iframe);
// The child creates a grand child in an iframe.
const reply_token = token();
send(child_token, `
const iframe = document.createElement("iframe");
location.hash = "interesting-fragment";
iframe.src = "/common/blank.html";
iframe.onload = () => {
send("${reply_token}", "grand child loaded");
};
document.body.appendChild(iframe);
`);
assert_equals(await receive(reply_token), "grand child loaded");
const child = iframe.contentWindow;
const grandchild = child[0];
// Navigate the grand-child toward about:blank.
// Navigation are always asynchronous. It doesn't exist a ways to know the
// about:blank document committed. A timer is used instead:
grandchild.location = "about:blank";
await new Promise(r => test.step_timeout(r, /*ms=*/500));
// The grandchild baseURI must correspond to its grand parent.
//
// Note: `child_token` is removed, to get a stable failure, in case the
// about:blank's document.baseURI reports the parent's URL instead of its
// grand-parent.
assert_equals(
grandchild.document.baseURI.replace(child_token, "child_token"),
self.document.baseURI);
}, description);
}
onload = () => {
testBaseUriAboutBlankFromGrandParent(
"Check the baseURL of an about:blank document same-origin with its parent",
get_host_info().HTTPS_ORIGIN,
);
testBaseUriAboutBlankFromGrandParent(
"Check the baseURL of an about:blank document cross-origin with its parent",
get_host_info().HTTPS_REMOTE_ORIGIN,
);
testBaseUriAboutBlankFromGrandParent(
"Check the baseURL of an about:blank document cross-site with its parent",
get_host_info().HTTPS_NOTSAMESITE_ORIGIN,
);
}