srcdoc-iframe.html (2558B)
1 <!doctype html> 2 <html> 3 <body> 4 <iframe id="srcdocFrame" srcdoc=" 5 <script> 6 function reportTestResult(result) { 7 top.postMessage({ type: 'TEST_RESULT', result: result }, '*'); 8 } 9 10 async function postMessageToController() { 11 let controller = navigator.serviceWorker.controller; 12 if (!controller) { 13 reportTestResult('no navigator.serviceWorker.controller'); 14 } 15 try { 16 controller.postMessage('test'); 17 } catch (e) { 18 reportTestResult('Unexpected Error ' + e.name + ' : ' + e.message); 19 } 20 } 21 22 async function getServiceWorkerRegistration(scope) { 23 try { 24 let reg = await navigator.serviceWorker.getRegistration(scope); 25 if (!reg) { 26 reportTestResult('no regsitration for ' + scope); 27 } 28 if (reg.scope !== scope) { 29 reportTestResult('regsitration scope does not match'); 30 } 31 32 if (!reg.active) { 33 reportTestResult('regsitration.active is not valid' + reg.active); 34 } 35 reportTestResult('passed'); 36 } catch (e) { 37 reportTestResult('Unexpected Error ' + e.name + ' : ' + e.message); 38 } 39 } 40 41 function addSrcdocIframeWithSandbox(sandbox) { 42 let frame = document.createElement('iframe'); 43 frame.sandbox = sandbox; 44 frame.srcdoc = ` 45 <script> 46 function reportTestResult(result) { 47 top.postMessage({ type: 'TEST_RESULT', result: result }, '*'); 48 } 49 50 window.onload = function onLoad() { 51 try { 52 let controller = navigator.serviceWorker.controller; 53 reportTestResult(controller ? 'HasController' : 'NoController'); 54 } catch (e) { 55 reportTestResult((e.name == 'SecurityError') ? 56 'NoController' : 'UnexpectedError:' + e.message); 57 } 58 } 59 <\/script>`; 60 document.body.appendChild(frame); 61 } 62 63 function addSandboxedSrcdocFrame() { 64 addSrcdocIframeWithSandbox('allow-scripts'); 65 } 66 67 function addSameOriginSandboxedSrcdocFrame() { 68 addSrcdocIframeWithSandbox('allow-scripts allow-same-origin'); 69 } 70 71 async function fetchResource() { 72 let response = await fetch('?test_resource=1'); 73 reportTestResult(await response.text()); 74 } 75 76 window.navigator.serviceWorker.addEventListener( 77 'message', function onMsg(evt) { 78 // Forward the message as test result. 79 reportTestResult(evt.data); 80 }); 81 </script> 82 "></iframe> 83 84 <script> 85 // Helper routine to make it slightly easier for our parent to find 86 // the srcdoc frame. 87 function srcdocFrame() { 88 return document.getElementById('srcdocFrame').contentWindow; 89 } 90 </script> 91 </body> 92 </html>