tor-browser

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

browser_worker_tracer.js (2136B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const wdm = Cc["@mozilla.org/dom/workers/workerdebuggermanager;1"].getService(
      7  Ci.nsIWorkerDebuggerManager
      8 );
      9 
     10 const BASE_URL =
     11  "chrome://mochitests/content/browser/devtools/server/tracer/tests/browser/";
     12 const WORKER_URL = BASE_URL + "Worker.tracer.js";
     13 const WORKER_DEBUGGER_URL = BASE_URL + "WorkerDebugger.tracer.js";
     14 
     15 add_task(async function testTracingWorker() {
     16  const onDbg = waitForWorkerDebugger(WORKER_URL);
     17 
     18  info("Instantiate a regular worker");
     19  const worker = new Worker(WORKER_URL);
     20  info("Wait for worker to reply back");
     21  await new Promise(r => (worker.onmessage = r));
     22  info("Wait for WorkerDebugger to be instantiated");
     23  const dbg = await onDbg;
     24 
     25  const onDebuggerScriptSentFrames = new Promise(resolve => {
     26    const listener = {
     27      onMessage(msg) {
     28        dbg.removeListener(listener);
     29        resolve(JSON.parse(msg));
     30      },
     31    };
     32    dbg.addListener(listener);
     33  });
     34  info("Evaluate a Worker Debugger test script");
     35  dbg.initialize(WORKER_DEBUGGER_URL);
     36 
     37  info("Wait for frames to be notified by the debugger script");
     38  const frames = await onDebuggerScriptSentFrames;
     39 
     40  is(frames.length, 3);
     41  // There is a third frame which relates to the usage of Debugger.Object.executeInGlobal
     42  // which we ignore as that's a test side effect.
     43  const lastFrame = frames.at(-1);
     44  const beforeLastFrame = frames.at(-2);
     45  is(beforeLastFrame.depth, 1);
     46  is(beforeLastFrame.formatedDisplayName, "λ foo");
     47  is(beforeLastFrame.prefix, "testWorkerPrefix: ");
     48  ok(beforeLastFrame.frame);
     49  is(lastFrame.depth, 2);
     50  is(lastFrame.formatedDisplayName, "λ bar");
     51  is(lastFrame.prefix, "testWorkerPrefix: ");
     52  ok(lastFrame.frame);
     53 });
     54 
     55 function waitForWorkerDebugger(url) {
     56  return new Promise(function (resolve) {
     57    wdm.addListener({
     58      onRegister(dbg) {
     59        if (dbg.url !== url) {
     60          return;
     61        }
     62        ok(true, "Debugger with url " + url + " should be registered.");
     63        wdm.removeListener(this);
     64        resolve(dbg);
     65      },
     66    });
     67  });
     68 }