sandboxed-iframe-fetch-event-iframe.html (1872B)
1 <script> 2 function with_iframe(url) { 3 return new Promise(resolve => { 4 let frame = document.createElement('iframe'); 5 frame.src = url; 6 frame.onload = () => { resolve(frame); }; 7 document.body.appendChild(frame); 8 }); 9 } 10 11 function with_sandboxed_iframe(url, sandbox) { 12 return new Promise(resolve => { 13 let frame = document.createElement('iframe'); 14 frame.sandbox = sandbox; 15 frame.src = url; 16 frame.onload = () => { resolve(frame); }; 17 document.body.appendChild(frame); 18 }); 19 } 20 21 function fetch_from_worker(url) { 22 return new Promise(resolve => { 23 let blob = new Blob([ 24 `fetch('${url}', {mode: 'no-cors'})` + 25 " .then(() => { self.postMessage('OK'); });"]); 26 let worker_url = URL.createObjectURL(blob); 27 let worker = new Worker(worker_url); 28 worker.onmessage = resolve; 29 }); 30 } 31 32 function run_test(type) { 33 const base_path = location.href; 34 switch (type) { 35 case 'fetch': 36 return fetch(`${base_path}&test=fetch`, {mode: 'no-cors'}); 37 case 'fetch-from-worker': 38 return fetch_from_worker(`${base_path}&test=fetch-from-worker`); 39 case 'iframe': 40 return with_iframe(`${base_path}&test=iframe`); 41 case 'sandboxed-iframe': 42 return with_sandboxed_iframe(`${base_path}&test=sandboxed-iframe`, 43 "allow-scripts"); 44 case 'sandboxed-iframe-same-origin': 45 return with_sandboxed_iframe( 46 `${base_path}&test=sandboxed-iframe-same-origin`, 47 "allow-scripts allow-same-origin"); 48 default: 49 return Promise.reject(`Unknown type: ${type}`); 50 } 51 } 52 53 window.onmessage = event => { 54 let id = event.data['id']; 55 run_test(event.data['type']) 56 .then(() => { 57 window.top.postMessage({id: id, result: 'done'}, '*'); 58 }) 59 .catch(e => { 60 window.top.postMessage({id: id, result: 'error: ' + e.toString()}, '*'); 61 }); 62 }; 63 </script>