summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/inspector/front-end/DebuggerModel.js
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/inspector/front-end/DebuggerModel.js')
-rw-r--r--Source/WebCore/inspector/front-end/DebuggerModel.js261
1 files changed, 78 insertions, 183 deletions
diff --git a/Source/WebCore/inspector/front-end/DebuggerModel.js b/Source/WebCore/inspector/front-end/DebuggerModel.js
index d31ff24..c1d59b1 100644
--- a/Source/WebCore/inspector/front-end/DebuggerModel.js
+++ b/Source/WebCore/inspector/front-end/DebuggerModel.js
@@ -30,8 +30,7 @@
WebInspector.DebuggerModel = function()
{
- this._paused = false;
- this._callFrames = [];
+ this._debuggerPausedDetails = {};
this._breakpoints = {};
this._scripts = {};
@@ -39,31 +38,20 @@ WebInspector.DebuggerModel = function()
}
WebInspector.DebuggerModel.Events = {
+ DebuggerWasEnabled: "debugger-was-enabled",
+ DebuggerWasDisabled: "debugger-was-disabled",
DebuggerPaused: "debugger-paused",
DebuggerResumed: "debugger-resumed",
ParsedScriptSource: "parsed-script-source",
FailedToParseScriptSource: "failed-to-parse-script-source",
- ScriptSourceChanged: "script-source-changed",
- BreakpointAdded: "breakpoint-added",
- BreakpointRemoved: "breakpoint-removed",
- BreakpointResolved: "breakpoint-resolved"
+ BreakpointResolved: "breakpoint-resolved",
+ Reset: "reset"
}
WebInspector.DebuggerModel.prototype = {
enableDebugger: function()
{
DebuggerAgent.enable();
- if (this._breakpointsPushedToBackend)
- return;
- var breakpoints = WebInspector.settings.breakpoints;
- for (var i = 0; i < breakpoints.length; ++i) {
- var breakpoint = breakpoints[i];
- if (typeof breakpoint.url !== "string" || typeof breakpoint.lineNumber !== "number" || typeof breakpoint.columnNumber !== "number" ||
- typeof breakpoint.condition !== "string" || typeof breakpoint.enabled !== "boolean")
- continue;
- this.setBreakpoint(breakpoint.url, breakpoint.lineNumber, breakpoint.columnNumber, breakpoint.condition, breakpoint.enabled);
- }
- this._breakpointsPushedToBackend = true;
},
disableDebugger: function()
@@ -71,120 +59,98 @@ WebInspector.DebuggerModel.prototype = {
DebuggerAgent.disable();
},
+ _debuggerWasEnabled: function()
+ {
+ this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerWasEnabled);
+ },
+
+ _debuggerWasDisabled: function()
+ {
+ this._breakpoints = {};
+ this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerWasDisabled);
+ },
+
continueToLocation: function(sourceID, lineNumber, columnNumber)
{
DebuggerAgent.continueToLocation(sourceID, lineNumber, columnNumber);
},
- setBreakpoint: function(url, lineNumber, columnNumber, condition, enabled)
+ setBreakpoint: function(url, lineNumber, columnNumber, condition, enabled, callback)
{
- function didSetBreakpoint(breakpointsPushedToBackend, breakpointId, locations)
+ // Adjust column if needed.
+ var minColumnNumber = 0;
+ for (var id in this._scripts) {
+ var script = this._scripts[id];
+ if (url === script.sourceURL && lineNumber === script.lineOffset)
+ minColumnNumber = minColumnNumber ? Math.min(minColumnNumber, script.columnOffset) : script.columnOffset;
+ }
+ columnNumber = Math.max(columnNumber, minColumnNumber);
+
+ function didSetBreakpoint(error, breakpointId, locations)
{
- if (!breakpointId)
- return;
- var breakpoint = new WebInspector.Breakpoint(breakpointId, url, "", lineNumber, columnNumber, condition, enabled);
- breakpoint.locations = locations;
- this._breakpoints[breakpointId] = breakpoint;
- if (breakpointsPushedToBackend)
- this._saveBreakpoints();
- this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointAdded, breakpoint);
+ var breakpoint;
+ if (!error && breakpointId) {
+ breakpoint = new WebInspector.Breakpoint(breakpointId, url, "", lineNumber, columnNumber, condition, enabled);
+ breakpoint.locations = locations;
+ this._breakpoints[breakpointId] = breakpoint;
+ }
+ if (callback)
+ callback(breakpoint);
}
- DebuggerAgent.setJavaScriptBreakpoint(url, lineNumber, columnNumber, condition, enabled, didSetBreakpoint.bind(this, this._breakpointsPushedToBackend));
+ DebuggerAgent.setBreakpointByUrl(url, lineNumber, columnNumber, condition, enabled, didSetBreakpoint.bind(this));
},
- setBreakpointBySourceId: function(sourceID, lineNumber, columnNumber, condition, enabled)
+ setBreakpointBySourceId: function(sourceID, lineNumber, columnNumber, condition, enabled, callback)
{
- function didSetBreakpoint(breakpointId, actualLineNumber, actualColumnNumber)
+ function didSetBreakpoint(error, breakpointId, actualLineNumber, actualColumnNumber)
{
- if (!breakpointId)
- return;
- var breakpoint = new WebInspector.Breakpoint(breakpointId, "", sourceID, lineNumber, columnNumber, condition, enabled);
- breakpoint.addLocation(sourceID, actualLineNumber, actualColumnNumber);
- this._breakpoints[breakpointId] = breakpoint;
- this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointAdded, breakpoint);
+ var breakpoint;
+ if (!error && breakpointId) {
+ breakpoint = new WebInspector.Breakpoint(breakpointId, "", sourceID, lineNumber, columnNumber, condition, enabled);
+ breakpoint.addLocation(sourceID, actualLineNumber, actualColumnNumber);
+ this._breakpoints[breakpointId] = breakpoint;
+ }
+ if (callback)
+ callback(breakpoint);
}
- DebuggerAgent.setJavaScriptBreakpointBySourceId(sourceID, lineNumber, columnNumber, condition, enabled, didSetBreakpoint.bind(this));
+ DebuggerAgent.setBreakpoint(sourceID, lineNumber, columnNumber, condition, enabled, didSetBreakpoint.bind(this));
},
removeBreakpoint: function(breakpointId)
{
- DebuggerAgent.removeJavaScriptBreakpoint(breakpointId);
- var breakpoint = this._breakpoints[breakpointId];
+ DebuggerAgent.removeBreakpoint(breakpointId);
delete this._breakpoints[breakpointId];
- this._saveBreakpoints();
- this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointRemoved, breakpointId);
- },
-
- updateBreakpoint: function(breakpointId, condition, enabled)
- {
- var breakpoint = this._breakpoints[breakpointId];
- this.removeBreakpoint(breakpointId);
- if (breakpoint.url)
- this.setBreakpoint(breakpoint.url, breakpoint.lineNumber, breakpoint.columnNumber, condition, enabled);
- else
- this.setBreakpointBySourceId(breakpoint.sourceID, breakpoint.lineNumber, breakpoint.columnNumber, condition, enabled);
},
_breakpointResolved: function(breakpointId, sourceID, lineNumber, columnNumber)
{
var breakpoint = this._breakpoints[breakpointId];
- if (!breakpoint)
- return;
breakpoint.addLocation(sourceID, lineNumber, columnNumber);
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, breakpoint);
},
- _saveBreakpoints: function()
- {
- var serializedBreakpoints = [];
- for (var id in this._breakpoints) {
- var breakpoint = this._breakpoints[id];
- if (!breakpoint.url)
- continue;
- var serializedBreakpoint = {};
- serializedBreakpoint.url = breakpoint.url;
- serializedBreakpoint.lineNumber = breakpoint.lineNumber;
- serializedBreakpoint.columnNumber = breakpoint.columnNumber;
- serializedBreakpoint.condition = breakpoint.condition;
- serializedBreakpoint.enabled = breakpoint.enabled;
- serializedBreakpoints.push(serializedBreakpoint);
- }
- WebInspector.settings.breakpoints = serializedBreakpoints;
- },
-
get breakpoints()
{
return this._breakpoints;
},
- breakpointForId: function(breakpointId)
- {
- return this._breakpoints[breakpointId];
- },
-
- queryBreakpoints: function(filter)
- {
- var breakpoints = [];
- for (var id in this._breakpoints) {
- var breakpoint = this._breakpoints[id];
- if (filter(breakpoint))
- breakpoints.push(breakpoint);
- }
- return breakpoints;
- },
-
reset: function()
{
- this._paused = false;
- this._callFrames = [];
+ this._debuggerPausedDetails = {};
for (var id in this._breakpoints) {
var breakpoint = this._breakpoints[id];
if (!breakpoint.url)
- this.removeBreakpoint(id);
+ delete this._breakpoints[id];
else
breakpoint.locations = [];
}
this._scripts = {};
+ this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.Reset);
+ },
+
+ get scripts()
+ {
+ return this._scripts;
},
scriptForSourceID: function(sourceID)
@@ -208,101 +174,42 @@ WebInspector.DebuggerModel.prototype = {
return scripts;
},
- editScriptSource: function(sourceID, scriptSource)
+ editScriptSource: function(sourceID, newSource, callback)
{
- function didEditScriptSource(success, newBodyOrErrorMessage, callFrames)
- {
- if (success) {
- if (callFrames && callFrames.length)
- this._callFrames = callFrames;
- this._updateScriptSource(sourceID, newBodyOrErrorMessage);
- } else
- WebInspector.log(newBodyOrErrorMessage, WebInspector.ConsoleMessage.MessageLevel.Warning);
- }
- DebuggerAgent.editScriptSource(sourceID, scriptSource, didEditScriptSource.bind(this));
+ DebuggerAgent.editScriptSource(sourceID, newSource, this._didEditScriptSource.bind(this, sourceID, callback));
},
- _updateScriptSource: function(sourceID, scriptSource)
+ _didEditScriptSource: function(sourceID, callback, error, newBody, callFrames)
{
- var script = this._scripts[sourceID];
- var oldSource = script.source;
- script.source = scriptSource;
-
- // Clear and re-create breakpoints according to text diff.
- var diff = Array.diff(oldSource.split("\n"), script.source.split("\n"));
- for (var id in this._breakpoints) {
- var breakpoint = this._breakpoints[id];
- if (breakpoint.url) {
- if (breakpoint.url !== script.sourceURL)
- continue;
- } else {
- if (breakpoint.sourceID !== sourceID)
- continue;
- }
- this.removeBreakpoint(breakpoint.id);
- var lineNumber = breakpoint.lineNumber;
- var newLineNumber = diff.left[lineNumber].row;
- if (newLineNumber === undefined) {
- for (var i = lineNumber - 1; i >= 0; --i) {
- if (diff.left[i].row === undefined)
- continue;
- var shiftedLineNumber = diff.left[i].row + lineNumber - i;
- if (shiftedLineNumber < diff.right.length) {
- var originalLineNumber = diff.right[shiftedLineNumber].row;
- if (originalLineNumber === lineNumber || originalLineNumber === undefined)
- newLineNumber = shiftedLineNumber;
- }
- break;
- }
- }
- if (newLineNumber === undefined)
- continue;
- if (breakpoint.url)
- this.setBreakpoint(breakpoint.url, newLineNumber, breakpoint.columnNumber, breakpoint.condition, breakpoint.enabled);
- else
- this.setBreakpointBySourceId(sourceID, newLineNumber, breakpoint.columnNumber, breakpoint.condition, breakpoint.enabled);
- }
-
- this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ScriptSourceChanged, { sourceID: sourceID, oldSource: oldSource });
+ callback(!error, error || newBody);
+ if (error)
+ return;
+ this._scripts[sourceID].source = newBody;
+ this._debuggerPausedDetails.callFrames = callFrames;
},
get callFrames()
{
- return this._callFrames;
+ return this._debuggerPausedDetails.callFrames;
+ },
+
+ get debuggerPausedDetails()
+ {
+ return this._debuggerPausedDetails;
},
_pausedScript: function(details)
{
- this._paused = true;
- this._callFrames = details.callFrames;
- details.breakpoint = this._breakpointForCallFrame(details.callFrames[0]);
+ this._debuggerPausedDetails = details;
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerPaused, details);
},
_resumedScript: function()
{
- this._paused = false;
- this._callFrames = [];
+ this._debuggerPausedDetails = {};
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerResumed);
},
- _breakpointForCallFrame: function(callFrame)
- {
- function match(location)
- {
- if (location.sourceID != callFrame.sourceID)
- return false;
- return location.lineNumber === callFrame.line && location.columnNumber === callFrame.column;
- }
- for (var id in this._breakpoints) {
- var breakpoint = this._breakpoints[id];
- for (var i = 0; i < breakpoint.locations.length; ++i) {
- if (match(breakpoint.locations[i]))
- return breakpoint;
- }
- }
- },
-
_parsedScriptSource: function(sourceID, sourceURL, lineOffset, columnOffset, length, scriptWorldType)
{
var script = new WebInspector.Script(sourceID, sourceURL, "", lineOffset, columnOffset, length, undefined, undefined, scriptWorldType);
@@ -331,32 +238,32 @@ WebInspector.DebuggerDispatcher = function(debuggerModel)
}
WebInspector.DebuggerDispatcher.prototype = {
- pausedScript: function(details)
+ paused: function(details)
{
this._debuggerModel._pausedScript(details);
},
- resumedScript: function()
+ resumed: function()
{
this._debuggerModel._resumedScript();
},
debuggerWasEnabled: function()
{
- WebInspector.panels.scripts.debuggerWasEnabled();
+ this._debuggerModel._debuggerWasEnabled();
},
debuggerWasDisabled: function()
{
- WebInspector.panels.scripts.debuggerWasDisabled();
+ this._debuggerModel._debuggerWasDisabled();
},
- parsedScriptSource: function(sourceID, sourceURL, lineOffset, columnOffset, length, scriptWorldType)
+ scriptParsed: function(sourceID, sourceURL, lineOffset, columnOffset, length, scriptWorldType)
{
this._debuggerModel._parsedScriptSource(sourceID, sourceURL, lineOffset, columnOffset, length, scriptWorldType);
},
- failedToParseScriptSource: function(sourceURL, source, startingLine, errorLine, errorMessage)
+ scriptFailedToParse: function(sourceURL, source, startingLine, errorLine, errorMessage)
{
this._debuggerModel._failedToParseScriptSource(sourceURL, source, startingLine, errorLine, errorMessage);
},
@@ -364,17 +271,5 @@ WebInspector.DebuggerDispatcher.prototype = {
breakpointResolved: function(breakpointId, sourceID, lineNumber, columnNumber)
{
this._debuggerModel._breakpointResolved(breakpointId, sourceID, lineNumber, columnNumber);
- },
-
- didCreateWorker: function()
- {
- var workersPane = WebInspector.panels.scripts.sidebarPanes.workers;
- workersPane.addWorker.apply(workersPane, arguments);
- },
-
- didDestroyWorker: function()
- {
- var workersPane = WebInspector.panels.scripts.sidebarPanes.workers;
- workersPane.removeWorker.apply(workersPane, arguments);
}
}