3 Any copyright is dedicated to the Public Domain.
4 http://creativecommons.org/publicdomain/zero/1.0/
6 <window title=
"Test for WorkerDebuggerGlobalScope.enterEventLoop"
7 xmlns=
"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
10 <script src=
"chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
11 <script src=
"chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
12 <script type=
"application/javascript" src=
"dom_worker_helper.js"/>
14 <script type=
"application/javascript">
17 const WORKER_URL =
"WorkerDebuggerGlobalScope.enterEventLoop_worker.js";
18 const CHILD_WORKER_URL =
"WorkerDebuggerGlobalScope.enterEventLoop_childWorker.js";
19 const DEBUGGER_URL = BASE_URL +
"WorkerDebuggerGlobalScope.enterEventLoop_debugger.js";
23 SimpleTest.waitForExplicitFinish();
25 info(
"Create a worker that creates a child worker, wait for their " +
26 "debuggers to be registered, and initialize them.");
27 let promise = waitForMultiple([
28 waitForRegister(WORKER_URL, DEBUGGER_URL),
29 waitForRegister(CHILD_WORKER_URL, DEBUGGER_URL)
31 let worker = new Worker(WORKER_URL);
32 let [dbg, childDbg] = await promise;
34 info(
"Send a request to the child worker. This should cause the " +
35 "child worker debugger to enter a nested event loop.");
36 promise = waitForDebuggerMessage(childDbg,
"paused");
37 worker.postMessage(
"child:ping");
40 info(
"Send a request to the child worker debugger. This should cause " +
41 "the child worker debugger to enter a second nested event loop.");
42 promise = waitForDebuggerMessage(childDbg,
"paused");
43 childDbg.postMessage(
"eval");
46 info(
"Send a request to the child worker debugger. This should cause " +
47 "the child worker debugger to leave its second nested event " +
48 "loop. The child worker debugger should not send a response " +
49 "for its previous request until after it has left the nested " +
51 promise = waitForMultiple([
52 waitForDebuggerMessage(childDbg,
"resumed"),
53 waitForDebuggerMessage(childDbg,
"evalled")
55 childDbg.postMessage(
"resume");
58 info(
"Send a request to the child worker debugger. This should cause " +
59 "the child worker debugger to leave its first nested event loop." +
60 "The child worker should not send a response for its earlier " +
61 "request until after the child worker debugger has left the " +
62 "nested event loop.");
63 promise = waitForMultiple([
64 waitForDebuggerMessage(childDbg,
"resumed"),
65 waitForWorkerMessage(worker,
"child:pong")
67 childDbg.postMessage(
"resume");
70 info(
"Send a request to the worker. This should cause the worker " +
71 "debugger to enter a nested event loop.");
72 promise = waitForDebuggerMessage(dbg,
"paused");
73 worker.postMessage(
"ping");
76 info(
"Terminate the worker. This should not cause the worker " +
77 "debugger to terminate as well.");
80 worker.onmessage = function () {
81 ok(false,
"Worker should have been terminated.");
84 info(
"Send a request to the worker debugger. This should cause the " +
85 "worker debugger to enter a second nested event loop.");
86 promise = waitForDebuggerMessage(dbg,
"paused");
87 dbg.postMessage(
"eval");
90 info(
"Send a request to the worker debugger. This should cause the " +
91 "worker debugger to leave its second nested event loop. The " +
92 "worker debugger should not send a response for the previous " +
93 "request until after leaving the nested event loop.");
94 promise = waitForMultiple([
95 waitForDebuggerMessage(dbg,
"resumed"),
96 waitForDebuggerMessage(dbg,
"evalled")
98 dbg.postMessage(
"resume");
101 info(
"Send a request to the worker debugger. This should cause the " +
102 "worker debugger to leave its first nested event loop. The " +
103 "worker should not send a response for its earlier request, " +
104 "since it has been terminated.");
105 promise = waitForMultiple([
106 waitForDebuggerMessage(dbg,
"resumed"),
108 dbg.postMessage(
"resume");
118 <body xmlns=
"http://www.w3.org/1999/xhtml">
120 <div id=
"content" style=
"display:none;"></div>
121 <pre id=
"test"></pre>
123 <label id=
"test-result"/>