Index: third_party/WebKit/Source/devtools/front_end/sources/SourceMapNamesResolver.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/SourceMapNamesResolver.js b/third_party/WebKit/Source/devtools/front_end/sources/SourceMapNamesResolver.js |
index 3eca7c8aecee812240d91218459c44a42f44cd1f..a3a1c9aa8e953717c419d751340ddade6f38d2d3 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/sources/SourceMapNamesResolver.js |
+++ b/third_party/WebKit/Source/devtools/front_end/sources/SourceMapNamesResolver.js |
@@ -288,6 +288,48 @@ WebInspector.SourceMapNamesResolver._resolveExpression = function(callFrame, uiS |
} |
/** |
+ * @param {?WebInspector.DebuggerModel.CallFrame} callFrame |
+ * @return {!Promise<?WebInspector.RemoteObject>} |
+ */ |
+WebInspector.SourceMapNamesResolver.resolveThisObject = function(callFrame) |
+{ |
+ if (!callFrame) |
+ return Promise.resolve(/** @type {?WebInspector.RemoteObject} */(null)); |
+ if (!Runtime.experiments.isEnabled("resolveVariableNames")) |
+ return Promise.resolve(callFrame.thisObject()); |
+ |
+ return WebInspector.SourceMapNamesResolver._resolveScope(callFrame.scopeChain()[0]) |
+ .then(onScopeResolved); |
+ |
+ /** |
+ * @param {!Map<string, string>} namesMapping |
+ * @return {!Promise<?WebInspector.RemoteObject>} |
+ */ |
+ function onScopeResolved(namesMapping) |
+ { |
+ var thisMappings = namesMapping.inverse().get("this"); |
+ if (!thisMappings || thisMappings.size !== 1) |
+ return Promise.resolve(callFrame.thisObject()); |
+ |
+ var thisMapping = thisMappings.valuesArray()[0]; |
+ var callback; |
+ var promise = new Promise(fulfill => callback = fulfill); |
+ callFrame.evaluate(thisMapping, "backtrace", false, true, false, true, onEvaluated.bind(null, callback)); |
+ return promise; |
+ } |
+ |
+ /** |
+ * @param {function(!WebInspector.RemoteObject)} callback |
+ * @param {?RuntimeAgent.RemoteObject} evaluateResult |
+ */ |
+ function onEvaluated(callback, evaluateResult) |
+ { |
+ var remoteObject = evaluateResult ? callFrame.target().runtimeModel.createRemoteObject(evaluateResult) : callFrame.thisObject(); |
+ callback(remoteObject); |
+ } |
+} |
+ |
+/** |
* @param {!WebInspector.DebuggerModel.Scope} scope |
* @return {!WebInspector.RemoteObject} |
*/ |