Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js b/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js |
| index b5d8d190ed0a097b7d21663146d2a424c64242b2..e5c3f8e53169ff6c83d29dfe20d58de0618872b0 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js |
| @@ -146,18 +146,34 @@ WebInspector.ConsoleViewMessage.prototype = { |
| WebInspector.appendStyle(formattedMessage, "components/objectValue.css"); |
| formattedMessage.className = "console-message-text source-code"; |
| - /** |
| - * @param {string} title |
| - * @return {!Element} |
| - * @this {WebInspector.ConsoleMessage} |
| - */ |
| - function linkifyRequest(title) |
| - { |
| - return WebInspector.Linkifier.linkifyUsingRevealer(/** @type {!WebInspector.NetworkRequest} */ (this.request), title, this.request.url); |
| + var consoleMessage = this._message; |
| + var messageElement = this._buildMessage(consoleMessage); |
| + formattedMessage.appendChild(messageElement); |
| + |
| + var anchorElement = this._buildAnchor(consoleMessage); |
| + if (anchorElement) { |
| + // Append a space to prevent the anchor text from being glued to the console message when the user selects and copies the console messages. |
| + anchorElement.appendChild(createTextNode(" ")); |
| + formattedMessage.insertBefore(anchorElement, formattedMessage.firstChild); |
| } |
| - var consoleMessage = this._message; |
| - var anchorElement; |
| + var dumpStackTrace = !!consoleMessage.stackTrace && (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.Network || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Error || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError || consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Warning); |
| + var target = this._target(); |
| + if (dumpStackTrace && target) { |
| + var stackTracePreview = WebInspector.DOMPresentationUtils.buildStackTracePreviewContents(target, this._linkifier, consoleMessage.stackTrace); |
| + var autoExpand = consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace; |
| + formattedMessage = this._wrapStackTraceFormatting(formattedMessage, stackTracePreview, autoExpand); |
| + } |
| + |
| + return formattedMessage; |
| + }, |
| + |
| + /** |
| + * @param {!WebInspector.ConsoleMessage} consoleMessage |
| + * @return {!Element} |
| + */ |
| + _buildMessage: function(consoleMessage) |
| + { |
| var messageElement; |
| if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.ConsoleAPI) { |
| switch (consoleMessage.type) { |
| @@ -165,8 +181,8 @@ WebInspector.ConsoleViewMessage.prototype = { |
| messageElement = this._format(consoleMessage.parameters || ["console.trace"]); |
| break; |
| case WebInspector.ConsoleMessage.MessageType.Clear: |
| - messageElement = createTextNode(WebInspector.UIString("Console was cleared")); |
| - formattedMessage.classList.add("console-info"); |
| + messageElement = createElementWithClass("span", "console-info"); |
| + messageElement.textContent = WebInspector.UIString("Console was cleared"); |
| break; |
| case WebInspector.ConsoleMessage.MessageType.Assert: |
| var args = [WebInspector.UIString("Assertion failed:")]; |
| @@ -204,11 +220,6 @@ WebInspector.ConsoleViewMessage.prototype = { |
| messageElement.appendChild(fragment); |
| } |
| } else { |
| - var url = consoleMessage.url; |
| - if (url) { |
| - var isExternal = !WebInspector.resourceForURL(url) && !WebInspector.networkMapping.uiSourceCodeForURLForAnyTarget(url); |
| - anchorElement = WebInspector.linkifyURLAsNode(url, url, "console-message-url", isExternal); |
| - } |
|
luoe
2016/09/28 01:08:30
This chunk was moved to L:259
|
| messageElement = this._format([consoleMessage.messageText]); |
| } |
| } else { |
| @@ -216,6 +227,26 @@ WebInspector.ConsoleViewMessage.prototype = { |
| messageElement = this._format(args); |
| } |
| + return messageElement; |
| + |
| + /** |
| + * @param {string} title |
| + * @return {!Element} |
| + * @this {WebInspector.ConsoleMessage} |
| + */ |
| + function linkifyRequest(title) |
| + { |
| + return WebInspector.Linkifier.linkifyUsingRevealer(/** @type {!WebInspector.NetworkRequest} */ (this.request), title, this.request.url); |
| + } |
| + }, |
| + |
| + /** |
| + * @param {!WebInspector.ConsoleMessage} consoleMessage |
| + * @return {?Element} |
| + */ |
| + _buildAnchor: function(consoleMessage) |
| + { |
| + var anchorElement = null; |
| if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource.Network || consoleMessage.request) { |
| if (consoleMessage.scriptId) { |
| anchorElement = this._linkifyScriptId(consoleMessage.scriptId, consoleMessage.url || "", consoleMessage.line, consoleMessage.column); |
| @@ -225,58 +256,60 @@ WebInspector.ConsoleViewMessage.prototype = { |
| else if (consoleMessage.url && consoleMessage.url !== "undefined") |
| anchorElement = this._linkifyLocation(consoleMessage.url, consoleMessage.line, consoleMessage.column); |
| } |
| + } else if (consoleMessage.url) { |
| + var url = consoleMessage.url; |
| + var isExternal = !WebInspector.resourceForURL(url) && !WebInspector.networkMapping.uiSourceCodeForURLForAnyTarget(url); |
| + anchorElement = WebInspector.linkifyURLAsNode(url, url, "console-message-url", isExternal); |
| } |
| - formattedMessage.appendChild(messageElement); |
| - if (anchorElement) { |
| - // Append a space to prevent the anchor text from being glued to the console message when the user selects and copies the console messages. |
| - anchorElement.appendChild(createTextNode(" ")); |
| - formattedMessage.insertBefore(anchorElement, formattedMessage.firstChild); |
| - } |
| + return anchorElement; |
| + }, |
| - var dumpStackTrace = !!consoleMessage.stackTrace && (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.Network || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Error || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError || consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Warning); |
| - var target = this._target(); |
| - if (dumpStackTrace && target) { |
| - var toggleElement = createElementWithClass("div", "console-message-stack-trace-toggle"); |
| - var triangleElement = toggleElement.createChild("div", "console-message-stack-trace-triangle"); |
| - var contentElement = toggleElement.createChild("div", "console-message-stack-trace-wrapper"); |
| - |
| - var clickableElement = contentElement.createChild("div"); |
| - clickableElement.appendChild(formattedMessage); |
| - var stackTraceElement = contentElement.createChild("div"); |
| - stackTraceElement.appendChild(WebInspector.DOMPresentationUtils.buildStackTracePreviewContents(target, this._linkifier, this._message.stackTrace)); |
| - stackTraceElement.classList.add("hidden"); |
| - |
| - /** |
| - * @param {boolean} expand |
| - */ |
| - function expandStackTrace(expand) |
| - { |
| - stackTraceElement.classList.toggle("hidden", !expand); |
| - toggleElement.classList.toggle("expanded", expand); |
| - } |
| + /** |
| + * @param {!Element} contents |
| + * @param {!Element} stackTracePreview |
| + * @param {boolean=} autoExpand |
| + * @return {!Element} |
| + */ |
| + _wrapStackTraceFormatting: function(contents, stackTracePreview, autoExpand) |
| + { |
| + var toggleElement = createElementWithClass("div", "console-message-stack-trace-toggle"); |
| + var triangleElement = toggleElement.createChild("div", "console-message-stack-trace-triangle"); |
| + var contentElement = toggleElement.createChild("div", "console-message-stack-trace-wrapper"); |
| - /** |
| - * @param {?Event} event |
| - */ |
| - function toggleStackTrace(event) |
| - { |
| - if (event.target.hasSelection()) |
| - return; |
| - expandStackTrace(stackTraceElement.classList.contains("hidden")); |
| - event.consume(); |
| - } |
| + var clickableElement = contentElement.createChild("div"); |
| + clickableElement.appendChild(contents); |
| + var stackTraceElement = contentElement.createChild("div"); |
| + stackTraceElement.appendChild(stackTracePreview); |
| + stackTraceElement.classList.add("hidden"); |
| - clickableElement.addEventListener("click", toggleStackTrace, false); |
| - triangleElement.addEventListener("click", toggleStackTrace, false); |
| - if (consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace) |
| - expandStackTrace(true); |
| + /** |
| + * @param {boolean} expand |
| + */ |
| + function expandStackTrace(expand) |
| + { |
| + stackTraceElement.classList.toggle("hidden", !expand); |
| + toggleElement.classList.toggle("expanded", expand); |
| + } |
| - toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, true); |
| - formattedMessage = toggleElement; |
| + /** |
| + * @param {?Event} event |
| + */ |
| + function toggleStackTrace(event) |
| + { |
| + if (event.target.hasSelection()) |
| + return; |
| + expandStackTrace(stackTraceElement.classList.contains("hidden")); |
| + event.consume(); |
| } |
| - return formattedMessage; |
| + clickableElement.addEventListener("click", toggleStackTrace, false); |
| + triangleElement.addEventListener("click", toggleStackTrace, false); |
| + if (autoExpand) |
| + expandStackTrace(true); |
| + |
| + toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, true); |
| + return toggleElement; |
| }, |
| /** |
| @@ -320,6 +353,10 @@ WebInspector.ConsoleViewMessage.prototype = { |
| return this._linkifier.linkifyScriptLocation(target, scriptId, url, lineNumber, columnNumber, "console-message-url"); |
| }, |
| + /** |
| + * @param {!Array.<!WebInspector.RemoteObject|string>} parameters |
| + * @return {!Element} |
| + */ |
| _format: function(parameters) |
| { |
| // This node is used like a Builder. Values are continually appended onto it. |
| @@ -348,12 +385,11 @@ WebInspector.ConsoleViewMessage.prototype = { |
| } |
| // There can be string log and string eval result. We distinguish between them based on message type. |
| - var shouldFormatMessage = WebInspector.RemoteObject.type(parameters[0]) === "string" && (this._message.type !== WebInspector.ConsoleMessage.MessageType.Result || this._message.level === WebInspector.ConsoleMessage.MessageLevel.Error || this._message.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError); |
| + var shouldFormatMessage = WebInspector.RemoteObject.type((/** @type {!Array.<!WebInspector.RemoteObject>} **/ (parameters))[0]) === "string" && (this._message.type !== WebInspector.ConsoleMessage.MessageType.Result || this._message.level === WebInspector.ConsoleMessage.MessageLevel.Error || this._message.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError); |
| // Multiple parameters with the first being a format string. Save unused substitutions. |
| if (shouldFormatMessage) { |
| - // Multiple parameters with the first being a format string. Save unused substitutions. |
| - var result = this._formatWithSubstitutionString(parameters[0].description, parameters.slice(1), formattedResult); |
| + var result = this._formatWithSubstitutionString(/** @type {string} **/ (parameters[0].description), parameters.slice(1), formattedResult); |
| parameters = result.unusedSubstitutions; |
| if (parameters.length) |
| formattedResult.createTextChild(" "); |
| @@ -759,7 +795,7 @@ WebInspector.ConsoleViewMessage.prototype = { |
| /** |
| * @param {string} format |
| - * @param {!Array.<string>} parameters |
| + * @param {!Array.<!WebInspector.RemoteObject>} parameters |
|
luoe
2016/09/28 01:08:30
Note: the old version was incorrect. It actually
|
| * @param {!Element} formattedResult |
| */ |
| _formatWithSubstitutionString: function(format, parameters, formattedResult) |