michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: /** michael@0: * Test that closing a window with the debugger in a paused state exits cleanly. michael@0: */ michael@0: michael@0: let gDebuggee, gPanel, gDebugger, gWindow; michael@0: michael@0: const TAB_URL = EXAMPLE_URL + "doc_inline-debugger-statement.html"; michael@0: michael@0: function test() { michael@0: addWindow(TAB_URL) michael@0: .then(win => initDebugger(TAB_URL, win)) michael@0: .then(([aTab, aDebuggee, aPanel, aWindow]) => { michael@0: gDebuggee = aDebuggee; michael@0: gPanel = aPanel; michael@0: gDebugger = gPanel.panelWin; michael@0: gWindow = aWindow; michael@0: michael@0: return testCleanExit(); michael@0: }) michael@0: .then(null, aError => { michael@0: ok(false, "Got an error: " + aError.message + "\n" + aError.stack); michael@0: }); michael@0: } michael@0: michael@0: function testCleanExit() { michael@0: let deferred = promise.defer(); michael@0: michael@0: ok(!!gWindow, "Second window created."); michael@0: michael@0: gWindow.focus(); michael@0: michael@0: is(Services.wm.getMostRecentWindow("navigator:browser"), gWindow, michael@0: "The second window is on top."); michael@0: michael@0: let isActive = promise.defer(); michael@0: let isLoaded = promise.defer(); michael@0: michael@0: promise.all([isActive.promise, isLoaded.promise]).then(() => { michael@0: gWindow.BrowserChromeTest.runWhenReady(() => { michael@0: waitForSourceAndCaretAndScopes(gPanel, ".html", 16).then(() => { michael@0: is(gDebugger.gThreadClient.paused, true, michael@0: "Should be paused after the debugger statement."); michael@0: gWindow.close(); michael@0: deferred.resolve(); michael@0: finish(); michael@0: }); michael@0: michael@0: gDebuggee.runDebuggerStatement(); michael@0: }); michael@0: }); michael@0: michael@0: let focusManager = Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager); michael@0: if (focusManager.activeWindow != gWindow) { michael@0: gWindow.addEventListener("activate", function onActivate(aEvent) { michael@0: if (aEvent.target != gWindow) { michael@0: return; michael@0: } michael@0: gWindow.removeEventListener("activate", onActivate, true); michael@0: isActive.resolve(); michael@0: }, true); michael@0: } else { michael@0: isActive.resolve(); michael@0: } michael@0: michael@0: if (gWindow.content.location.href != TAB_URL) { michael@0: gWindow.document.addEventListener("load", function onLoad(aEvent) { michael@0: if (aEvent.target.documentURI != TAB_URL) { michael@0: return; michael@0: } michael@0: gWindow.document.removeEventListener("load", onLoad, true); michael@0: isLoaded.resolve(); michael@0: }, true); michael@0: } else { michael@0: isLoaded.resolve(); michael@0: } michael@0: return deferred.promise; michael@0: } michael@0: michael@0: registerCleanupFunction(function() { michael@0: gWindow = null; michael@0: gDebuggee = null; michael@0: gPanel = null; michael@0: gDebugger = null; michael@0: });