/* -*- js-indent-level: 2; indent-tabs-mode: nil -*- */ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ // Test that we can nest event loops when needed in // ThreadActor.prototype.unsafeSynchronize. var gClient; var gThreadActor; function run_test() { initTestDebuggerServer(); let gDebuggee = addTestGlobal("test-nesting"); gClient = new DebuggerClient(DebuggerServer.connectPipe()); gClient.connect().then(function () { attachTestTabAndResume(gClient, "test-nesting", function (aResponse, aTabClient, aThreadClient) { // Reach over the protocol connection and get a reference to the thread actor. gThreadActor = aThreadClient._transport._serverConnection.getActor(aThreadClient._actor); test_nesting(); }); }); do_test_pending(); } function test_nesting() { const thread = gThreadActor; const { resolve, reject, promise: p } = promise.defer(); let currentStep = 0; executeSoon(function () { // Should be on the first step do_check_eq(++currentStep, 1); // We should have one nested event loop from unsfeSynchronize do_check_eq(thread._nestedEventLoops.size, 1); resolve(true); }); do_check_eq(thread.unsafeSynchronize(p), true); // Should be on the second step do_check_eq(++currentStep, 2); // There shouldn't be any nested event loops anymore do_check_eq(thread._nestedEventLoops.size, 0); finishClient(gClient); }