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