frame-ancestors-from-serviceworker.https.html (1844B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> 7 </head> 8 <body> 9 <script> 10 var t = async_test("A 'frame-ancestors' CSP directive set from a serviceworker response with a value 'none' should block rendering."); 11 12 // Register service worker. 13 var worker = 'support/service-worker.js'; 14 var scope = 'support/service-worker/'; 15 service_worker_unregister_and_register(t, worker, scope) 16 .then(registration => wait_for_state(t, registration.installing, 'activated')) 17 .then(() => { 18 // Load iframe. 19 var iframe = document.createElement("iframe"); 20 let timer; 21 function pollForLoadCompletion() { 22 timer = t.step_timeout(() => iframeMayBeLoaded({isPoll: true}), 10); 23 } 24 function iframeMayBeLoaded({isPoll}) { 25 var failed = false; 26 clearTimeout(timer); 27 try { 28 let href = iframe.contentWindow.location.href; 29 if (isPoll && (href === "about:blank" || iframe.contentDocument.readyState !== "complete")) { 30 pollForLoadCompletion(); 31 return; 32 } 33 failed = true; 34 } catch (ex) {} 35 t.step_func_done(() => assert_false(failed, "The IFrame should have been blocked. It wasn't."))(); 36 }; 37 iframe.addEventListener("load", () => iframeMayBeLoaded({isPoll: false})); 38 iframe.addEventListener("error", () => iframeMayBeLoaded({isPoll: false})); 39 iframe.src = "/content-security-policy/frame-ancestors/support/service-worker/frame-ancestors-none.html"; 40 document.body.appendChild(iframe); 41 pollForLoadCompletion(); 42 }); 43 </script> 44 </body> 45 </html>