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> 7promise_test(t => { 8 const blob_contents = 'test blob contents'; 9 const blob = new Blob([blob_contents]); 10 const worker = new Worker('resources/create-helper.js'); 11 let url; 12 return new Promise(resolve => { 13 worker.onmessage = e => resolve(e.data); 14 worker.postMessage({blob: blob}); 15 }).then(data => { 16 url = data.url; 17 let result = fetch(url); 18 worker.terminate(); 19 return result; 20 }).then(response => response.text()).then(text => { 21 assert_equals(text, blob_contents); 22 return new Promise(resolve => t.step_timeout(resolve, 100)); 23 }).then(() => promise_rejects_js(t, TypeError, fetch(url))); 24}, 'Terminating worker revokes its URLs'); 25 26promise_test(t => { 27 const blob_contents = 'test blob contents'; 28 const blob = new Blob([blob_contents]); 29 const frame = document.createElement('iframe'); 30 frame.setAttribute('style', 'display:none;'); 31 frame.src = 'resources/create-helper.html'; 32 document.body.appendChild(frame); 33 34 let url; 35 return new Promise(resolve => { 36 frame.onload = t.step_func(e => { 37 resolve(e); 38 }); 39 }).then(e => { 40 frame.contentWindow.postMessage({blob: blob}, '*'); 41 return new Promise(resolve => { 42 self.addEventListener('message', t.step_func(e => { 43 if (e.source === frame.contentWindow) resolve(e); 44 })); 45 }); 46 }).then(e => { 47 url = e.data.url; 48 let fetch_result = fetch(url); 49 document.body.removeChild(frame); 50 return fetch_result; 51 }).then(response => response.text()).then(text => { 52 assert_equals(text, blob_contents); 53 return new Promise(resolve => t.step_timeout(resolve, 100)); 54 }).then(() => promise_rejects_js(t, TypeError, fetch(url))); 55}, 'Removing an iframe revokes its URLs'); 56</script>