| <!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> |