michael@0: /* -*- Mode: javascript; js-indent-level: 2; -*- */ michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: // Test that we can detect nested event loops in tabs with the same URL. michael@0: michael@0: var gClient1, gClient2, gThreadClient1, gThreadClient2; michael@0: michael@0: function run_test() { michael@0: initTestDebuggerServer(); michael@0: addTestGlobal("test-nesting1"); michael@0: addTestGlobal("test-nesting1"); michael@0: // Conect the first client to the first debuggee. michael@0: gClient1 = new DebuggerClient(DebuggerServer.connectPipe()); michael@0: gClient1.connect(function () { michael@0: attachTestThread(gClient1, "test-nesting1", function (aResponse, aTabClient, aThreadClient) { michael@0: gThreadClient1 = aThreadClient; michael@0: start_second_connection(); michael@0: }); michael@0: }); michael@0: do_test_pending(); michael@0: } michael@0: michael@0: function start_second_connection() { michael@0: gClient2 = new DebuggerClient(DebuggerServer.connectPipe()); michael@0: gClient2.connect(function () { michael@0: attachTestThread(gClient2, "test-nesting1", function (aResponse, aTabClient, aThreadClient) { michael@0: gThreadClient2 = aThreadClient; michael@0: test_nesting(); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: function test_nesting() { michael@0: const { resolve, reject, promise: p } = promise.defer(); michael@0: michael@0: gThreadClient1.resume(aResponse => { michael@0: do_check_eq(aResponse.error, "wrongOrder"); michael@0: gThreadClient2.resume(aResponse => { michael@0: do_check_true(!aResponse.error); michael@0: do_check_eq(aResponse.from, gThreadClient2.actor); michael@0: michael@0: gThreadClient1.resume(aResponse => { michael@0: do_check_true(!aResponse.error); michael@0: do_check_eq(aResponse.from, gThreadClient1.actor); michael@0: michael@0: gClient1.close(() => finishClient(gClient2)); michael@0: }); michael@0: }); michael@0: }); michael@0: }