tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>