browser_worker-02.js (1944B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 // Tests errors are handled properly by the DevToolsWorker. 7 8 const { DevToolsWorker } = ChromeUtils.importESModule( 9 "resource://devtools/shared/worker/worker.sys.mjs" 10 ); 11 12 const blob = new Blob( 13 [ 14 ` 15 importScripts("resource://gre/modules/workers/require.js"); 16 const { createTask } = require("resource://devtools/shared/worker/helper.js"); 17 18 createTask(self, "myTask", function({ 19 shouldThrow, 20 } = {}) { 21 if (shouldThrow) { 22 throw new Error("err"); 23 } 24 25 return "OK"; 26 }); 27 `, 28 ], 29 { type: "application/javascript" } 30 ); 31 32 add_task(async function () { 33 try { 34 new DevToolsWorker("resource://i/dont/exist.js"); 35 ok(false, "Creating a DevToolsWorker with an invalid URL throws"); 36 } catch (e) { 37 ok(true, "Creating a DevToolsWorker with an invalid URL throws"); 38 } 39 40 const WORKER_URL = URL.createObjectURL(blob); 41 const worker = new DevToolsWorker(WORKER_URL); 42 try { 43 await worker.performTask("myTask", { shouldThrow: true }); 44 ok( 45 false, 46 "DevToolsWorker returns a rejected promise when an error occurs in the worker" 47 ); 48 } catch (e) { 49 ok( 50 true, 51 "DevToolsWorker returns a rejected promise when an error occurs in the worker" 52 ); 53 } 54 55 try { 56 await worker.performTask("not a real task"); 57 ok( 58 false, 59 "DevToolsWorker returns a rejected promise when task does not exist" 60 ); 61 } catch (e) { 62 ok( 63 true, 64 "DevToolsWorker returns a rejected promise when task does not exist" 65 ); 66 } 67 68 worker.destroy(); 69 try { 70 await worker.performTask("myTask"); 71 ok( 72 false, 73 "DevToolsWorker rejects when performing a task on a destroyed worker" 74 ); 75 } catch (e) { 76 ok( 77 true, 78 "DevToolsWorker rejects when performing a task on a destroyed worker" 79 ); 80 } 81 82 URL.revokeObjectURL(WORKER_URL); 83 });