From 35ac9883a0054ca1ddaf48ee5ddba0c786735c2f Mon Sep 17 00:00:00 2001 From: Panos Astithas Date: Fri, 17 Feb 2012 10:15:43 +0200 Subject: [PATCH] Bug 725360 - Closing the tab when the debugger is paused should cleanly exit the debugger; r=rcampbell --- browser/devtools/debugger/test/Makefile.in | 1 + .../debugger/test/browser_dbg_clean-exit.js | 42 +++++++++++++++++++ .../debugger/server/dbg-script-actors.js | 4 ++ 3 files changed, 47 insertions(+) create mode 100644 browser/devtools/debugger/test/browser_dbg_clean-exit.js diff --git a/browser/devtools/debugger/test/Makefile.in b/browser/devtools/debugger/test/Makefile.in index 5fded0cdd638..d85d66682858 100644 --- a/browser/devtools/debugger/test/Makefile.in +++ b/browser/devtools/debugger/test/Makefile.in @@ -72,6 +72,7 @@ _BROWSER_TEST_FILES = \ browser_dbg_pause-resume.js \ browser_dbg_update-editor-mode.js \ browser_dbg_select-line.js \ + browser_dbg_clean-exit.js \ head.js \ $(NULL) diff --git a/browser/devtools/debugger/test/browser_dbg_clean-exit.js b/browser/devtools/debugger/test/browser_dbg_clean-exit.js new file mode 100644 index 000000000000..9530cc8f4cd5 --- /dev/null +++ b/browser/devtools/debugger/test/browser_dbg_clean-exit.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// Test that closing a tab with the debugger in a paused state exits cleanly. + +var gPane = null; +var gTab = null; +var gDebuggee = null; +var gDebugger = null; + +const DEBUGGER_TAB_URL = "http://example.com/browser/browser/devtools/" + + "debugger/test/" + + "browser_dbg_debuggerstatement.html"; + +function test() { + debug_tab_pane(DEBUGGER_TAB_URL, function(aTab, aDebuggee, aPane) { + gTab = aTab; + gDebuggee = aDebuggee; + gPane = aPane; + gDebugger = gPane.debuggerWindow; + + testCleanExit(); + }); +} + +function testCleanExit() { + gPane.activeThread.addOneTimeListener("framesadded", function() { + Services.tm.currentThread.dispatch({ run: function() { + is(gDebugger.StackFrames.activeThread.paused, true, + "Should be paused after the debugger statement."); + + gPane._client.addOneTimeListener("tabDetached", function () { + finish(); + }); + removeTab(gTab); + }}, 0); + }); + + gTab.linkedBrowser.contentWindow.wrappedJSObject.runDebuggerStatement(); +} diff --git a/toolkit/devtools/debugger/server/dbg-script-actors.js b/toolkit/devtools/debugger/server/dbg-script-actors.js index e11211a45418..3238f75afa92 100644 --- a/toolkit/devtools/debugger/server/dbg-script-actors.js +++ b/toolkit/devtools/debugger/server/dbg-script-actors.js @@ -120,6 +120,10 @@ ThreadActor.prototype = { }, disconnect: function TA_disconnect() { + if (this._state == "paused") { + this.onResume(); + } + this._state = "exited"; if (this.dbg) { this.dbg.enabled = false;