dedicated-worker-from-blob-url.window.js (1574B)
1 function message_from_port(port) { 2 return new Promise((resolve, reject) => { 3 port.onmessage = e => resolve(e.data); 4 port.onerror = e => reject(e); 5 }); 6 } 7 8 promise_test(async t => { 9 const run_result = 'worker_OK'; 10 const blob_contents = 'self.postMessage("' + run_result + '");'; 11 const blob = new Blob([blob_contents]); 12 const url = URL.createObjectURL(blob); 13 14 const worker = new Worker(url); 15 const reply = await message_from_port(worker); 16 assert_equals(reply, run_result); 17 }, 'Creating a dedicated worker from a blob URL works.'); 18 19 promise_test(async t => { 20 const run_result = 'worker_OK'; 21 const blob_contents = 'self.postMessage("' + run_result + '");'; 22 const blob = new Blob([blob_contents]); 23 const url = URL.createObjectURL(blob); 24 25 const worker = new Worker(url); 26 URL.revokeObjectURL(url); 27 const reply = await message_from_port(worker); 28 assert_equals(reply, run_result); 29 }, 'Creating a dedicated worker from a blob URL works immediately before revoking.'); 30 31 promise_test(async t => { 32 const run_result = false; 33 const blob_contents = ` 34 let constructedRequest = false; 35 try { 36 new Request("./file.js"); 37 constructedRequest = true; 38 } catch (e) {} 39 self.postMessage(constructedRequest); 40 `; 41 const blob = new Blob([blob_contents]); 42 const url = URL.createObjectURL(blob); 43 44 const worker = new Worker(url); 45 const reply = await message_from_port(worker); 46 assert_equals(reply, run_result, "Should not be able to resolve request with relative file path in blob"); 47 }, 'Blob URLs should not resolve relative to document base URL.');