Index: webkit/glue/devtools/js/debugger_agent.js |
=================================================================== |
--- webkit/glue/devtools/js/debugger_agent.js (revision 14725) |
+++ webkit/glue/devtools/js/debugger_agent.js (working copy) |
@@ -37,11 +37,11 @@ |
* @type {?Object} |
*/ |
this.currentCallFrame_ = null; |
- |
- /** |
- * Mapping: request sequence number->callback. |
- * @type {Object} |
- */ |
+ |
+ /** |
+ * Mapping: request sequence number->callback. |
+ * @type {Object} |
+ */ |
this.requestSeqToCallback_ = null; |
}; |
@@ -67,7 +67,7 @@ |
}); |
devtools.DebuggerAgent.sendCommand_(cmd); |
// Force v8 execution so that it gets to processing the requested command. |
- devtools.tools.evaluateJavaScript('javascript:void(0)'); |
+ devtools.tools.evaluateJavaScript('javascript:void(0)'); |
}; |
@@ -276,19 +276,19 @@ |
}; |
-/** |
- * Sends 'lookup' request to v8. |
- * @param {number} handle Handle to the object to lookup. |
- */ |
-devtools.DebuggerAgent.prototype.requestLookup_ = function(handles, callback) { |
- var cmd = new devtools.DebugCommand('lookup', { |
- 'handles': handles |
- }); |
- devtools.DebuggerAgent.sendCommand_(cmd); |
- this.requestSeqToCallback_[cmd.getSequenceNumber()] = callback; |
-}; |
- |
+/** |
+ * Sends 'lookup' request to v8. |
+ * @param {number} handle Handle to the object to lookup. |
+ */ |
+devtools.DebuggerAgent.prototype.requestLookup_ = function(handles, callback) { |
+ var cmd = new devtools.DebugCommand('lookup', { |
+ 'handles': handles |
+ }); |
+ devtools.DebuggerAgent.sendCommand_(cmd); |
+ this.requestSeqToCallback_[cmd.getSequenceNumber()] = callback; |
+}; |
+ |
/** |
* Handles output sent by v8 debugger. The output is either asynchronous event |
* or response to a previously sent request. See protocol definitioun for more |
@@ -304,11 +304,14 @@ |
throw e; |
} |
+ |
if (msg.getType() == 'event') { |
if (msg.getEvent() == 'break') { |
this.handleBreakEvent_(msg); |
- } else if (msg.getEvent() == 'exception') { |
- this.handleExceptionEvent_(msg); |
+ } else if (msg.getEvent() == 'exception') { |
+ this.handleExceptionEvent_(msg); |
+ } else if (msg.getEvent() == 'afterCompile') { |
+ this.handleAfterCompileEvent_(msg); |
} |
} else if (msg.getType() == 'response') { |
if (msg.getCommand() == 'scripts') { |
@@ -319,9 +322,9 @@ |
this.handleClearBreakpointResponse_(msg); |
} else if (msg.getCommand() == 'backtrace') { |
this.handleBacktraceResponse_(msg); |
- } else if (msg.getCommand() == 'lookup') { |
+ } else if (msg.getCommand() == 'lookup') { |
this.invokeCallbackForResponse_(msg); |
- } else if (msg.getCommand() == 'evaluate') { |
+ } else if (msg.getCommand() == 'evaluate') { |
this.invokeCallbackForResponse_(msg); |
} |
} |
@@ -350,11 +353,11 @@ |
/** |
* @param {devtools.DebuggerMessage} msg |
*/ |
-devtools.DebuggerAgent.prototype.handleExceptionEvent_ = function(msg) { |
- var body = msg.getBody(); |
- debugPrint('Uncaught exception in ' + body.script.name + ':' + |
- body.sourceLine + '\n' + body.sourceLineText); |
- this.resumeExecution(); |
+devtools.DebuggerAgent.prototype.handleExceptionEvent_ = function(msg) { |
+ var body = msg.getBody(); |
+ debugPrint('Uncaught exception in ' + body.script.name + ':' + |
+ body.sourceLine + '\n' + body.sourceLineText); |
+ this.resumeExecution(); |
}; |
@@ -366,11 +369,11 @@ |
for (var i = 0; i < scripts.length; i++) { |
var script = scripts[i]; |
- this.parsedScripts_[script.id] = new devtools.ScriptInfo( |
- script.id, script.lineOffset); |
- |
- WebInspector.parsedScriptSource( |
- script.id, script.name, script.source, script.lineOffset); |
+ // We may already have received the info in an afterCompile event. |
+ if (script.id in this.parsedScripts_) { |
+ continue; |
+ } |
+ this.addScriptInfo_(script); |
} |
}; |
@@ -402,6 +405,28 @@ |
/** |
* @param {devtools.DebuggerMessage} msg |
*/ |
+devtools.DebuggerAgent.prototype.handleAfterCompileEvent_ = function(msg) { |
+ var script = msg.getBody().script; |
+ this.addScriptInfo_(script); |
+}; |
+ |
+ |
+/** |
+ * Adds the script info to the local cache. This method assumes that the script |
+ * is not in the cache yet. |
+ * @param {Object} script Script json object from the debugger message. |
+ */ |
+devtools.DebuggerAgent.prototype.addScriptInfo_ = function(script) { |
+ this.parsedScripts_[script.id] = new devtools.ScriptInfo( |
+ script.id, script.lineOffset); |
+ WebInspector.parsedScriptSource( |
+ script.id, script.name, script.source, script.lineOffset); |
+}; |
+ |
+ |
+/** |
+ * @param {devtools.DebuggerMessage} msg |
+ */ |
devtools.DebuggerAgent.prototype.handleClearBreakpointResponse_ = function( |
msg) { |
// Do nothing. |
@@ -435,19 +460,19 @@ |
}; |
-/** |
- * Handles response to a command by invoking its callback (if any). |
- * @param {devtools.DebuggerMessage} msg |
- */ |
-devtools.DebuggerAgent.prototype.invokeCallbackForResponse_ = function(msg) { |
- var callback = this.requestSeqToCallback_[msg.getRequestSeq()]; |
- if (!callback) { |
- // It may happend if reset was called. |
- return; |
- } |
- delete this.requestSeqToCallback_[msg.getRequestSeq()]; |
- callback(msg); |
-}; |
+/** |
+ * Handles response to a command by invoking its callback (if any). |
+ * @param {devtools.DebuggerMessage} msg |
+ */ |
+devtools.DebuggerAgent.prototype.invokeCallbackForResponse_ = function(msg) { |
+ var callback = this.requestSeqToCallback_[msg.getRequestSeq()]; |
+ if (!callback) { |
+ // It may happend if reset was called. |
+ return; |
+ } |
+ delete this.requestSeqToCallback_[msg.getRequestSeq()]; |
+ callback(msg); |
+}; |
/** |
@@ -458,13 +483,13 @@ |
* the format expected by ScriptsPanel and its panes. |
*/ |
devtools.DebuggerAgent.formatCallFrame_ = function(stackFrame, script, msg) { |
- var sourceId = script.id; |
- var func = msg.lookup(stackFrame.func.ref); |
- var funcScript = msg.lookup(func.script.ref); |
- if (funcScript && 'id' in funcScript) { |
- sourceId = funcScript.id; |
- } |
- |
+ var sourceId = script.id; |
+ var func = msg.lookup(stackFrame.func.ref); |
+ var funcScript = msg.lookup(func.script.ref); |
+ if (funcScript && 'id' in funcScript) { |
+ sourceId = funcScript.id; |
+ } |
+ |
var funcName = devtools.DebuggerAgent.formatFunctionCall_(stackFrame, msg); |
var scope = {}; |