test_WorkerDebuggerGlobalScope.enterEventLoop.xhtml (5005B)
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 WorkerDebuggerGlobalScope.enterEventLoop" 7 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" 8 onload="test();"> 9 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"/> 13 14 <script type="application/javascript"> 15 <![CDATA[ 16 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"; 20 21 function test() { 22 (async function() { 23 SimpleTest.waitForExplicitFinish(); 24 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) 30 ]); 31 let worker = new Worker(WORKER_URL); 32 let [dbg, childDbg] = await promise; 33 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"); 38 await promise; 39 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"); 44 await promise; 45 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 " + 50 "event loop."); 51 promise = waitForMultiple([ 52 waitForDebuggerMessage(childDbg, "resumed"), 53 waitForDebuggerMessage(childDbg, "evalled") 54 ]); 55 childDbg.postMessage("resume"); 56 await promise; 57 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") 66 ]); 67 childDbg.postMessage("resume"); 68 await promise; 69 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"); 74 await promise; 75 76 info("Terminate the worker. This should not cause the worker " + 77 "debugger to terminate as well."); 78 worker.terminate(); 79 80 worker.onmessage = function () { 81 ok(false, "Worker should have been terminated."); 82 }; 83 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"); 88 await promise; 89 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") 97 ]); 98 dbg.postMessage("resume"); 99 await promise; 100 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"), 107 ]); 108 dbg.postMessage("resume"); 109 await promise; 110 111 SimpleTest.finish(); 112 })(); 113 } 114 115 ]]> 116 </script> 117 118 <body xmlns="http://www.w3.org/1999/xhtml"> 119 <p id="display"></p> 120 <div id="content" style="display:none;"></div> 121 <pre id="test"></pre> 122 </body> 123 <label id="test-result"/> 124 </window>