tor-browser

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

browser_WorkerDebugger_waiting.initialize.js (2359B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 const wdm = Cc["@mozilla.org/dom/workers/workerdebuggermanager;1"].getService(
      6  Ci.nsIWorkerDebuggerManager
      7 );
      8 
      9 const BASE_URL = "chrome://mochitests/content/browser/dom/workers/test/";
     10 const WORKER_URL = BASE_URL + "WorkerDebugger.initialize_waiting_worker.js";
     11 const DEBUGGER_URL = BASE_URL + "WorkerDebugger.initialize_waiting_debugger.js";
     12 
     13 add_task(async function test() {
     14  const onDbg = waitForRegister(WORKER_URL);
     15  const worker = new Worker(WORKER_URL);
     16 
     17  // Wait for the worker to be initialized and have called Atomics.wait
     18  // otherwise WorkerDebugger.initialize may evaluate the debugger script
     19  // before the worker is paused on wait().
     20  info("Wait for worker to be initialized");
     21  await new Promise(resolve => {
     22    worker.onmessage = resolve;
     23  });
     24  const dbg = await onDbg;
     25 
     26  info("Calling WorkerDebugger::Initialize");
     27  const onDebuggerScriptEvaluated = new Promise(resolve => {
     28    const listener = {
     29      onMessage(msg) {
     30        is(msg, "debugger script ran");
     31        dbg.removeListener(listener);
     32        resolve();
     33      },
     34    };
     35    dbg.addListener(listener);
     36  });
     37  dbg.initialize(DEBUGGER_URL);
     38  ok(true, "dbg.initialize didn't throw");
     39 
     40  info("Waiting for debugger script to be evaluated and dispatching a message");
     41  await onDebuggerScriptEvaluated;
     42 
     43  info("Terminating the worker and waiting for it to be unregistered");
     44  const onUnregistered = waitForUnregister(WORKER_URL);
     45  worker.terminate();
     46  await onUnregistered;
     47 });
     48 
     49 function waitForRegister(url, dbgUrl) {
     50  return new Promise(function (resolve) {
     51    wdm.addListener({
     52      onRegister(dbg) {
     53        if (dbg.url !== url) {
     54          return;
     55        }
     56        ok(true, "Debugger with url " + url + " should be registered.");
     57        wdm.removeListener(this);
     58        resolve(dbg);
     59      },
     60    });
     61  });
     62 }
     63 
     64 function waitForUnregister(url) {
     65  return new Promise(function (resolve) {
     66    wdm.addListener({
     67      onUnregister(dbg) {
     68        if (dbg.url !== url) {
     69          return;
     70        }
     71        ok(true, "Debugger with url " + url + " should be unregistered.");
     72        wdm.removeListener(this);
     73        resolve();
     74      },
     75    });
     76  });
     77 }