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

Unified Diff: Source/core/inspector/InjectedScriptSource.js

Issue 644403003: DevTools: Fix __commandLineAPI is not defined error and remove the with- hack for eval on call fram… (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 2 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
Index: Source/core/inspector/InjectedScriptSource.js
diff --git a/Source/core/inspector/InjectedScriptSource.js b/Source/core/inspector/InjectedScriptSource.js
index 717f581cf9e22c54523bbce8bc3f230548dabcf5..5e9c2b5a012dbcef7cb08fafe69604fe68190812 100644
--- a/Source/core/inspector/InjectedScriptSource.js
+++ b/Source/core/inspector/InjectedScriptSource.js
@@ -616,7 +616,7 @@ InjectedScript.prototype = {
*/
evaluate: function(expression, objectGroup, injectCommandLineAPI, returnByValue, generatePreview)
{
- return this._evaluateAndWrap(null, null, expression, objectGroup, false, injectCommandLineAPI, returnByValue, generatePreview);
+ return this._evaluateAndWrap(null, expression, objectGroup, injectCommandLineAPI, returnByValue, generatePreview);
},
/**
@@ -689,20 +689,18 @@ InjectedScript.prototype = {
},
/**
- * @param {?function(string):*} evalFunction
- * @param {?Object} object
+ * @param {?JavaScriptCallFrame} callFrame
* @param {string} expression
* @param {string} objectGroup
- * @param {boolean} isEvalOnCallFrame
* @param {boolean} injectCommandLineAPI
* @param {boolean} returnByValue
* @param {boolean} generatePreview
* @param {!Array.<!Object>=} scopeChain
* @return {!Object}
*/
- _evaluateAndWrap: function(evalFunction, object, expression, objectGroup, isEvalOnCallFrame, injectCommandLineAPI, returnByValue, generatePreview, scopeChain)
+ _evaluateAndWrap: function(callFrame, expression, objectGroup, injectCommandLineAPI, returnByValue, generatePreview, scopeChain)
{
- var wrappedResult = this._evaluateOn(evalFunction, object, objectGroup, expression, isEvalOnCallFrame, injectCommandLineAPI, scopeChain);
+ var wrappedResult = this._evaluateOn(callFrame, objectGroup, expression, injectCommandLineAPI, scopeChain);
if (!wrappedResult.exceptionDetails) {
return { wasThrown: false,
result: this._wrapObject(wrappedResult.result, objectGroup, returnByValue, generatePreview),
@@ -730,36 +728,36 @@ InjectedScript.prototype = {
},
/**
- * @param {?function(string):*} evalFunction
- * @param {?Object} object
+ * @param {?JavaScriptCallFrame} callFrame
* @param {string} objectGroup
* @param {string} expression
- * @param {boolean} isEvalOnCallFrame
* @param {boolean} injectCommandLineAPI
* @param {!Array.<!Object>=} scopeChain
* @return {*}
*/
- _evaluateOn: function(evalFunction, object, objectGroup, expression, isEvalOnCallFrame, injectCommandLineAPI, scopeChain)
+ _evaluateOn: function(callFrame, objectGroup, expression, injectCommandLineAPI, scopeChain)
{
// Only install command line api object for the time of evaluation.
// Surround the expression in with statements to inject our command line API so that
// the window object properties still take more precedent than our API functions.
- injectCommandLineAPI = injectCommandLineAPI && !("__commandLineAPI" in inspectedWindow);
+ var scopeExtensionForEval = (callFrame && injectCommandLineAPI) ? new CommandLineAPI(this._commandLineAPIImpl, callFrame) : undefined;
+
+ injectCommandLineAPI = !scopeExtensionForEval && !callFrame && injectCommandLineAPI && !("__commandLineAPI" in inspectedWindow);
var injectScopeChain = scopeChain && scopeChain.length && !("__scopeChainForEval" in inspectedWindow);
try {
var prefix = "";
var suffix = "";
if (injectCommandLineAPI) {
- InjectedScriptHost.setNonEnumProperty(inspectedWindow, "__commandLineAPI", new CommandLineAPI(this._commandLineAPIImpl, isEvalOnCallFrame ? object : null));
- prefix = "with (__commandLineAPI || { __proto__: null }) {";
+ InjectedScriptHost.setNonEnumProperty(inspectedWindow, "__commandLineAPI", new CommandLineAPI(this._commandLineAPIImpl, callFrame));
+ prefix = "with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) {";
suffix = "}";
}
if (injectScopeChain) {
InjectedScriptHost.setNonEnumProperty(inspectedWindow, "__scopeChainForEval", scopeChain);
for (var i = 0; i < scopeChain.length; ++i) {
- prefix = "with (__scopeChainForEval[" + i + "] || { __proto__: null }) {" + (suffix ? " " : "") + prefix;
+ prefix = "with (typeof __scopeChainForEval !== 'undefined' ? __scopeChainForEval[" + i + "] : { __proto__: null }) {" + (suffix ? " " : "") + prefix;
if (suffix)
suffix += " }";
else
@@ -769,7 +767,7 @@ InjectedScript.prototype = {
if (prefix)
expression = prefix + "\n" + expression + "\n" + suffix;
- var wrappedResult = evalFunction ? InjectedScriptHost.callFunction(evalFunction, object, [expression]) : InjectedScriptHost.evaluateWithExceptionDetails(expression);
+ var wrappedResult = callFrame ? callFrame.evaluateWithExceptionDetails(expression, scopeExtensionForEval) : InjectedScriptHost.evaluateWithExceptionDetails(expression);
if (objectGroup === "console" && !wrappedResult.exceptionDetails)
this._lastResult = wrappedResult.result;
return wrappedResult;
@@ -802,8 +800,8 @@ InjectedScript.prototype = {
},
/**
- * @param {!Object} topCallFrame
- * @param {!Array.<!Object>} asyncCallStacks
+ * @param {!JavaScriptCallFrame} topCallFrame
+ * @param {!Array.<!JavaScriptCallFrame>} asyncCallStacks
* @param {string} callFrameId
* @param {string} expression
* @param {string} objectGroup
@@ -819,12 +817,12 @@ InjectedScript.prototype = {
if (!callFrame)
return "Could not find call frame with given id";
if (parsedCallFrameId["asyncOrdinal"])
- return this._evaluateAndWrap(null, null, expression, objectGroup, false, injectCommandLineAPI, returnByValue, generatePreview, callFrame.scopeChain);
- return this._evaluateAndWrap(callFrame.evaluateWithExceptionDetails, callFrame, expression, objectGroup, true, injectCommandLineAPI, returnByValue, generatePreview);
+ return this._evaluateAndWrap(null, expression, objectGroup, injectCommandLineAPI, returnByValue, generatePreview, callFrame.scopeChain);
+ return this._evaluateAndWrap(callFrame, expression, objectGroup, injectCommandLineAPI, returnByValue, generatePreview);
},
/**
- * @param {!Object} topCallFrame
+ * @param {!JavaScriptCallFrame} topCallFrame
* @param {string} callFrameId
* @return {*}
*/
@@ -840,7 +838,7 @@ InjectedScript.prototype = {
},
/**
- * @param {!Object} topCallFrame
+ * @param {!JavaScriptCallFrame} topCallFrame
* @param {string} callFrameId
* @return {*} a stepIn position array ready for protocol JSON or a string error
*/
@@ -857,7 +855,7 @@ InjectedScript.prototype = {
/**
* Either callFrameId or functionObjectId must be specified.
- * @param {!Object} topCallFrame
+ * @param {!JavaScriptCallFrame} topCallFrame
* @param {string|boolean} callFrameId or false
* @param {string|boolean} functionObjectId or false
* @param {number} scopeNumber
@@ -889,9 +887,9 @@ InjectedScript.prototype = {
},
/**
- * @param {!Object} topCallFrame
+ * @param {!JavaScriptCallFrame} topCallFrame
* @param {string} callFrameId
- * @return {?Object}
+ * @return {?JavaScriptCallFrame}
*/
_callFrameForId: function(topCallFrame, callFrameId)
{
@@ -900,10 +898,10 @@ InjectedScript.prototype = {
},
/**
- * @param {!Object} topCallFrame
+ * @param {!JavaScriptCallFrame} topCallFrame
* @param {!Object} parsedCallFrameId
- * @param {!Array.<!Object>} asyncCallStacks
- * @return {?Object}
+ * @param {!Array.<!JavaScriptCallFrame>} asyncCallStacks
+ * @return {?JavaScriptCallFrame}
*/
_callFrameForParsedId: function(topCallFrame, parsedCallFrameId, asyncCallStacks)
{
@@ -1448,7 +1446,7 @@ InjectedScript.CallFrameProxy._createScopeJson = function(scopeTypeCode, scopeOb
/**
* @constructor
* @param {!CommandLineAPIImpl} commandLineAPIImpl
- * @param {?Object} callFrame
+ * @param {?JavaScriptCallFrame} callFrame
*/
function CommandLineAPI(commandLineAPIImpl, callFrame)
{
@@ -1459,7 +1457,7 @@ function CommandLineAPI(commandLineAPIImpl, callFrame)
function inScopeVariables(member)
{
if (!callFrame)
- return false;
+ return (member in inspectedWindow);
var scopeChain = callFrame.scopeChain;
for (var i = 0; i < scopeChain.length; ++i) {
@@ -1493,7 +1491,7 @@ function CommandLineAPI(commandLineAPIImpl, callFrame)
for (var i = 0; i < CommandLineAPI.members_.length; ++i) {
var member = CommandLineAPI.members_[i];
- if (member in inspectedWindow || inScopeVariables(member))
+ if (inScopeVariables(member))
continue;
this[member] = bind(commandLineAPIImpl[member], commandLineAPIImpl);
@@ -1502,7 +1500,7 @@ function CommandLineAPI(commandLineAPIImpl, callFrame)
for (var i = 0; i < 5; ++i) {
var member = "$" + i;
- if (member in inspectedWindow || inScopeVariables(member))
+ if (inScopeVariables(member))
continue;
this.__defineGetter__("$" + i, bind(commandLineAPIImpl._inspectedObject, commandLineAPIImpl, i));

Powered by Google App Engine
This is Rietveld 408576698