test_WorkerDebugger_suspended.xul 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?xml version="1.0"?>
  2. <!--
  3. Any copyright is dedicated to the Public Domain.
  4. http://creativecommons.org/publicdomain/zero/1.0/
  5. -->
  6. <window title="Test for WorkerDebugger with suspended workers"
  7. xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
  8. onload="test();">
  9. <script type="application/javascript"
  10. src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
  11. <script type="application/javascript"
  12. src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
  13. <script type="application/javascript" src="dom_worker_helper.js"/>
  14. <script type="application/javascript">
  15. <![CDATA[
  16. const WORKER_URL = "WorkerDebugger_suspended_worker.js";
  17. const DEBUGGER_URL = BASE_URL + "WorkerDebugger_suspended_debugger.js";
  18. function test() {
  19. Task.spawn(function* () {
  20. SimpleTest.waitForExplicitFinish();
  21. info("Create a worker, wait for its debugger to be registered, and " +
  22. "initialize it.");
  23. let promise = waitForRegister(WORKER_URL, DEBUGGER_URL);
  24. let worker = new Worker(WORKER_URL);
  25. let dbg = yield promise;
  26. info("Send a request to the worker. This should cause both the " +
  27. "worker and the worker debugger to send a response.");
  28. promise = waitForMultiple([
  29. waitForWorkerMessage(worker, "worker"),
  30. waitForDebuggerMessage(dbg, "debugger")
  31. ]);
  32. worker.postMessage("ping");
  33. yield promise;
  34. info("Suspend the workers for this window, and send another request " +
  35. "to the worker. This should cause only the worker debugger to " +
  36. "send a response.");
  37. let windowUtils = window.QueryInterface(Ci.nsIInterfaceRequestor)
  38. .getInterface(Ci.nsIDOMWindowUtils);
  39. windowUtils.suspendTimeouts();
  40. function onmessage() {
  41. ok(false, "The worker should not send a response.");
  42. };
  43. worker.addEventListener("message", onmessage);
  44. promise = waitForDebuggerMessage(dbg, "debugger");
  45. worker.postMessage("ping");
  46. yield promise;
  47. worker.removeEventListener("message", onmessage);
  48. info("Resume the workers for this window. This should cause the " +
  49. "worker to send a response to the previous request.");
  50. promise = waitForWorkerMessage(worker, "worker");
  51. windowUtils.resumeTimeouts();
  52. yield promise;
  53. SimpleTest.finish();
  54. });
  55. }
  56. ]]>
  57. </script>
  58. <body xmlns="http://www.w3.org/1999/xhtml">
  59. <p id="display"></p>
  60. <div id="content" style="display:none;"></div>
  61. <pre id="test"></pre>
  62. </body>
  63. <label id="test-result"/>
  64. </window>