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 }