Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 1 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /content-security-policy/frame-ancestors/frame-ancestors-from-serviceworker.https.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
</head>
<body>
<script>
var t = async_test("A 'frame-ancestors' CSP directive set from a serviceworker response with a value 'none' should block rendering.");
// Register service worker.
var worker = 'support/service-worker.js';
var scope = 'support/service-worker/';
service_worker_unregister_and_register(t, worker, scope)
.then(registration => wait_for_state(t, registration.installing, 'activated'))
.then(() => {
// Load iframe.
var iframe = document.createElement("iframe");
let timer;
function pollForLoadCompletion() {
timer = t.step_timeout(() => iframeMayBeLoaded({isPoll: true}), 10);
}
function iframeMayBeLoaded({isPoll}) {
var failed = false;
clearTimeout(timer);
try {
let href = iframe.contentWindow.location.href;
if (isPoll && (href === "about:blank" || iframe.contentDocument.readyState !== "complete")) {
pollForLoadCompletion();
return;
}
failed = true;
} catch (ex) {}
t.step_func_done(() => assert_false(failed, "The IFrame should have been blocked. It wasn't."))();
};
iframe.addEventListener("load", () => iframeMayBeLoaded({isPoll: false}));
iframe.addEventListener("error", () => iframeMayBeLoaded({isPoll: false}));
iframe.src = "/content-security-policy/frame-ancestors/support/service-worker/frame-ancestors-none.html";
document.body.appendChild(iframe);
pollForLoadCompletion();
});
</script>
</body>
</html>