cross-global-revoke.sub.html (2304B)
1 <!doctype html> 2 <meta charset="utf-8"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="/common/get-host-info.sub.js"></script> 6 <body> 7 <script> 8 async_test(t => { 9 const blob_contents = 'test blob contents'; 10 const blob = new Blob([blob_contents]); 11 const url = URL.createObjectURL(blob); 12 const frame = document.createElement('iframe'); 13 frame.setAttribute('style', 'display:none;'); 14 frame.src = 'resources/revoke-helper.html'; 15 document.body.appendChild(frame); 16 17 frame.onload = t.step_func(e => { 18 frame.contentWindow.postMessage({url: url}, '*'); 19 }); 20 21 self.addEventListener('message', t.step_func(e => { 22 if (e.source !== frame.contentWindow) return; 23 assert_equals(e.data, 'revoked'); 24 promise_rejects_js(t, TypeError, fetch(url)).then(t.step_func_done()); 25 })); 26 }, 'It is possible to revoke same-origin blob URLs from different frames.'); 27 28 async_test(t => { 29 const blob_contents = 'test blob contents'; 30 const blob = new Blob([blob_contents]); 31 const url = URL.createObjectURL(blob); 32 const worker = new Worker('resources/revoke-helper.js'); 33 worker.onmessage = t.step_func(e => { 34 assert_equals(e.data, 'revoked'); 35 promise_rejects_js(t, TypeError, fetch(url)).then(t.step_func_done()); 36 }); 37 worker.postMessage({url: url}); 38 }, 'It is possible to revoke same-origin blob URLs from a different worker global.'); 39 40 async_test(t => { 41 const blob_contents = 'test blob contents'; 42 const blob = new Blob([blob_contents]); 43 const url = URL.createObjectURL(blob); 44 const frame = document.createElement('iframe'); 45 frame.setAttribute('style', 'display:none;'); 46 frame.src = get_host_info().HTTP_REMOTE_ORIGIN + '/FileAPI/url/resources/revoke-helper.html'; 47 document.body.appendChild(frame); 48 49 frame.onload = t.step_func(e => { 50 frame.contentWindow.postMessage({url: url}, '*'); 51 }); 52 53 self.addEventListener('message', t.step_func(e => { 54 if (e.source !== frame.contentWindow) return; 55 assert_equals(e.data, 'revoked'); 56 fetch(url).then(response => response.text()).then(t.step_func_done(text => { 57 assert_equals(text, blob_contents); 58 }), t.unreached_func('Unexpected promise rejection')); 59 })); 60 }, 'It is not possible to revoke cross-origin blob URLs.'); 61 62 </script>