Chromium Code Reviews| Index: Source/devtools/front_end/SourcesPanel.js |
| diff --git a/Source/devtools/front_end/SourcesPanel.js b/Source/devtools/front_end/SourcesPanel.js |
| index 8a1d4dd913f4c42fce88d6f859095178e4bcd141..53ebff0d8c5b42c971d2c09a3c8fda91a64545a7 100644 |
| --- a/Source/devtools/front_end/SourcesPanel.js |
| +++ b/Source/devtools/front_end/SourcesPanel.js |
| @@ -1352,7 +1352,7 @@ WebInspector.SourcesPanel.prototype = { |
| appendApplicableItems: function(event, contextMenu, target) |
| { |
| this._appendUISourceCodeItems(contextMenu, target); |
| - this._appendFunctionItems(contextMenu, target); |
| + this._appendRemoteObjectItems(contextMenu, target); |
| }, |
| _suggestReload: function() |
| @@ -1455,42 +1455,128 @@ WebInspector.SourcesPanel.prototype = { |
| * @param {!WebInspector.ContextMenu} contextMenu |
| * @param {!Object} target |
| */ |
| - _appendFunctionItems: function(contextMenu, target) |
| + _appendRemoteObjectItems: function(contextMenu, target) |
| { |
| if (!(target instanceof WebInspector.RemoteObject)) |
| return; |
| var remoteObject = /** @type {!WebInspector.RemoteObject} */ (target); |
| - if (remoteObject.type !== "function") |
| - return; |
| + contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Save to temp variable" : "Save to Temp Variable"), this._saveToTempVariable.bind(this, remoteObject)); |
| + if (remoteObject.type === "function") |
| + contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Show function definition" : "Show Function Definition"), this._showFunctionDefinition.bind(this, remoteObject)); |
| + }, |
| + /** |
| + * @param {!WebInspector.RemoteObject} remoteObject |
| + */ |
| + _saveToTempVariable: function(remoteObject) |
| + { |
| /** |
| + * @param {?WebInspector.RemoteObject} result |
| + * @param {?string=} error |
| + * @this {WebInspector.SourcesPanel} |
| + */ |
| + function failedToSave(result, error) |
| + { |
| + --this._pendingSavesToTemp; |
| + if (result) { |
| + error = error || result.description; |
| + result.release(); |
| + } |
| + var message = "Failed to save to temp variable" + (error ? ": " + error : ""); |
|
pfeldman
2014/03/17 15:36:43
UIString()
|
| + WebInspector.console.showErrorMessage(message) |
| + } |
| + |
| + /** |
| + * @param {!WebInspector.RemoteObject} global |
| + * @param {string} name |
| * @param {?Protocol.Error} error |
| - * @param {!DebuggerAgent.FunctionDetails} response |
| * @this {WebInspector.SourcesPanel} |
| */ |
| - function didGetDetails(error, response) |
| + function didSave(global, name, error) |
| { |
| + global.release(); |
| if (error) { |
| - console.error(error); |
| - return; |
| + failedToSave.call(this, null, error); |
| + } else { |
| + --this._pendingSavesToTemp; |
| + WebInspector.console.evaluate(name); |
| } |
| + } |
| - var uiLocation = WebInspector.debuggerModel.rawLocationToUILocation(response.location); |
| - if (!uiLocation) |
| + /** |
| + * @param {!WebInspector.RemoteObject} global |
| + * @param {?WebInspector.RemoteObject} result |
| + * @param {boolean=} wasThrown |
| + * @this {WebInspector.SourcesPanel} |
| + */ |
| + function didGetTempVarName(global, result, wasThrown) |
| + { |
| + if (wasThrown || !result || result.type !== "string") { |
| + global.release(); |
| + failedToSave.call(this, result); |
| return; |
| + } |
| - this.showUILocation(uiLocation, true); |
| + var name = /** @type {string} */ (result.value); |
| + global.setObjectPropertyValue(name, remoteObject, didSave.bind(this, global, name)); |
| } |
| /** |
| + * @param {?WebInspector.RemoteObject} global |
| + * @param {boolean=} wasThrown |
| * @this {WebInspector.SourcesPanel} |
| */ |
| - function revealFunction() |
| + function didGetGlobalObject(global, wasThrown) |
| { |
| - DebuggerAgent.getFunctionDetails(remoteObject.objectId, didGetDetails.bind(this)); |
| + /** @this {Window} */ |
| + function tempVarName(skip) |
| + { |
| + var prefix = "temp"; |
| + var index = 1; |
| + while (skip-- >= 0) { |
| + while ((prefix + index) in this) |
| + ++index; |
| + } |
| + return prefix + index; |
| + } |
| + |
| + var skip = this._pendingSavesToTemp || 0; |
| + this._pendingSavesToTemp = skip + 1; |
| + |
| + if (wasThrown || !global) { |
| + failedToSave.call(this, global); |
| + return; |
| + } |
| + global.callFunction(tempVarName, [{ value: skip }], didGetTempVarName.bind(this, global)); |
| } |
| - contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Show function definition" : "Show Function Definition"), revealFunction.bind(this)); |
| + WebInspector.runtimeModel.evaluate("window", "", false, true, false, false, didGetGlobalObject.bind(this)); |
|
pfeldman
2014/03/17 15:36:43
Please implement it top-bottom for better readabil
|
| + }, |
| + |
| + /** |
| + * @param {!WebInspector.RemoteObject} remoteObject |
| + */ |
| + _showFunctionDefinition: function(remoteObject) |
| + { |
| + /** |
| + * @param {?Protocol.Error} error |
| + * @param {!DebuggerAgent.FunctionDetails} response |
| + * @this {WebInspector.SourcesPanel} |
| + */ |
| + function didGetFunctionDetails(error, response) |
| + { |
| + if (error) { |
| + console.error(error); |
| + return; |
| + } |
| + |
| + var uiLocation = WebInspector.debuggerModel.rawLocationToUILocation(response.location); |
| + if (!uiLocation) |
| + return; |
| + |
| + this.showUILocation(uiLocation, true); |
| + } |
| + DebuggerAgent.getFunctionDetails(remoteObject.objectId, didGetFunctionDetails.bind(this)); |
| }, |
| showGoToSourceDialog: function() |