shared-worker-import-failure.html (2768B)
1 <!DOCTYPE html> 2 <title>SharedWorker: import failure</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script> setup({allow_uncaught_exception: true}); </script> 6 <script> 7 8 // TODO: Factor out the test cases into a separate file. 9 // (like import-test-cases.js) 10 11 // SharedWorkers doesn't fire error events when runtime script errors occur. 12 // 13 // "For shared workers, if the error is still not handled afterwards, the error 14 // may be reported to a developer console." [spec text] 15 // https://html.spec.whatwg.org/C/#runtime-script-errors-2 16 17 promise_test(async () => { 18 const scriptURL = 'resources/import-scripts-worker.js'; 19 const worker = new SharedWorker(scriptURL, { type: 'module' }); 20 const msg_event = 21 await new Promise(resolve => worker.port.onmessage = resolve); 22 assert_equals(msg_event.data, 'TypeError'); 23 }, 'importScripts() on module worker should throw an exception.'); 24 25 promise_test(() => { 26 const scriptURL = 'resources/non-existent-worker.js'; 27 const worker = new SharedWorker(scriptURL, { type: 'module' }); 28 return new Promise(resolve => worker.onerror = resolve); 29 }, 'Worker construction for non-existent script should dispatch an ' + 30 'ErrorEvent.'); 31 32 promise_test(() => { 33 const scriptURL = 'resources/static-import-non-existent-script-worker.js'; 34 const worker = new SharedWorker(scriptURL, { type: 'module' }); 35 return new Promise(resolve => worker.onerror = resolve); 36 }, 'Static import for non-existent script should dispatch an ErrorEvent.'); 37 38 promise_test(async () => { 39 const scriptURL = './non-existent-worker.js'; 40 const worker = 41 new SharedWorker('resources/dynamic-import-given-url-worker.js', 42 { type: 'module' }); 43 worker.port.postMessage(scriptURL); 44 const msg_event = await new Promise((resolve, reject) => { 45 worker.port.onmessage = resolve; 46 worker.onerror = error => { 47 const msg = error instanceof ErrorEvent ? error.message 48 : 'unknown error'; 49 reject(msg); 50 }; 51 }); 52 assert_equals(msg_event.data, 'TypeError'); 53 }, 'Dynamic import for non-existent script should throw an exception.'); 54 55 test(() => { 56 const scriptURL = 'http://invalid:123$'; 57 assert_throws_dom('SyntaxError', 58 () => new SharedWorker(scriptURL, { type: 'module' })); 59 }, 'SharedWorker construction for an invalid URL should throw an exception.'); 60 61 async_test((t) => { 62 const scriptURL = 'file:///static-import-worker.js'; 63 const worker = new SharedWorker(scriptURL, { type: 'module' }); 64 worker.onerror = t.step_func_done(function(e) { 65 assert_true(e instanceof Event); 66 }); 67 68 }, 'SharedWorker construction for a file URL should throw an exception.'); 69 70 </script>