tor-browser

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

import-scripts-updated-flag.https.html (2863B)


      1 <!DOCTYPE html>
      2 <meta charset="utf-8">
      3 <title>Tests for importScripts: import scripts updated flag</title>
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <script src="resources/test-helpers.sub.js"></script>
      7 <body>
      8 <script>
      9 // This test registers a worker that calls importScripts at various stages of
     10 // service worker lifetime. The sub-tests trigger subsequent `importScript`
     11 // invocations via the `message` event.
     12 
     13 var register;
     14 
     15 function post_and_wait_for_reply(worker, message) {
     16  return new Promise(resolve => {
     17      navigator.serviceWorker.onmessage = e => { resolve(e.data); };
     18      worker.postMessage(message);
     19    });
     20 }
     21 
     22 promise_test(function(t) {
     23    const scope = 'resources/import-scripts-updated-flag';
     24    let registration;
     25 
     26    register = service_worker_unregister_and_register(
     27        t, 'resources/import-scripts-updated-flag-worker.js', scope)
     28      .then(r => {
     29          registration = r;
     30          add_completion_callback(() => { registration.unregister(); });
     31          return wait_for_state(t, registration.installing, 'activated');
     32        })
     33      .then(() => {
     34          // This test should not be considered complete until after the
     35          // service worker has been unregistered. Currently, `testharness.js`
     36          // does not support asynchronous global "tear down" logic, so this
     37          // must be expressed using a dedicated `promise_test`. Because the
     38          // other sub-tests in this file are declared synchronously, this test
     39          // will be the final test executed.
     40          promise_test(function(t) {
     41              return registration.unregister();
     42            });
     43 
     44          return registration.active;
     45        });
     46 
     47    return register;
     48  }, 'initialize global state');
     49 
     50 promise_test(t => {
     51    return register
     52      .then(function(worker) {
     53          return post_and_wait_for_reply(worker, 'root-and-message');
     54        })
     55      .then(result => {
     56          assert_equals(result.error, null);
     57          assert_equals(result.value, 'root-and-message');
     58        });
     59  }, 'import script previously imported at worker evaluation time');
     60 
     61 promise_test(t => {
     62    return register
     63      .then(function(worker) {
     64          return post_and_wait_for_reply(worker, 'install-and-message');
     65        })
     66      .then(result => {
     67          assert_equals(result.error, null);
     68          assert_equals(result.value, 'install-and-message');
     69        });
     70  }, 'import script previously imported at worker install time');
     71 
     72 promise_test(t => {
     73    return register
     74      .then(function(worker) {
     75          return post_and_wait_for_reply(worker, 'message');
     76        })
     77      .then(result => {
     78          assert_equals(result.error, 'NetworkError');
     79          assert_equals(result.value, null);
     80        });
     81  }, 'import script not previously imported');
     82 </script>
     83 </body>