summaryrefslogtreecommitdiffstats
path: root/devtools/server/tests/xpcshell/test_nesting-01.js
blob: 6c5e518d894c1cd90d7c04edc87e26af7bbf6796 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

// Test that we can nest event loops when needed in
// ThreadActor.prototype.unsafeSynchronize.

add_task(
  threadFrontTest(async ({ threadFront, client }) => {
    // Reach over the protocol connection and get a reference to the thread actor.
    // TODO: rewrite the test so we don't do this..
    const thread = client._transport._serverConnection.getActor(
      threadFront.actorID
    );

    test_nesting(thread);
  })
);

function test_nesting(thread) {
  let currentStep = 0;
  const p = new Promise(resolve => {
    executeSoon(function() {
      // Should be on the first step
      Assert.equal(++currentStep, 1);
      // We should have one nested event loop from unsfeSynchronize
      Assert.equal(thread._nestedEventLoops.size, 1);
      resolve(true);
    });
  });

  Assert.equal(thread.unsafeSynchronize(p), true);

  // Should be on the second step
  Assert.equal(++currentStep, 2);
  // There shouldn't be any nested event loops anymore
  Assert.equal(thread._nestedEventLoops.size, 0);
}