tor-browser

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

register-service-worker-iframe.https.html (2478B)


      1 <!doctype html>
      2 <body>
      3  <script src=/resources/testharness.js></script>
      4  <script src=/common/utils.js></script>
      5  <script src=/fenced-frame/resources/utils.js></script>
      6  <script src=/shared-storage/resources/util.js></script>
      7  <script src=/shared-storage/resources/util.sub.js></script>
      8  <script src=/service-workers/service-worker/resources/test-helpers.sub.js></script>
      9  <script>
     10    const INTERMEDIATE_FRAME_SUFFIX =
     11      'able-fetch-request-fallback-to-network-iframe.https.html'
     12    const ORIGIN = new URL("", location.href).origin;
     13 
     14    window.addEventListener('message', async function handler(event) {
     15      const data = event.data;
     16      if (data.script && data.scope && data.port) {
     17        var absoluteScope = (new URL(data.scope, window.location).href);
     18        let oldReg =await navigator.serviceWorker.getRegistration(data.scope);
     19        if (oldReg && oldReg.scope === absoluteScope) {
     20          await oldReg.unregister();
     21        }
     22        let reg = await navigator.serviceWorker.register(data.script,
     23                                                         { scope: data.scope });
     24        let worker = reg.installing;
     25        await new Promise(function(resolve) {
     26          worker.addEventListener('statechange', function() {
     27            if (worker.state == 'activated') {
     28              resolve();
     29            }
     30          });
     31        });
     32        assert_not_equals(worker, null, 'worker is installing');
     33 
     34        let result = await loadNestedSharedStorageFrameInNewFrame({
     35          key: 'c', value: 'd',
     36          hasSharedStorageWritableAttribute: true,
     37          // Same-origin to this frame, cross-origin to top.
     38          isSameOrigin: true,
     39        });
     40        const urls = [
     41          {
     42           "url": ORIGIN + data.scope + INTERMEDIATE_FRAME_SUFFIX,
     43           "mode": "navigate",
     44           "SSWHeader": "null"
     45          },
     46          {
     47          "url": ORIGIN + "/resources/testharness.js",
     48          "mode": "no-cors",
     49          "SSWHeader": "null"
     50          },
     51          {
     52            "url":  ORIGIN + result.nestedFrameUrl,
     53            "mode": "navigate",
     54            "SSWHeader": "null"
     55          },
     56        ];
     57        await checkInterceptedUrls(worker, urls);
     58        await verifyKeyValueForOrigin('c', 'd', ORIGIN);
     59        await deleteKeyForOrigin('c', ORIGIN);
     60        data.port.postMessage({msg: 'test completed'});
     61        reg.unregister()
     62        window.removeEventListener('message', handler);
     63      }
     64    });
     65  </script>
     66 </body>