Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1764)

Unified Diff: Source/devtools/front_end/SourcesPanel.js

Issue 201613004: DevTools: Add context menu option for objects to save to temp variable. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: addressed Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/devtools/front_end/RemoteObject.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/SourcesPanel.js
diff --git a/Source/devtools/front_end/SourcesPanel.js b/Source/devtools/front_end/SourcesPanel.js
index fba5ba6ace557ea3e3e42ff271ded6f986f5b501..bba87914f2c0e820cba4c38cd77645e67afd17d1 100644
--- a/Source/devtools/front_end/SourcesPanel.js
+++ b/Source/devtools/front_end/SourcesPanel.js
@@ -1273,7 +1273,7 @@ WebInspector.SourcesPanel.prototype = {
appendApplicableItems: function(event, contextMenu, target)
{
this._appendUISourceCodeItems(event, contextMenu, target);
- this._appendFunctionItems(contextMenu, target);
+ this._appendRemoteObjectItems(contextMenu, target);
},
_suggestReload: function()
@@ -1391,20 +1391,86 @@ 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));
pfeldman 2014/03/19 18:08:03 "Store as global variable"
aandrey 2014/03/20 09:21:22 Done.
+ 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)
+ {
+ WebInspector.runtimeModel.evaluate("window", "", false, true, false, false, didGetGlobalObject);
/**
+ * @param {?WebInspector.RemoteObject} global
+ * @param {boolean=} wasThrown
+ */
+ function didGetGlobalObject(global, wasThrown)
+ {
+ /** @this {Window} */
+ function remoteFunction(value)
+ {
+ var prefix = "temp";
+ var index = 1;
+ while ((prefix + index) in this)
+ ++index;
+ var name = prefix + index;
+ this[name] = value;
+ return name;
+ }
+
+ if (wasThrown || !global)
+ failedToSave(global);
+ else
+ global.callFunction(remoteFunction, [WebInspector.RemoteObject.toCallArgument(remoteObject)], didSave.bind(null, global));
+ }
+
+ /**
+ * @param {!WebInspector.RemoteObject} global
+ * @param {?WebInspector.RemoteObject} result
+ * @param {boolean=} wasThrown
+ */
+ function didSave(global, result, wasThrown)
+ {
+ global.release();
+ if (wasThrown || !result || result.type !== "string")
+ failedToSave(result);
+ else
+ WebInspector.console.evaluate(result.value);
+ }
+
+ /**
+ * @param {?WebInspector.RemoteObject} result
+ */
+ function failedToSave(result)
+ {
+ var message = WebInspector.UIString("Failed to save to temp variable.");
+ if (result) {
+ message += " " + result.description;
+ result.release();
+ }
+ WebInspector.console.showErrorMessage(message)
+ }
+ },
+
+ /**
+ * @param {!WebInspector.RemoteObject} remoteObject
+ */
+ _showFunctionDefinition: function(remoteObject)
+ {
+ /**
* @param {?Protocol.Error} error
* @param {!DebuggerAgent.FunctionDetails} response
* @this {WebInspector.SourcesPanel}
*/
- function didGetDetails(error, response)
+ function didGetFunctionDetails(error, response)
{
if (error) {
console.error(error);
@@ -1417,16 +1483,7 @@ WebInspector.SourcesPanel.prototype = {
this.showUILocation(uiLocation, true);
}
-
- /**
- * @this {WebInspector.SourcesPanel}
- */
- function revealFunction()
- {
- DebuggerAgent.getFunctionDetails(remoteObject.objectId, didGetDetails.bind(this));
- }
-
- contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Show function definition" : "Show Function Definition"), revealFunction.bind(this));
+ DebuggerAgent.getFunctionDetails(remoteObject.objectId, didGetFunctionDetails.bind(this));
},
/**
« no previous file with comments | « Source/devtools/front_end/RemoteObject.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698