tor-browser

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

browser_dbg_listworkers.js (2235B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 Services.prefs.setBoolPref("security.allow_eval_with_system_principal", true);
      7 
      8 registerCleanupFunction(() => {
      9  Services.prefs.clearUserPref("security.allow_eval_with_system_principal");
     10 });
     11 
     12 var TAB_URL = EXAMPLE_URL + "doc_listworkers-tab.html";
     13 var WORKER1_URL = "code_listworkers-worker1.js";
     14 var WORKER2_URL = "code_listworkers-worker2.js";
     15 
     16 add_task(async function test() {
     17  const tab = await addTab(TAB_URL);
     18  const target = await createAndAttachTargetForTab(tab);
     19 
     20  let { workers } = await listWorkers(target);
     21  is(workers.length, 0);
     22 
     23  let onWorkerListChanged = waitForWorkerListChanged(target);
     24  await SpecialPowers.spawn(tab.linkedBrowser, [WORKER1_URL], workerUrl => {
     25    content.worker1 = new content.Worker(workerUrl);
     26  });
     27  await onWorkerListChanged;
     28 
     29  ({ workers } = await listWorkers(target));
     30  is(workers.length, 1);
     31  is(workers[0].url, WORKER1_URL);
     32 
     33  onWorkerListChanged = waitForWorkerListChanged(target);
     34  await SpecialPowers.spawn(tab.linkedBrowser, [WORKER2_URL], workerUrl => {
     35    content.worker2 = new content.Worker(workerUrl);
     36  });
     37  await onWorkerListChanged;
     38 
     39  ({ workers } = await listWorkers(target));
     40  is(workers.length, 2);
     41  is(workers[0].url, WORKER1_URL);
     42  is(workers[1].url, WORKER2_URL);
     43 
     44  onWorkerListChanged = waitForWorkerListChanged(target);
     45  await SpecialPowers.spawn(tab.linkedBrowser, [WORKER2_URL], () => {
     46    content.worker1.terminate();
     47  });
     48  await onWorkerListChanged;
     49 
     50  ({ workers } = await listWorkers(target));
     51  is(workers.length, 1);
     52  is(workers[0].url, WORKER2_URL);
     53 
     54  onWorkerListChanged = waitForWorkerListChanged(target);
     55  await SpecialPowers.spawn(tab.linkedBrowser, [WORKER2_URL], () => {
     56    content.worker2.terminate();
     57  });
     58  await onWorkerListChanged;
     59 
     60  ({ workers } = await listWorkers(target));
     61  is(workers.length, 0);
     62 
     63  await target.destroy();
     64  finish();
     65 });
     66 
     67 function listWorkers(targetFront) {
     68  info("Listing workers.");
     69  return targetFront.listWorkers();
     70 }
     71 
     72 function waitForWorkerListChanged(targetFront) {
     73  info("Waiting for worker list to change.");
     74  return targetFront.once("workerListChanged");
     75 }