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