tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>