tor-browser

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

shared-storage-writable-service-worker-iframe.tentative.https.sub.html (3711B)


      1 <!doctype html>
      2 <body>
      3  <script src=/resources/testharness.js></script>
      4  <script src=/resources/testharnessreport.js></script>
      5  <script src=/common/utils.js></script>
      6  <script src=/fenced-frame/resources/utils.js></script>
      7  <script src=/shared-storage/resources/util.js></script>
      8  <script src=/shared-storage/resources/util.sub.js></script>
      9  <script src=/service-workers/service-worker/resources/test-helpers.sub.js></script>
     10  <script>
     11    const SCOPE = '/shared-storage/resources/shared-storage-writ';
     12    const INTERMEDIATE_FRAME_SUFFIX =
     13      'able-fetch-request-fallback-to-network-iframe.https.html'
     14    const SCRIPT = '/shared-storage/resources/'
     15      + 'shared-storage-writable-fetch-request-fallback-to-network-worker.js';
     16    const WORKER_FRAME = '/shared-storage/resources/'
     17      + 'register-service-worker-iframe.https.html';
     18    const SAME_ORIGIN = new URL("", location.href).origin;
     19    const CROSS_ORIGIN = 'https://{{domains[www]}}:{{ports[https][0]}}';
     20 
     21    promise_test(async t => {
     22      await service_worker_unregister(t, SCOPE);
     23      let reg = await navigator.serviceWorker.register(SCRIPT,
     24                                                       { scope: SCOPE });
     25      t.add_cleanup(_ => reg.unregister());
     26      let worker = reg.installing;
     27      await wait_for_state(t, worker, 'activated');
     28      assert_not_equals(worker, null, 'worker is installing');
     29 
     30      let {frame, nestedFrame, nestedFrameUrl} =
     31        await loadNestedSharedStorageFrameInNewFrame({
     32          key: 'a', value: 'b',
     33          hasSharedStorageWritableAttribute: true,
     34          isSameOrigin: true,
     35        });
     36      t.add_cleanup(function() {
     37        frame.remove();
     38      });
     39      checkInterceptedUrls(worker, [
     40        {
     41           "url": SAME_ORIGIN + SCOPE + INTERMEDIATE_FRAME_SUFFIX,
     42           "mode": "navigate",
     43           "SSWHeader": "null"
     44        },
     45        {
     46          "url": SAME_ORIGIN + "/resources/testharness.js",
     47          "mode": "no-cors",
     48          "SSWHeader": "null"
     49        },
     50        {
     51          "url": SAME_ORIGIN + nestedFrameUrl,
     52          "mode": "navigate",
     53          "SSWHeader": "null"
     54        },
     55      ]);
     56      await verifyKeyValueForOrigin('a', 'b', SAME_ORIGIN);
     57      await deleteKeyForOrigin('a', SAME_ORIGIN);
     58    }, 'test <iframe sharedstoragewritable src=[url]> via JS from service '
     59       + 'worker for same origin iframe');
     60 
     61    promise_test(async t => {
     62      const workerFramePromise = new Promise((resolve, reject) => {
     63        let workerFrame = document.createElement('iframe');
     64        workerFrame.src = CROSS_ORIGIN + WORKER_FRAME;
     65        workerFrame.id = 'worker_frame';
     66        workerFrame.onload = function() {
     67          resolve(workerFrame);
     68        };
     69        workerFrame.onerror = function() {
     70          reject(new Error('Worker frame load failed'));
     71        };
     72        t.add_cleanup(function() {
     73          workerFrame.remove();
     74        });
     75        document.body.appendChild(workerFrame);
     76      });
     77      let workerFrame = await workerFramePromise;
     78 
     79      const messagePromise = new Promise((resolve, reject) => {
     80        let channel = new MessageChannel();
     81        channel.port1.onmessage = function(e) {
     82          resolve(e.data);
     83        };
     84        let message = {
     85            script: SCRIPT,
     86            scope: SCOPE,
     87            port: channel.port2,
     88        };
     89        document.getElementById('worker_frame').contentWindow
     90          .postMessage(message, "*",
     91                       [channel.port2]);
     92      });
     93      let {msg} = await messagePromise;
     94      assert_equals(msg, 'test completed');
     95    }, 'test <iframe sharedstoragewritable src=[url]> via JS from service '
     96       + 'worker for cross origin iframe');
     97  </script>
     98 </body>