123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- <?xml version="1.0"?>
- <!--
- Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/
- -->
- <window title="Test for WorkerDebuggerGlobalScope.enterEventLoop"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- onload="test();">
- <script type="application/javascript"
- src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
- <script type="application/javascript"
- src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
- <script type="application/javascript" src="dom_worker_helper.js"/>
- <script type="application/javascript">
- <![CDATA[
- const WORKER_URL = "WorkerDebuggerGlobalScope.enterEventLoop_worker.js";
- const CHILD_WORKER_URL = "WorkerDebuggerGlobalScope.enterEventLoop_childWorker.js";
- const DEBUGGER_URL = BASE_URL + "WorkerDebuggerGlobalScope.enterEventLoop_debugger.js";
- function test() {
- Task.spawn(function* () {
- SimpleTest.waitForExplicitFinish();
- info("Create a worker that creates a child worker, wait for their " +
- "debuggers to be registered, and initialize them.");
- let promise = waitForMultiple([
- waitForRegister(WORKER_URL, DEBUGGER_URL),
- waitForRegister(CHILD_WORKER_URL, DEBUGGER_URL)
- ]);
- let worker = new Worker(WORKER_URL);
- let [dbg, childDbg] = yield promise;
- info("Send a request to the child worker. This should cause the " +
- "child worker debugger to enter a nested event loop.");
- promise = waitForDebuggerMessage(childDbg, "paused");
- worker.postMessage("child:ping");
- yield promise;
- info("Send a request to the child worker debugger. This should cause " +
- "the child worker debugger to enter a second nested event loop.");
- promise = waitForDebuggerMessage(childDbg, "paused");
- childDbg.postMessage("eval");
- yield promise;
- info("Send a request to the child worker debugger. This should cause " +
- "the child worker debugger to leave its second nested event " +
- "loop. The child worker debugger should not send a response " +
- "for its previous request until after it has left the nested " +
- "event loop.");
- promise = waitForMultiple([
- waitForDebuggerMessage(childDbg, "resumed"),
- waitForDebuggerMessage(childDbg, "evalled")
- ]);
- childDbg.postMessage("resume");
- yield promise;
- info("Send a request to the child worker debugger. This should cause " +
- "the child worker debugger to leave its first nested event loop." +
- "The child worker should not send a response for its earlier " +
- "request until after the child worker debugger has left the " +
- "nested event loop.");
- promise = waitForMultiple([
- waitForDebuggerMessage(childDbg, "resumed"),
- waitForWorkerMessage(worker, "child:pong")
- ]);
- childDbg.postMessage("resume");
- yield promise;
- info("Send a request to the worker. This should cause the worker " +
- "debugger to enter a nested event loop.");
- promise = waitForDebuggerMessage(dbg, "paused");
- worker.postMessage("ping");
- yield promise;
- info("Terminate the worker. This should not cause the worker " +
- "debugger to terminate as well.");
- worker.terminate();
- worker.onmessage = function () {
- ok(false, "Worker should have been terminated.");
- };
- info("Send a request to the worker debugger. This should cause the " +
- "worker debugger to enter a second nested event loop.");
- promise = waitForDebuggerMessage(dbg, "paused");
- dbg.postMessage("eval");
- yield promise;
- info("Send a request to the worker debugger. This should cause the " +
- "worker debugger to leave its second nested event loop. The " +
- "worker debugger should not send a response for the previous " +
- "request until after leaving the nested event loop.");
- promise = waitForMultiple([
- waitForDebuggerMessage(dbg, "resumed"),
- waitForDebuggerMessage(dbg, "evalled")
- ]);
- dbg.postMessage("resume");
- yield promise;
- info("Send a request to the worker debugger. This should cause the " +
- "worker debugger to leave its first nested event loop. The " +
- "worker should not send a response for its earlier request, " +
- "since it has been terminated.");
- promise = waitForMultiple([
- waitForDebuggerMessage(dbg, "resumed"),
- ]);
- dbg.postMessage("resume");
- yield promise;
- SimpleTest.finish();
- });
- }
- ]]>
- </script>
- <body xmlns="http://www.w3.org/1999/xhtml">
- <p id="display"></p>
- <div id="content" style="display:none;"></div>
- <pre id="test"></pre>
- </body>
- <label id="test-result"/>
- </window>
|