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 ee283853cc3d3042df80b0b1ebe41ba0526169cf..8f3e29746880d34eeff8b6d20bc3b3bcd1bc4b8c 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/sources/SourceMapNamesResolver.js |
+++ b/third_party/WebKit/Source/devtools/front_end/sources/SourceMapNamesResolver.js |
@@ -1,221 +1,217 @@ |
// Copyright 2016 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
- |
WebInspector.SourceMapNamesResolver = {}; |
-WebInspector.SourceMapNamesResolver._cachedMapSymbol = Symbol("cache"); |
-WebInspector.SourceMapNamesResolver._cachedIdentifiersSymbol = Symbol("cachedIdentifiers"); |
+WebInspector.SourceMapNamesResolver._cachedMapSymbol = Symbol('cache'); |
+WebInspector.SourceMapNamesResolver._cachedIdentifiersSymbol = Symbol('cachedIdentifiers'); |
/** |
- * @constructor |
- * @param {string} name |
- * @param {number} lineNumber |
- * @param {number} columnNumber |
+ * @unrestricted |
*/ |
-WebInspector.SourceMapNamesResolver.Identifier = function(name, lineNumber, columnNumber) |
-{ |
+WebInspector.SourceMapNamesResolver.Identifier = class { |
+ /** |
+ * @param {string} name |
+ * @param {number} lineNumber |
+ * @param {number} columnNumber |
+ */ |
+ constructor(name, lineNumber, columnNumber) { |
this.name = name; |
this.lineNumber = lineNumber; |
this.columnNumber = columnNumber; |
+ } |
}; |
/** |
* @param {!WebInspector.DebuggerModel.Scope} scope |
* @return {!Promise<!Array<!WebInspector.SourceMapNamesResolver.Identifier>>} |
*/ |
-WebInspector.SourceMapNamesResolver._scopeIdentifiers = function(scope) |
-{ |
- var startLocation = scope.startLocation(); |
- var endLocation = scope.endLocation(); |
- |
- if (scope.type() === DebuggerAgent.ScopeType.Global || !startLocation || !endLocation || !startLocation.script().sourceMapURL || (startLocation.script() !== endLocation.script())) |
- return Promise.resolve(/** @type {!Array<!WebInspector.SourceMapNamesResolver.Identifier>}*/([])); |
- |
- var script = startLocation.script(); |
- return script.requestContent().then(onContent); |
- |
- /** |
- * @param {?string} content |
- * @return {!Promise<!Array<!WebInspector.SourceMapNamesResolver.Identifier>>} |
- */ |
- function onContent(content) |
- { |
- if (!content) |
- return Promise.resolve(/** @type {!Array<!WebInspector.SourceMapNamesResolver.Identifier>}*/([])); |
- |
- var text = new WebInspector.Text(content); |
- var scopeRange = new WebInspector.TextRange(startLocation.lineNumber, startLocation.columnNumber, endLocation.lineNumber, endLocation.columnNumber); |
- var scopeText = text.extract(scopeRange); |
- var scopeStart = text.toSourceRange(scopeRange).offset; |
- var prefix = "function fui"; |
- return WebInspector.formatterWorkerPool.runTask("javaScriptIdentifiers", {content: prefix + scopeText}) |
- .then(onIdentifiers.bind(null, text, scopeStart, prefix)); |
- } |
- |
- /** |
- * @param {!WebInspector.Text} text |
- * @param {number} scopeStart |
- * @param {string} prefix |
- * @param {?MessageEvent} event |
- * @return {!Array<!WebInspector.SourceMapNamesResolver.Identifier>} |
- */ |
- function onIdentifiers(text, scopeStart, prefix, event) |
- { |
- var identifiers = event ? /** @type {!Array<!{name: string, offset: number}>} */(event.data) : []; |
- var result = []; |
- var cursor = new WebInspector.TextCursor(text.lineEndings()); |
- var promises = []; |
- for (var i = 0; i < identifiers.length; ++i) { |
- var id = identifiers[i]; |
- if (id.offset < prefix.length) |
- continue; |
- var start = scopeStart + id.offset - prefix.length; |
- cursor.resetTo(start); |
- result.push(new WebInspector.SourceMapNamesResolver.Identifier(id.name, cursor.lineNumber(), cursor.columnNumber())); |
- } |
- return result; |
+WebInspector.SourceMapNamesResolver._scopeIdentifiers = function(scope) { |
+ var startLocation = scope.startLocation(); |
+ var endLocation = scope.endLocation(); |
+ |
+ if (scope.type() === DebuggerAgent.ScopeType.Global || !startLocation || !endLocation || |
+ !startLocation.script().sourceMapURL || (startLocation.script() !== endLocation.script())) |
+ return Promise.resolve(/** @type {!Array<!WebInspector.SourceMapNamesResolver.Identifier>}*/ ([])); |
+ |
+ var script = startLocation.script(); |
+ return script.requestContent().then(onContent); |
+ |
+ /** |
+ * @param {?string} content |
+ * @return {!Promise<!Array<!WebInspector.SourceMapNamesResolver.Identifier>>} |
+ */ |
+ function onContent(content) { |
+ if (!content) |
+ return Promise.resolve(/** @type {!Array<!WebInspector.SourceMapNamesResolver.Identifier>}*/ ([])); |
+ |
+ var text = new WebInspector.Text(content); |
+ var scopeRange = new WebInspector.TextRange( |
+ startLocation.lineNumber, startLocation.columnNumber, endLocation.lineNumber, endLocation.columnNumber); |
+ var scopeText = text.extract(scopeRange); |
+ var scopeStart = text.toSourceRange(scopeRange).offset; |
+ var prefix = 'function fui'; |
+ return WebInspector.formatterWorkerPool.runTask('javaScriptIdentifiers', {content: prefix + scopeText}) |
+ .then(onIdentifiers.bind(null, text, scopeStart, prefix)); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Text} text |
+ * @param {number} scopeStart |
+ * @param {string} prefix |
+ * @param {?MessageEvent} event |
+ * @return {!Array<!WebInspector.SourceMapNamesResolver.Identifier>} |
+ */ |
+ function onIdentifiers(text, scopeStart, prefix, event) { |
+ var identifiers = event ? /** @type {!Array<!{name: string, offset: number}>} */ (event.data) : []; |
+ var result = []; |
+ var cursor = new WebInspector.TextCursor(text.lineEndings()); |
+ var promises = []; |
+ for (var i = 0; i < identifiers.length; ++i) { |
+ var id = identifiers[i]; |
+ if (id.offset < prefix.length) |
+ continue; |
+ var start = scopeStart + id.offset - prefix.length; |
+ cursor.resetTo(start); |
+ result.push( |
+ new WebInspector.SourceMapNamesResolver.Identifier(id.name, cursor.lineNumber(), cursor.columnNumber())); |
} |
+ return result; |
+ } |
}; |
/** |
* @param {!WebInspector.DebuggerModel.Scope} scope |
* @return {!Promise.<!Map<string, string>>} |
*/ |
-WebInspector.SourceMapNamesResolver._resolveScope = function(scope) |
-{ |
- var identifiersPromise = scope[WebInspector.SourceMapNamesResolver._cachedIdentifiersSymbol]; |
- if (identifiersPromise) |
- return identifiersPromise; |
- |
- var script = scope.callFrame().script; |
- var sourceMap = WebInspector.debuggerWorkspaceBinding.sourceMapForScript(script); |
- if (!sourceMap) |
- return Promise.resolve(new Map()); |
- |
- /** @type {!Map<string, !WebInspector.Text>} */ |
- var textCache = new Map(); |
- identifiersPromise = WebInspector.SourceMapNamesResolver._scopeIdentifiers(scope).then(onIdentifiers); |
- scope[WebInspector.SourceMapNamesResolver._cachedIdentifiersSymbol] = identifiersPromise; |
+WebInspector.SourceMapNamesResolver._resolveScope = function(scope) { |
+ var identifiersPromise = scope[WebInspector.SourceMapNamesResolver._cachedIdentifiersSymbol]; |
+ if (identifiersPromise) |
return identifiersPromise; |
- /** |
- * @param {!Array<!WebInspector.SourceMapNamesResolver.Identifier>} identifiers |
- * @return {!Promise<!Map<string, string>>} |
- */ |
- function onIdentifiers(identifiers) |
- { |
- var namesMapping = new Map(); |
- // Extract as much as possible from SourceMap. |
- for (var i = 0; i < identifiers.length; ++i) { |
- var id = identifiers[i]; |
- var entry = sourceMap.findEntry(id.lineNumber, id.columnNumber); |
- if (entry && entry.name) |
- namesMapping.set(id.name, entry.name); |
- } |
- |
- // Resolve missing identifier names from sourcemap ranges. |
- var promises = []; |
- for (var i = 0; i < identifiers.length; ++i) { |
- var id = identifiers[i]; |
- if (namesMapping.has(id.name)) |
- continue; |
- var promise = resolveSourceName(id).then(onSourceNameResolved.bind(null, namesMapping, id)); |
- promises.push(promise); |
- } |
- return Promise.all(promises) |
- .then(() => WebInspector.SourceMapNamesResolver._scopeResolvedForTest()) |
- .then(() => namesMapping); |
- } |
- |
- /** |
- * @param {!Map<string, string>} namesMapping |
- * @param {!WebInspector.SourceMapNamesResolver.Identifier} id |
- * @param {?string} sourceName |
- */ |
- function onSourceNameResolved(namesMapping, id, sourceName) |
- { |
- if (!sourceName) |
- return; |
- namesMapping.set(id.name, sourceName); |
+ var script = scope.callFrame().script; |
+ var sourceMap = WebInspector.debuggerWorkspaceBinding.sourceMapForScript(script); |
+ if (!sourceMap) |
+ return Promise.resolve(new Map()); |
+ |
+ /** @type {!Map<string, !WebInspector.Text>} */ |
+ var textCache = new Map(); |
+ identifiersPromise = WebInspector.SourceMapNamesResolver._scopeIdentifiers(scope).then(onIdentifiers); |
+ scope[WebInspector.SourceMapNamesResolver._cachedIdentifiersSymbol] = identifiersPromise; |
+ return identifiersPromise; |
+ |
+ /** |
+ * @param {!Array<!WebInspector.SourceMapNamesResolver.Identifier>} identifiers |
+ * @return {!Promise<!Map<string, string>>} |
+ */ |
+ function onIdentifiers(identifiers) { |
+ var namesMapping = new Map(); |
+ // Extract as much as possible from SourceMap. |
+ for (var i = 0; i < identifiers.length; ++i) { |
+ var id = identifiers[i]; |
+ var entry = sourceMap.findEntry(id.lineNumber, id.columnNumber); |
+ if (entry && entry.name) |
+ namesMapping.set(id.name, entry.name); |
} |
- /** |
- * @param {!WebInspector.SourceMapNamesResolver.Identifier} id |
- * @return {!Promise<?string>} |
- */ |
- function resolveSourceName(id) |
- { |
- var startEntry = sourceMap.findEntry(id.lineNumber, id.columnNumber); |
- var endEntry = sourceMap.findEntry(id.lineNumber, id.columnNumber + id.name.length); |
- if (!startEntry || !endEntry || !startEntry.sourceURL || startEntry.sourceURL !== endEntry.sourceURL |
- || !startEntry.sourceLineNumber || !startEntry.sourceColumnNumber |
- || !endEntry.sourceLineNumber || !endEntry.sourceColumnNumber) |
- return Promise.resolve(/** @type {?string} */(null)); |
- var sourceTextRange = new WebInspector.TextRange(startEntry.sourceLineNumber, startEntry.sourceColumnNumber, endEntry.sourceLineNumber, endEntry.sourceColumnNumber); |
- var uiSourceCode = WebInspector.networkMapping.uiSourceCodeForScriptURL(startEntry.sourceURL, script); |
- if (!uiSourceCode) |
- return Promise.resolve(/** @type {?string} */(null)); |
- |
- return uiSourceCode.requestContent() |
- .then(onSourceContent.bind(null, sourceTextRange)); |
+ // Resolve missing identifier names from sourcemap ranges. |
+ var promises = []; |
+ for (var i = 0; i < identifiers.length; ++i) { |
+ var id = identifiers[i]; |
+ if (namesMapping.has(id.name)) |
+ continue; |
+ var promise = resolveSourceName(id).then(onSourceNameResolved.bind(null, namesMapping, id)); |
+ promises.push(promise); |
} |
- |
- /** |
- * @param {!WebInspector.TextRange} sourceTextRange |
- * @param {?string} content |
- * @return {?string} |
- */ |
- function onSourceContent(sourceTextRange, content) |
- { |
- if (!content) |
- return null; |
- var text = textCache.get(content); |
- if (!text) { |
- text = new WebInspector.Text(content); |
- textCache.set(content, text); |
- } |
- var originalIdentifier = text.extract(sourceTextRange).trim(); |
- return /[a-zA-Z0-9_$]+/.test(originalIdentifier) ? originalIdentifier : null; |
+ return Promise.all(promises) |
+ .then(() => WebInspector.SourceMapNamesResolver._scopeResolvedForTest()) |
+ .then(() => namesMapping); |
+ } |
+ |
+ /** |
+ * @param {!Map<string, string>} namesMapping |
+ * @param {!WebInspector.SourceMapNamesResolver.Identifier} id |
+ * @param {?string} sourceName |
+ */ |
+ function onSourceNameResolved(namesMapping, id, sourceName) { |
+ if (!sourceName) |
+ return; |
+ namesMapping.set(id.name, sourceName); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.SourceMapNamesResolver.Identifier} id |
+ * @return {!Promise<?string>} |
+ */ |
+ function resolveSourceName(id) { |
+ var startEntry = sourceMap.findEntry(id.lineNumber, id.columnNumber); |
+ var endEntry = sourceMap.findEntry(id.lineNumber, id.columnNumber + id.name.length); |
+ if (!startEntry || !endEntry || !startEntry.sourceURL || startEntry.sourceURL !== endEntry.sourceURL || |
+ !startEntry.sourceLineNumber || !startEntry.sourceColumnNumber || !endEntry.sourceLineNumber || |
+ !endEntry.sourceColumnNumber) |
+ return Promise.resolve(/** @type {?string} */ (null)); |
+ var sourceTextRange = new WebInspector.TextRange( |
+ startEntry.sourceLineNumber, startEntry.sourceColumnNumber, endEntry.sourceLineNumber, |
+ endEntry.sourceColumnNumber); |
+ var uiSourceCode = WebInspector.networkMapping.uiSourceCodeForScriptURL(startEntry.sourceURL, script); |
+ if (!uiSourceCode) |
+ return Promise.resolve(/** @type {?string} */ (null)); |
+ |
+ return uiSourceCode.requestContent().then(onSourceContent.bind(null, sourceTextRange)); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.TextRange} sourceTextRange |
+ * @param {?string} content |
+ * @return {?string} |
+ */ |
+ function onSourceContent(sourceTextRange, content) { |
+ if (!content) |
+ return null; |
+ var text = textCache.get(content); |
+ if (!text) { |
+ text = new WebInspector.Text(content); |
+ textCache.set(content, text); |
} |
+ var originalIdentifier = text.extract(sourceTextRange).trim(); |
+ return /[a-zA-Z0-9_$]+/.test(originalIdentifier) ? originalIdentifier : null; |
+ } |
}; |
-WebInspector.SourceMapNamesResolver._scopeResolvedForTest = function() { }; |
+WebInspector.SourceMapNamesResolver._scopeResolvedForTest = function() {}; |
/** |
* @param {!WebInspector.DebuggerModel.CallFrame} callFrame |
* @return {!Promise.<!Map<string, string>>} |
*/ |
-WebInspector.SourceMapNamesResolver._allVariablesInCallFrame = function(callFrame) |
-{ |
- var cached = callFrame[WebInspector.SourceMapNamesResolver._cachedMapSymbol]; |
- if (cached) |
- return Promise.resolve(cached); |
- |
- var promises = []; |
- var scopeChain = callFrame.scopeChain(); |
- for (var i = 0; i < scopeChain.length; ++i) |
- promises.push(WebInspector.SourceMapNamesResolver._resolveScope(scopeChain[i])); |
- |
- return Promise.all(promises).then(mergeVariables); |
- |
- /** |
- * @param {!Array<!Map<string, string>>} nameMappings |
- * @return {!Map<string, string>} |
- */ |
- function mergeVariables(nameMappings) |
- { |
- var reverseMapping = new Map(); |
- for (var map of nameMappings) { |
- for (var compiledName of map.keys()) { |
- var originalName = map.get(compiledName); |
- if (!reverseMapping.has(originalName)) |
- reverseMapping.set(originalName, compiledName); |
- } |
- } |
- callFrame[WebInspector.SourceMapNamesResolver._cachedMapSymbol] = reverseMapping; |
- return reverseMapping; |
+WebInspector.SourceMapNamesResolver._allVariablesInCallFrame = function(callFrame) { |
+ var cached = callFrame[WebInspector.SourceMapNamesResolver._cachedMapSymbol]; |
+ if (cached) |
+ return Promise.resolve(cached); |
+ |
+ var promises = []; |
+ var scopeChain = callFrame.scopeChain(); |
+ for (var i = 0; i < scopeChain.length; ++i) |
+ promises.push(WebInspector.SourceMapNamesResolver._resolveScope(scopeChain[i])); |
+ |
+ return Promise.all(promises).then(mergeVariables); |
+ |
+ /** |
+ * @param {!Array<!Map<string, string>>} nameMappings |
+ * @return {!Map<string, string>} |
+ */ |
+ function mergeVariables(nameMappings) { |
+ var reverseMapping = new Map(); |
+ for (var map of nameMappings) { |
+ for (var compiledName of map.keys()) { |
+ var originalName = map.get(compiledName); |
+ if (!reverseMapping.has(originalName)) |
+ reverseMapping.set(originalName, compiledName); |
+ } |
} |
+ callFrame[WebInspector.SourceMapNamesResolver._cachedMapSymbol] = reverseMapping; |
+ return reverseMapping; |
+ } |
}; |
/** |
@@ -227,24 +223,24 @@ WebInspector.SourceMapNamesResolver._allVariablesInCallFrame = function(callFram |
* @param {number} endColumnNumber |
* @return {!Promise<string>} |
*/ |
-WebInspector.SourceMapNamesResolver.resolveExpression = function(callFrame, originalText, uiSourceCode, lineNumber, startColumnNumber, endColumnNumber) |
-{ |
- if (!Runtime.experiments.isEnabled("resolveVariableNames") || !uiSourceCode.contentType().isFromSourceMap()) |
- return Promise.resolve(""); |
- |
- return WebInspector.SourceMapNamesResolver._allVariablesInCallFrame(callFrame).then(findCompiledName); |
- |
- /** |
- * @param {!Map<string, string>} reverseMapping |
- * @return {!Promise<string>} |
- */ |
- function findCompiledName(reverseMapping) |
- { |
- if (reverseMapping.has(originalText)) |
- return Promise.resolve(reverseMapping.get(originalText) || ""); |
- |
- return WebInspector.SourceMapNamesResolver._resolveExpression(callFrame, uiSourceCode, lineNumber, startColumnNumber, endColumnNumber); |
- } |
+WebInspector.SourceMapNamesResolver.resolveExpression = function( |
+ callFrame, originalText, uiSourceCode, lineNumber, startColumnNumber, endColumnNumber) { |
+ if (!Runtime.experiments.isEnabled('resolveVariableNames') || !uiSourceCode.contentType().isFromSourceMap()) |
+ return Promise.resolve(''); |
+ |
+ return WebInspector.SourceMapNamesResolver._allVariablesInCallFrame(callFrame).then(findCompiledName); |
+ |
+ /** |
+ * @param {!Map<string, string>} reverseMapping |
+ * @return {!Promise<string>} |
+ */ |
+ function findCompiledName(reverseMapping) { |
+ if (reverseMapping.has(originalText)) |
+ return Promise.resolve(reverseMapping.get(originalText) || ''); |
+ |
+ return WebInspector.SourceMapNamesResolver._resolveExpression( |
+ callFrame, uiSourceCode, lineNumber, startColumnNumber, endColumnNumber); |
+ } |
}; |
/** |
@@ -255,326 +251,304 @@ WebInspector.SourceMapNamesResolver.resolveExpression = function(callFrame, orig |
* @param {number} endColumnNumber |
* @return {!Promise<string>} |
*/ |
-WebInspector.SourceMapNamesResolver._resolveExpression = function(callFrame, uiSourceCode, lineNumber, startColumnNumber, endColumnNumber) |
-{ |
- var target = callFrame.target(); |
- var rawLocation = WebInspector.debuggerWorkspaceBinding.uiLocationToRawLocation(target, uiSourceCode, lineNumber, startColumnNumber); |
- if (!rawLocation) |
- return Promise.resolve(""); |
- |
- var script = rawLocation.script(); |
- if (!script) |
- return Promise.resolve(""); |
- var sourceMap = WebInspector.debuggerWorkspaceBinding.sourceMapForScript(script); |
- if (!sourceMap) |
- return Promise.resolve(""); |
- |
- return script.requestContent().then(onContent); |
- |
- /** |
- * @param {?string} content |
- * @return {!Promise<string>} |
- */ |
- function onContent(content) |
- { |
- if (!content) |
- return Promise.resolve(""); |
- |
- var text = new WebInspector.Text(content); |
- var textRange = sourceMap.reverseMapTextRange(uiSourceCode.url(), new WebInspector.TextRange(lineNumber, startColumnNumber, lineNumber, endColumnNumber)); |
- var originalText = text.extract(textRange); |
- if (!originalText) |
- return Promise.resolve(""); |
- return WebInspector.formatterWorkerPool.runTask("evaluatableJavaScriptSubstring", {content: originalText}) |
- .then(onResult); |
- } |
- |
- /** |
- * @param {?MessageEvent} event |
- * @return {string} |
- */ |
- function onResult(event) |
- { |
- return event ? /** @type {string} */(event.data) : ""; |
- } |
+WebInspector.SourceMapNamesResolver._resolveExpression = function( |
+ callFrame, uiSourceCode, lineNumber, startColumnNumber, endColumnNumber) { |
+ var target = callFrame.target(); |
+ var rawLocation = WebInspector.debuggerWorkspaceBinding.uiLocationToRawLocation( |
+ target, uiSourceCode, lineNumber, startColumnNumber); |
+ if (!rawLocation) |
+ return Promise.resolve(''); |
+ |
+ var script = rawLocation.script(); |
+ if (!script) |
+ return Promise.resolve(''); |
+ var sourceMap = WebInspector.debuggerWorkspaceBinding.sourceMapForScript(script); |
+ if (!sourceMap) |
+ return Promise.resolve(''); |
+ |
+ return script.requestContent().then(onContent); |
+ |
+ /** |
+ * @param {?string} content |
+ * @return {!Promise<string>} |
+ */ |
+ function onContent(content) { |
+ if (!content) |
+ return Promise.resolve(''); |
+ |
+ var text = new WebInspector.Text(content); |
+ var textRange = sourceMap.reverseMapTextRange( |
+ uiSourceCode.url(), new WebInspector.TextRange(lineNumber, startColumnNumber, lineNumber, endColumnNumber)); |
+ var originalText = text.extract(textRange); |
+ if (!originalText) |
+ return Promise.resolve(''); |
+ return WebInspector.formatterWorkerPool.runTask('evaluatableJavaScriptSubstring', {content: originalText}) |
+ .then(onResult); |
+ } |
+ |
+ /** |
+ * @param {?MessageEvent} event |
+ * @return {string} |
+ */ |
+ function onResult(event) { |
+ return event ? /** @type {string} */ (event.data) : ''; |
+ } |
}; |
/** |
* @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") || !callFrame.scopeChain().length) |
- 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); |
- } |
+WebInspector.SourceMapNamesResolver.resolveThisObject = function(callFrame) { |
+ if (!callFrame) |
+ return Promise.resolve(/** @type {?WebInspector.RemoteObject} */ (null)); |
+ if (!Runtime.experiments.isEnabled('resolveVariableNames') || !callFrame.scopeChain().length) |
+ 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} |
*/ |
-WebInspector.SourceMapNamesResolver.resolveScopeInObject = function(scope) |
-{ |
- if (!Runtime.experiments.isEnabled("resolveVariableNames")) |
- return scope.object(); |
+WebInspector.SourceMapNamesResolver.resolveScopeInObject = function(scope) { |
+ if (!Runtime.experiments.isEnabled('resolveVariableNames')) |
+ return scope.object(); |
- var startLocation = scope.startLocation(); |
- var endLocation = scope.endLocation(); |
+ var startLocation = scope.startLocation(); |
+ var endLocation = scope.endLocation(); |
- if (scope.type() === DebuggerAgent.ScopeType.Global || !startLocation || !endLocation || !startLocation.script().sourceMapURL || startLocation.script() !== endLocation.script()) |
- return scope.object(); |
+ if (scope.type() === DebuggerAgent.ScopeType.Global || !startLocation || !endLocation || |
+ !startLocation.script().sourceMapURL || startLocation.script() !== endLocation.script()) |
+ return scope.object(); |
- return new WebInspector.SourceMapNamesResolver.RemoteObject(scope); |
+ return new WebInspector.SourceMapNamesResolver.RemoteObject(scope); |
}; |
/** |
- * @constructor |
- * @extends {WebInspector.RemoteObject} |
- * @param {!WebInspector.DebuggerModel.Scope} scope |
+ * @unrestricted |
*/ |
-WebInspector.SourceMapNamesResolver.RemoteObject = function(scope) |
-{ |
- WebInspector.RemoteObject.call(this); |
+WebInspector.SourceMapNamesResolver.RemoteObject = class extends WebInspector.RemoteObject { |
+ /** |
+ * @param {!WebInspector.DebuggerModel.Scope} scope |
+ */ |
+ constructor(scope) { |
+ super(); |
this._scope = scope; |
this._object = scope.object(); |
-}; |
- |
-WebInspector.SourceMapNamesResolver.RemoteObject.prototype = { |
- /** |
- * @override |
- * @return {?RuntimeAgent.CustomPreview} |
- */ |
- customPreview: function() |
- { |
- return this._object.customPreview(); |
- }, |
- |
- /** |
- * @override |
- * @return {string} |
- */ |
- get type() |
- { |
- return this._object.type; |
- }, |
- |
- /** |
- * @override |
- * @return {string|undefined} |
- */ |
- get subtype() |
- { |
- return this._object.subtype; |
- }, |
- |
- /** |
- * @override |
- * @return {string|undefined} |
- */ |
- get description() |
- { |
- return this._object.description; |
- }, |
- |
- /** |
- * @override |
- * @return {boolean} |
- */ |
- get hasChildren() |
- { |
- return this._object.hasChildren; |
- }, |
- |
- /** |
- * @override |
- * @return {number} |
- */ |
- arrayLength: function() |
- { |
- return this._object.arrayLength(); |
- }, |
- |
- /** |
- * @override |
- * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback |
- */ |
- getOwnProperties: function(callback) |
- { |
- this._object.getOwnProperties(callback); |
- }, |
- |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {?RuntimeAgent.CustomPreview} |
+ */ |
+ customPreview() { |
+ return this._object.customPreview(); |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {string} |
+ */ |
+ get type() { |
+ return this._object.type; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {string|undefined} |
+ */ |
+ get subtype() { |
+ return this._object.subtype; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {string|undefined} |
+ */ |
+ get description() { |
+ return this._object.description; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {boolean} |
+ */ |
+ get hasChildren() { |
+ return this._object.hasChildren; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {number} |
+ */ |
+ arrayLength() { |
+ return this._object.arrayLength(); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {function(?Array.<!WebInspector.RemoteObjectProperty>, ?Array.<!WebInspector.RemoteObjectProperty>)} callback |
+ */ |
+ getOwnProperties(callback) { |
+ this._object.getOwnProperties(callback); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {boolean} accessorPropertiesOnly |
+ * @param {function(?Array<!WebInspector.RemoteObjectProperty>, ?Array<!WebInspector.RemoteObjectProperty>)} callback |
+ */ |
+ getAllProperties(accessorPropertiesOnly, callback) { |
/** |
- * @override |
- * @param {boolean} accessorPropertiesOnly |
- * @param {function(?Array<!WebInspector.RemoteObjectProperty>, ?Array<!WebInspector.RemoteObjectProperty>)} callback |
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties |
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties |
+ * @this {WebInspector.SourceMapNamesResolver.RemoteObject} |
*/ |
- getAllProperties: function(accessorPropertiesOnly, callback) |
- { |
- /** |
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties |
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties |
- * @this {WebInspector.SourceMapNamesResolver.RemoteObject} |
- */ |
- function wrappedCallback(properties, internalProperties) |
- { |
- WebInspector.SourceMapNamesResolver._resolveScope(this._scope).then(resolveNames.bind(null, properties, internalProperties)); |
- } |
- |
- /** |
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties |
- * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties |
- * @param {!Map<string, string>} namesMapping |
- */ |
- function resolveNames(properties, internalProperties, namesMapping) |
- { |
- var newProperties = []; |
- if (properties) { |
- for (var i = 0; i < properties.length; ++i) { |
- var property = properties[i]; |
- var name = namesMapping.get(property.name) || properties[i].name; |
- newProperties.push(new WebInspector.RemoteObjectProperty(name, property.value, property.enumerable, property.writable, property.isOwn, property.wasThrown, property.symbol, property.synthetic)); |
- } |
- } |
- |
- callback(newProperties, internalProperties); |
- } |
- |
- this._object.getAllProperties(accessorPropertiesOnly, wrappedCallback.bind(this)); |
- }, |
+ function wrappedCallback(properties, internalProperties) { |
+ WebInspector.SourceMapNamesResolver._resolveScope(this._scope) |
+ .then(resolveNames.bind(null, properties, internalProperties)); |
+ } |
/** |
- * @override |
- * @param {string|!RuntimeAgent.CallArgument} argumentName |
- * @param {string} value |
- * @param {function(string=)} callback |
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties |
+ * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties |
+ * @param {!Map<string, string>} namesMapping |
*/ |
- setPropertyValue: function(argumentName, value, callback) |
- { |
- WebInspector.SourceMapNamesResolver._resolveScope(this._scope).then(resolveName.bind(this)); |
- |
- /** |
- * @param {!Map<string, string>} namesMapping |
- * @this {WebInspector.SourceMapNamesResolver.RemoteObject} |
- */ |
- function resolveName(namesMapping) |
- { |
- var name; |
- if (typeof argumentName === "string") |
- name = argumentName; |
- else |
- name = /** @type {string} */ (argumentName.value); |
- |
- var actualName = name; |
- for (var compiledName of namesMapping.keys()) { |
- if (namesMapping.get(compiledName) === name) { |
- actualName = compiledName; |
- break; |
- } |
- } |
- this._object.setPropertyValue(actualName, value, callback); |
+ function resolveNames(properties, internalProperties, namesMapping) { |
+ var newProperties = []; |
+ if (properties) { |
+ for (var i = 0; i < properties.length; ++i) { |
+ var property = properties[i]; |
+ var name = namesMapping.get(property.name) || properties[i].name; |
+ newProperties.push(new WebInspector.RemoteObjectProperty( |
+ name, property.value, property.enumerable, property.writable, property.isOwn, property.wasThrown, |
+ property.symbol, property.synthetic)); |
} |
- }, |
- |
- /** |
- * @override |
- * @return {!Promise<?Array<!WebInspector.EventListener>>} |
- */ |
- eventListeners: function() |
- { |
- return this._object.eventListeners(); |
- }, |
- |
- /** |
- * @override |
- * @param {!RuntimeAgent.CallArgument} name |
- * @param {function(string=)} callback |
- */ |
- deleteProperty: function(name, callback) |
- { |
- this._object.deleteProperty(name, callback); |
- }, |
- |
- /** |
- * @override |
- * @param {function(this:Object, ...)} functionDeclaration |
- * @param {!Array<!RuntimeAgent.CallArgument>=} args |
- * @param {function(?WebInspector.RemoteObject, boolean=)=} callback |
- */ |
- callFunction: function(functionDeclaration, args, callback) |
- { |
- this._object.callFunction(functionDeclaration, args, callback); |
- }, |
+ } |
- /** |
- * @override |
- * @param {function(this:Object, ...)} functionDeclaration |
- * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args |
- * @param {function(*)} callback |
- */ |
- callFunctionJSON: function(functionDeclaration, args, callback) |
- { |
- this._object.callFunctionJSON(functionDeclaration, args, callback); |
- }, |
+ callback(newProperties, internalProperties); |
+ } |
- /** |
- * @override |
- * @return {!WebInspector.Target} |
- */ |
- target: function() |
- { |
- return this._object.target(); |
- }, |
+ this._object.getAllProperties(accessorPropertiesOnly, wrappedCallback.bind(this)); |
+ } |
- /** |
- * @override |
- * @return {?WebInspector.DebuggerModel} |
- */ |
- debuggerModel: function() |
- { |
- return this._object.debuggerModel(); |
- }, |
+ /** |
+ * @override |
+ * @param {string|!RuntimeAgent.CallArgument} argumentName |
+ * @param {string} value |
+ * @param {function(string=)} callback |
+ */ |
+ setPropertyValue(argumentName, value, callback) { |
+ WebInspector.SourceMapNamesResolver._resolveScope(this._scope).then(resolveName.bind(this)); |
/** |
- * @override |
- * @return {boolean} |
+ * @param {!Map<string, string>} namesMapping |
+ * @this {WebInspector.SourceMapNamesResolver.RemoteObject} |
*/ |
- isNode: function() |
- { |
- return this._object.isNode(); |
- }, |
- |
- __proto__: WebInspector.RemoteObject.prototype |
+ function resolveName(namesMapping) { |
+ var name; |
+ if (typeof argumentName === 'string') |
+ name = argumentName; |
+ else |
+ name = /** @type {string} */ (argumentName.value); |
+ |
+ var actualName = name; |
+ for (var compiledName of namesMapping.keys()) { |
+ if (namesMapping.get(compiledName) === name) { |
+ actualName = compiledName; |
+ break; |
+ } |
+ } |
+ this._object.setPropertyValue(actualName, value, callback); |
+ } |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {!Promise<?Array<!WebInspector.EventListener>>} |
+ */ |
+ eventListeners() { |
+ return this._object.eventListeners(); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!RuntimeAgent.CallArgument} name |
+ * @param {function(string=)} callback |
+ */ |
+ deleteProperty(name, callback) { |
+ this._object.deleteProperty(name, callback); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {function(this:Object, ...)} functionDeclaration |
+ * @param {!Array<!RuntimeAgent.CallArgument>=} args |
+ * @param {function(?WebInspector.RemoteObject, boolean=)=} callback |
+ */ |
+ callFunction(functionDeclaration, args, callback) { |
+ this._object.callFunction(functionDeclaration, args, callback); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {function(this:Object, ...)} functionDeclaration |
+ * @param {!Array<!RuntimeAgent.CallArgument>|undefined} args |
+ * @param {function(*)} callback |
+ */ |
+ callFunctionJSON(functionDeclaration, args, callback) { |
+ this._object.callFunctionJSON(functionDeclaration, args, callback); |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {!WebInspector.Target} |
+ */ |
+ target() { |
+ return this._object.target(); |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {?WebInspector.DebuggerModel} |
+ */ |
+ debuggerModel() { |
+ return this._object.debuggerModel(); |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {boolean} |
+ */ |
+ isNode() { |
+ return this._object.isNode(); |
+ } |
}; |
- |