tor-browser

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

sharedworker-multiple.tentative.https.html (2780B)


      1 <!DOCTYPE html>
      2 <meta charset=utf-8>
      3 <meta name="timeout" content="long">
      4 <title>Web Locks API: bfcache</title>
      5 <link rel=help href="https://w3c.github.io/web-locks/">
      6 <script src="/resources/testharness.js"></script>
      7 <script src="/resources/testharnessreport.js"></script>
      8 <script src="/common/utils.js"></script>
      9 <script src="/common/dispatcher/dispatcher.js"></script>
     10 <script src="/html/browsers/browsing-the-web/back-forward-cache/resources/helper.sub.js"></script>
     11 <script>
     12  const connectToSharedWorker = async () => {
     13    await window.pageShowPromise;
     14    window.worker = new SharedWorker("/web-locks/resources/worker.js");
     15    worker.port.start();
     16  }
     17  function double_docs_test(func, description) {
     18    promise_test(async t => {
     19      const pageA1 = new RemoteContext(token());
     20      const pageA2 = new RemoteContext(token());
     21      const pageB1 = new RemoteContext(token());
     22      const pageB2 = new RemoteContext(token());
     23 
     24      const urlA1 = executorPath + pageA1.context_id;
     25      const urlA2 = executorPath + pageA2.context_id;
     26      const urlB1 = originCrossSite + executorPath + pageB1.context_id;
     27      const urlB2 = originCrossSite + executorPath + pageB2.context_id;
     28 
     29      window.open(urlA1, "_blank", "noopener");
     30      window.open(urlA2, "_blank", "noopener");
     31 
     32      await func(pageA1, pageA2);
     33 
     34      await Promise.all([
     35        navigateAndThenBack(pageA1, pageB1, urlB1),
     36        navigateAndThenBack(pageA2, pageB2, urlB2),
     37      ]);
     38 
     39      await assert_not_bfcached(pageA1);
     40      await assert_not_bfcached(pageA2);
     41    }, description);
     42  }
     43 
     44  double_docs_test(async (pageA1, pageA2) => {
     45    await Promise.all([
     46      pageA1.execute_script(connectToSharedWorker),
     47      pageA2.execute_script(connectToSharedWorker),
     48    ]);
     49    await pageA1.execute_script(async () => {
     50      const script = document.createElement("script");
     51      script.src = "/web-locks/resources/helpers.js";
     52      document.head.append(script);
     53      await new Promise(resolve => script.onload = resolve);
     54      await postToWorkerAndWait(worker.port, { op: "request", name: uniqueNameByQuery() });
     55    });
     56  }, "A new held lock must prevent bfcache on all connected documents");
     57 
     58  double_docs_test(async (pageA1, pageA2) => {
     59    await pageA1.execute_script(connectToSharedWorker);
     60    await pageA1.execute_script(async () => {
     61      const script = document.createElement("script");
     62      script.src = "/web-locks/resources/helpers.js";
     63      document.head.append(script);
     64      await new Promise(resolve => script.onload = resolve);
     65      await postToWorkerAndWait(worker.port, { op: "request", name: uniqueNameByQuery() });
     66    });
     67    await pageA2.execute_script(connectToSharedWorker);
     68  }, "An existing held lock must prevent bfcache on all connected documents");
     69 </script>