tor-browser

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

SharedWorker-extendedLifetime.html (1950B)


      1 <!DOCTYPE html>
      2 <title>SharedWorker extendedLifetime</title>
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <script src="/common/utils.js"></script>
      6 <script src="/common/dispatcher/dispatcher.js"></script>
      7 <script>
      8 
      9 let request_id = 0;
     10 
     11 const connectToSharedWorker = async () => {
     12  await window.pageShowPromise;
     13  window.worker = new SharedWorker(
     14    '/workers/tentative/resources/shared-worker-memory.js',
     15    {extendedLifetime: true});
     16  worker.port.start();
     17 };
     18 
     19 const postAndWait = async (data) => {
     20  return new Promise(resolve => {
     21    const listener = event => {
     22      if (event.data.reqid !== data.reqid) {
     23        return;
     24      }
     25      worker.port.removeEventListener('message', listener);
     26      resolve(event.data);
     27    };
     28    worker.port.addEventListener('message', listener);
     29    worker.port.postMessage(data);
     30  });
     31 };
     32 
     33 promise_test(async t => {
     34  // SharedWorker is started with the extendedLifetime option.
     35  // random message is stored there, which can be read later.
     36  const uuid = token();
     37  const ctx = new RemoteContext(token());
     38  const popup = window.open(remoteExecutorUrl(ctx.context_id));
     39  await ctx.execute_script(connectToSharedWorker);
     40  const popup_response = await ctx.execute_script(postAndWait, [{
     41    reqid: request_id++,
     42    op: 'store',
     43    data: uuid,
     44  }]);
     45  assert_equals(popup_response.status, 'OK');
     46  popup.close();
     47 
     48  // Wait for a second.
     49  await new Promise(resolve => setTimeout(resolve, 1));
     50 
     51  const ctx2 = new RemoteContext(token());
     52  const popup2 = window.open(remoteExecutorUrl(ctx2.context_id));
     53  await ctx2.execute_script(connectToSharedWorker);
     54  const popup2_response = await ctx2.execute_script(postAndWait, [{
     55    reqid: request_id++,
     56    op: 'load',
     57  }]);
     58  assert_equals(popup2_response.status, 'OK');
     59  assert_equals(popup2_response.data, uuid);
     60 }, "SharedWorker lifetime should be extended with extendedLifetime");
     61 </script>