Index: Source/devtools/front_end/SourcesPanel.js |
diff --git a/Source/devtools/front_end/SourcesPanel.js b/Source/devtools/front_end/SourcesPanel.js |
index 3806df3e2885dc91b5aedac35bbf3c91efbb9300..e6b91497a8ae066e2ad63d22f92fe2819bf3842f 100644 |
--- a/Source/devtools/front_end/SourcesPanel.js |
+++ b/Source/devtools/front_end/SourcesPanel.js |
@@ -214,6 +214,13 @@ WebInspector.SourcesPanel = function(workspaceForTest) |
window.addEventListener("beforeunload", handleBeforeUnload.bind(this), true); |
} |
+/** @type {!Array.<!WebInspector.DebuggerModel.PauseOnExceptionsState>} */ |
+WebInspector.SourcesPanel.PauseOnExceptionsStates = [ |
+ WebInspector.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions, |
+ WebInspector.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions, |
+ WebInspector.DebuggerModel.PauseOnExceptionsState.PauseOnAllExceptions |
+]; |
+ |
WebInspector.SourcesPanel.prototype = { |
/** |
* @return {!Element} |
@@ -723,21 +730,66 @@ WebInspector.SourcesPanel.prototype = { |
WebInspector.OpenResourceDialog.show(this, this.editorView.mainElement(), searchText); |
}, |
+ /** |
+ * @return {!Array.<!WebInspector.StatusBarButton>} |
+ */ |
+ _createPauseOnExceptionOptions: function() |
+ { |
+ this._pauseOnExceptionButton.title = this._pauseOnExceptionStateTitle(this._pauseOnExceptionButton.state); |
+ var excludedOption = this._pauseOnExceptionButton.state; |
+ var pauseStates = WebInspector.SourcesPanel.PauseOnExceptionsStates.slice(0); |
+ var options = []; |
+ for (var i = 0; i < pauseStates.length; ++i) { |
+ if (pauseStates[i] === excludedOption) |
+ continue; |
+ var button = new WebInspector.StatusBarButton("", "scripts-pause-on-exceptions-status-bar-item", 3); |
+ button.addEventListener("click", this._togglePauseOnExceptions, this); |
+ button.state = pauseStates[i]; |
+ button.title = this._pauseOnExceptionStateTitle(pauseStates[i]); |
+ options.push(button); |
+ } |
+ return options; |
+ }, |
+ |
_pauseOnExceptionStateChanged: function() |
{ |
- var pauseOnExceptionsState = WebInspector.settings.pauseOnExceptionStateString.get(); |
- switch (pauseOnExceptionsState) { |
- case WebInspector.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions: |
- this._pauseOnExceptionButton.title = WebInspector.UIString("Don't pause on exceptions.\nClick to Pause on all exceptions."); |
- break; |
- case WebInspector.DebuggerModel.PauseOnExceptionsState.PauseOnAllExceptions: |
- this._pauseOnExceptionButton.title = WebInspector.UIString("Pause on all exceptions.\nClick to Pause on uncaught exceptions."); |
- break; |
- case WebInspector.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions: |
- this._pauseOnExceptionButton.title = WebInspector.UIString("Pause on uncaught exceptions.\nClick to Not pause on exceptions."); |
- break; |
+ var state = WebInspector.settings.pauseOnExceptionStateString.get(); |
+ var nextState; |
+ if (state === WebInspector.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions) |
+ nextState = WebInspector.settings.lastPauseOnExceptionState.get(); |
+ else |
+ nextState = WebInspector.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions; |
+ this._pauseOnExceptionButton.title = this._pauseOnExceptionStateTitle(state, nextState); |
+ this._pauseOnExceptionButton.state = state; |
+ }, |
+ |
+ /** |
+ * @param {!WebInspector.DebuggerModel.PauseOnExceptionsState} state |
+ * @param {!WebInspector.DebuggerModel.PauseOnExceptionsState=} nextState |
+ * @return {string} |
+ */ |
+ _pauseOnExceptionStateTitle: function(state, nextState) |
+ { |
+ var states = WebInspector.DebuggerModel.PauseOnExceptionsState; |
+ var stateDescription; |
+ if (state === states.DontPauseOnExceptions) { |
+ stateDescription = WebInspector.UIString("Don't pause on exceptions."); |
+ } else if (state === states.PauseOnAllExceptions) { |
+ stateDescription = WebInspector.UIString("Pause on exceptions, including caught exceptions."); |
+ } else if (state === states.PauseOnUncaughtExceptions) { |
+ stateDescription = WebInspector.UIString("Pause on exceptions."); |
+ } else { |
+ throw "Unexpected state: " + state; |
} |
- this._pauseOnExceptionButton.state = pauseOnExceptionsState; |
+ var nextStateDescription; |
+ if (nextState === states.DontPauseOnExceptions) { |
+ nextStateDescription = WebInspector.UIString("Click to Not pause on exceptions."); |
+ } else if (nextState === states.PauseOnAllExceptions) { |
+ nextStateDescription = WebInspector.UIString("Click to Pause on exceptions, including caught exceptions."); |
+ } else if (nextState === states.PauseOnUncaughtExceptions) { |
+ nextStateDescription = WebInspector.UIString("Click to Pause on exceptions."); |
+ } |
+ return nextState ? String.sprintf("%s\n%s", stateDescription, nextStateDescription) : stateDescription; |
}, |
_updateDebuggerButtons: function() |
@@ -776,14 +828,24 @@ WebInspector.SourcesPanel.prototype = { |
this._updateDebuggerButtons(); |
}, |
- _togglePauseOnExceptions: function() |
+ /** |
+ * @param {!WebInspector.Event} e |
+ */ |
+ _togglePauseOnExceptions: function(e) |
{ |
- var nextStateMap = {}; |
+ var target = /** @type {!WebInspector.StatusBarButton} */ (e.target); |
+ var state = /** @type {!WebInspector.DebuggerModel.PauseOnExceptionsState} */ (target.state); |
+ var toggle = !e.data; |
var stateEnum = WebInspector.DebuggerModel.PauseOnExceptionsState; |
- nextStateMap[stateEnum.DontPauseOnExceptions] = stateEnum.PauseOnAllExceptions; |
- nextStateMap[stateEnum.PauseOnAllExceptions] = stateEnum.PauseOnUncaughtExceptions; |
- nextStateMap[stateEnum.PauseOnUncaughtExceptions] = stateEnum.DontPauseOnExceptions; |
- WebInspector.settings.pauseOnExceptionStateString.set(nextStateMap[this._pauseOnExceptionButton.state]); |
+ if (toggle) { |
+ if (state !== stateEnum.DontPauseOnExceptions) |
+ state = stateEnum.DontPauseOnExceptions |
+ else |
+ state = WebInspector.settings.lastPauseOnExceptionState.get(); |
+ } |
+ if (state !== stateEnum.DontPauseOnExceptions) |
+ WebInspector.settings.lastPauseOnExceptionState.set(state); |
+ WebInspector.settings.pauseOnExceptionStateString.set(state); |
}, |
/** |
@@ -1022,6 +1084,7 @@ WebInspector.SourcesPanel.prototype = { |
// Pause on Exception |
this._pauseOnExceptionButton = new WebInspector.StatusBarButton("", "scripts-pause-on-exceptions-status-bar-item", 3); |
this._pauseOnExceptionButton.addEventListener("click", this._togglePauseOnExceptions, this); |
+ this._pauseOnExceptionButton.setLongClickOptionsEnabled(this._createPauseOnExceptionOptions.bind(this)); |
debugToolbar.appendChild(this._pauseOnExceptionButton.element); |
return debugToolbar; |