<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/script-factory.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="/common/utils.js"></script>
<script>
const origins = get_host_info();
promise_test(async t => {
const popup = window.open();
t.add_cleanup(() => { popup.close(); });
let data_from_popup = () => new Promise(resolve =>
window.addEventListener("message", (({ data }) => resolve(data))));
let check_result = (data, text) => {
assert_equals(data.origin, origin);
assert_true(data.sameOriginNoCORPSuccess,
text + ": Same-origin without CORP did not succeed");
assert_true(data.crossOriginNoCORPFailure,
text + ": Cross-origin without CORP did not fail");
};
// Check if COEP is inherited by the popup.
let script = popup.document.createElement('script');
script.innerHTML =
`${createScript(window.origin, origins.HTTPS_REMOTE_ORIGIN, "opener")}`;
popup.document.body.appendChild(script);
check_result(await data_from_popup(), "Initial empty document");
// Navigate the popup away.
popup.location = origins.HTTPS_REMOTE_ORIGIN +
"/html/cross-origin-embedder-policy/resources/postmessage-ready.html";
assert_equals(await new Promise(resolve =>
window.addEventListener("message", msg => resolve(msg.data))),
"ready");
// Navigate the popup to about:blank and wait for it.
popup.location = "about:blank";
await t.step_wait(
condition = () => {
try {
return popup.location.href === "about:blank";
} catch {}
return false;
},
description = "Wait for the popup to navigate.",
timeout=3000,
interval=50);
// Check again if COEP is inherited.
script = popup.document.createElement('script');
script.innerHTML =
`${createScript(window.origin, origins.HTTPS_REMOTE_ORIGIN, "opener")}`;
popup.document.body.appendChild(script);
check_result(await data_from_popup(), "Non-initial about:blank document");
}, `Cross-Origin-Embedder-Policy is inherited by about:blank popup.`);
</script>