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 10ab001b42fb572d3f81910b1b164fed5ca4f067..d4278980e0a064397bcc04110fe79eb228e02bb8 100644 | 
| --- a/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js | 
| +++ b/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js | 
| @@ -129,7 +129,7 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| var formattedMessage = createElement("span"); | 
| WebInspector.appendStyle(formattedMessage, "components/objectValue.css"); | 
| formattedMessage.className = "console-message-text source-code"; | 
| - var anchorElement = this._buildMessageAnchor(consoleMessage); | 
| + var anchorElement = this._buildMessageAnchor(consoleMessage, this._linkifier); | 
| if (anchorElement) | 
| formattedMessage.appendChild(anchorElement); | 
| @@ -185,7 +185,7 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| var formattedResult = createElement("span"); | 
| var tableElement = formattedResult.createChild("div", "console-message-formatted-table"); | 
| var dataGridContainer = tableElement.createChild("span"); | 
| - tableElement.appendChild(this._formatParameter(table, true, false)); | 
| + tableElement.appendChild(this._formatParameter(consoleMessage, this._linkifier, table, true, false)); | 
| dataGridContainer.appendChild(this._dataGrid.element); | 
| formattedMessage.appendChild(formattedResult); | 
| this._dataGrid.renderInline(); | 
| @@ -195,15 +195,16 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| /** | 
| * @param {!WebInspector.ConsoleMessage} consoleMessage | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| * @return {!Element} | 
| */ | 
| - _buildMessage: function(consoleMessage) | 
| + _buildMessage: function(consoleMessage, linkifier) | 
| { | 
| var messageElement; | 
| if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.ConsoleAPI) { | 
| switch (consoleMessage.type) { | 
| case WebInspector.ConsoleMessage.MessageType.Trace: | 
| - messageElement = this._format(consoleMessage.parameters || ["console.trace"]); | 
| + messageElement = this._format(consoleMessage, linkifier, consoleMessage.parameters || ["console.trace"]); | 
| break; | 
| case WebInspector.ConsoleMessage.MessageType.Clear: | 
| messageElement = createElementWithClass("span", "console-info"); | 
| @@ -213,22 +214,22 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| var args = [WebInspector.UIString("Assertion failed:")]; | 
| if (consoleMessage.parameters) | 
| args = args.concat(consoleMessage.parameters); | 
| - messageElement = this._format(args); | 
| + messageElement = this._format(consoleMessage, linkifier, args); | 
| break; | 
| case WebInspector.ConsoleMessage.MessageType.Dir: | 
| var obj = consoleMessage.parameters ? consoleMessage.parameters[0] : undefined; | 
| var args = ["%O", obj]; | 
| - messageElement = this._format(args); | 
| + messageElement = this._format(consoleMessage, linkifier, args); | 
| break; | 
| case WebInspector.ConsoleMessage.MessageType.Profile: | 
| case WebInspector.ConsoleMessage.MessageType.ProfileEnd: | 
| - messageElement = this._format([consoleMessage.messageText]); | 
| + messageElement = this._format(consoleMessage, linkifier, [consoleMessage.messageText]); | 
| break; | 
| default: | 
| if (consoleMessage.parameters && consoleMessage.parameters.length === 1 && consoleMessage.parameters[0].type === "string") | 
| - messageElement = this._tryFormatAsError(/** @type {string} */(consoleMessage.parameters[0].value)); | 
| + messageElement = this._tryFormatAsError(consoleMessage.target(), linkifier, /** @type {string} */(consoleMessage.parameters[0].value)); | 
| var args = consoleMessage.parameters || [consoleMessage.messageText]; | 
| - messageElement = messageElement || this._format(args); | 
| + messageElement = messageElement || this._format(consoleMessage, linkifier, args); | 
| } | 
| } else if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.Network) { | 
| if (consoleMessage.request) { | 
| @@ -245,18 +246,18 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| messageElement.appendChild(fragment); | 
| } | 
| } else { | 
| - messageElement = this._format([consoleMessage.messageText]); | 
| + messageElement = this._format(consoleMessage, linkifier, [consoleMessage.messageText]); | 
| } | 
| } else { | 
| var args = consoleMessage.parameters || [consoleMessage.messageText]; | 
| - messageElement = this._format(args); | 
| + messageElement = this._format(consoleMessage, linkifier, args); | 
| } | 
| var formattedMessage = createElement("span"); | 
| WebInspector.appendStyle(formattedMessage, "components/objectValue.css"); | 
| formattedMessage.className = "console-message-text source-code"; | 
| - var anchorElement = this._buildMessageAnchor(consoleMessage); | 
| + var anchorElement = this._buildMessageAnchor(consoleMessage, linkifier); | 
| if (anchorElement) | 
| formattedMessage.appendChild(anchorElement); | 
| formattedMessage.appendChild(messageElement); | 
| @@ -275,18 +276,19 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| /** | 
| * @param {!WebInspector.ConsoleMessage} consoleMessage | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| * @return {?Element} | 
| */ | 
| - _buildMessageAnchor: function(consoleMessage) | 
| + _buildMessageAnchor: function(consoleMessage, linkifier) | 
| { | 
| 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); | 
| + anchorElement = this._linkifyScriptId(linkifier, consoleMessage); | 
| else if (consoleMessage.stackTrace && consoleMessage.stackTrace.callFrames.length) | 
| - anchorElement = this._linkifyStackTraceTopFrame(consoleMessage.stackTrace); | 
| + anchorElement = this._linkifyStackTraceTopFrame(linkifier, consoleMessage); | 
| else if (consoleMessage.url && consoleMessage.url !== "undefined") | 
| - anchorElement = this._linkifyLocation(consoleMessage.url, consoleMessage.line, consoleMessage.column); | 
| + anchorElement = this._linkifyLocation(linkifier, consoleMessage); | 
| } else if (consoleMessage.url) { | 
| var url = consoleMessage.url; | 
| var isExternal = !WebInspector.resourceForURL(url) && !WebInspector.networkMapping.uiSourceCodeForURLForAnyTarget(url); | 
| @@ -311,7 +313,7 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| var triangleElement = toggleElement.createChild("div", "console-message-stack-trace-triangle"); | 
| var contentElement = toggleElement.createChild("div", "console-message-stack-trace-wrapper"); | 
| - var messageElement = this._buildMessage(consoleMessage); | 
| + var messageElement = this._buildMessage(consoleMessage, linkifier); | 
| var clickableElement = contentElement.createChild("div"); | 
| clickableElement.appendChild(messageElement); | 
| var stackTraceElement = contentElement.createChild("div"); | 
| @@ -349,44 +351,42 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| }, | 
| /** | 
| - * @param {string} url | 
| - * @param {number} lineNumber | 
| - * @param {number} columnNumber | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| + * @param {!WebInspector.ConsoleMessage} consoleMessage | 
| * @return {?Element} | 
| */ | 
| - _linkifyLocation: function(url, lineNumber, columnNumber) | 
| + _linkifyLocation: function(linkifier, consoleMessage) | 
| { | 
| - var target = this._target(); | 
| + var target = consoleMessage.target(); | 
| if (!target) | 
| return null; | 
| - return this._linkifier.linkifyScriptLocation(target, null, url, lineNumber, columnNumber, "console-message-url"); | 
| + return this._linkifier.linkifyScriptLocation(target, null, consoleMessage.url || "", consoleMessage.line, consoleMessage.column, "console-message-url"); | 
| }, | 
| /** | 
| - * @param {!RuntimeAgent.StackTrace} stackTrace | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| + * @param {!WebInspector.ConsoleMessage} consoleMessage | 
| * @return {?Element} | 
| */ | 
| - _linkifyStackTraceTopFrame: function(stackTrace) | 
| + _linkifyStackTraceTopFrame: function(linkifier, consoleMessage) | 
| { | 
| - var target = this._target(); | 
| + var target = consoleMessage.target(); | 
| if (!target) | 
| return null; | 
| - return this._linkifier.linkifyStackTraceTopFrame(target, stackTrace, "console-message-url"); | 
| + return this._linkifier.linkifyStackTraceTopFrame(target, /** @type {!RuntimeAgent.StackTrace} **/ (consoleMessage.stackTrace), "console-message-url"); | 
| }, | 
| /** | 
| - * @param {string} scriptId | 
| - * @param {string} url | 
| - * @param {number} lineNumber | 
| - * @param {number} columnNumber | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| + * @param {!WebInspector.ConsoleMessage} consoleMessage | 
| * @return {?Element} | 
| */ | 
| - _linkifyScriptId: function(scriptId, url, lineNumber, columnNumber) | 
| + _linkifyScriptId: function(linkifier, consoleMessage) | 
| { | 
| - var target = this._target(); | 
| + var target = consoleMessage.target(); | 
| if (!target) | 
| return null; | 
| - return this._linkifier.linkifyScriptLocation(target, scriptId, url, lineNumber, columnNumber, "console-message-url"); | 
| + return this._linkifier.linkifyScriptLocation(target, consoleMessage.scriptId, consoleMessage.url || "", consoleMessage.line, consoleMessage.column, "console-message-url"); | 
| }, | 
| /** | 
| @@ -406,10 +406,12 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| }, | 
| /** | 
| + * @param {!WebInspector.ConsoleMessage} consoleMessage | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| * @param {!Array.<!WebInspector.RemoteObject|string>} parameters | 
| * @return {!Element} | 
| */ | 
| - _format: function(parameters) | 
| + _format: function(consoleMessage, linkifier, parameters) | 
| { | 
| // This node is used like a Builder. Values are continually appended onto it. | 
| var formattedResult = createElement("span"); | 
| @@ -420,14 +422,14 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| // API allows passing arbitrary values as messages (strings, numbers, etc.). Wrap them here. | 
| // FIXME: Only pass runtime wrappers here. | 
| for (var i = 0; i < parameters.length; ++i) | 
| - parameters[i] = this._parameterToRemoteObject(parameters[i], this._target()); | 
| + parameters[i] = this._parameterToRemoteObject(parameters[i], consoleMessage.target()); | 
| // There can be string log and string eval result. We distinguish between them based on message type. | 
| - 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); | 
| + var shouldFormatMessage = WebInspector.RemoteObject.type((/** @type {!Array.<!WebInspector.RemoteObject>} **/ (parameters))[0]) === "string" && (consoleMessage.type !== WebInspector.ConsoleMessage.MessageType.Result || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.Error || consoleMessage.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError); | 
| // Multiple parameters with the first being a format string. Save unused substitutions. | 
| if (shouldFormatMessage) { | 
| - var result = this._formatWithSubstitutionString(/** @type {string} **/ (parameters[0].description), parameters.slice(1), formattedResult); | 
| + var result = this._formatWithSubstitutionString(consoleMessage, linkifier, /** @type {string} **/ (parameters[0].description), parameters.slice(1), formattedResult); | 
| parameters = result.unusedSubstitutions; | 
| if (parameters.length) | 
| formattedResult.createTextChild(" "); | 
| @@ -439,7 +441,7 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| if (shouldFormatMessage && parameters[i].type === "string") | 
| formattedResult.appendChild(WebInspector.linkifyStringAsFragment(parameters[i].description)); | 
| else | 
| - formattedResult.appendChild(this._formatParameter(parameters[i], false, true)); | 
| + formattedResult.appendChild(this._formatParameter(consoleMessage, linkifier, parameters[i], false, true)); | 
| if (i < parameters.length - 1) | 
| formattedResult.createTextChild(" "); | 
| } | 
| @@ -447,30 +449,31 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| }, | 
| /** | 
| + * @param {!WebInspector.ConsoleMessage} consoleMessage | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| * @param {!WebInspector.RemoteObject} output | 
| * @param {boolean=} forceObjectFormat | 
| * @param {boolean=} includePreview | 
| * @return {!Element} | 
| */ | 
| - _formatParameter: function(output, forceObjectFormat, includePreview) | 
| + _formatParameter: function(consoleMessage, linkifier, output, forceObjectFormat, includePreview) | 
| 
 
lushnikov
2016/10/12 20:58:23
let's pass consoleMessageType only
 
luoe
2016/10/13 20:44:20
Done.
 
 | 
| { | 
| if (output.customPreview()) | 
| return (new WebInspector.CustomPreviewComponent(output)).element; | 
| var type = forceObjectFormat ? "object" : (output.subtype || output.type); | 
| - var span = createElement("span"); | 
| - span.className = "object-value-" + type + " source-code"; | 
| + var element; | 
| switch (type) { | 
| case "array": | 
| case "typedarray": | 
| - this._formatParameterAsArray(output, span); | 
| + element = this._formatParameterAsArray(output, linkifier, consoleMessage.type); | 
| break; | 
| case "error": | 
| - this._formatParameterAsError(output, span); | 
| + element = this._formatParameterAsError(output, linkifier, consoleMessage.target()); | 
| 
 
lushnikov
2016/10/12 20:58:23
you can get target from remoteobject
 
luoe
2016/10/13 20:44:20
Done.
 
 | 
| break; | 
| case "function": | 
| case "generator": | 
| - this._formatParameterAsFunction(output, span, includePreview); | 
| + element = this._formatParameterAsFunction(output, includePreview); | 
| break; | 
| case "iterator": | 
| case "map": | 
| @@ -478,13 +481,13 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| case "promise": | 
| case "proxy": | 
| case "set": | 
| - this._formatParameterAsObject(output, span, includePreview); | 
| + element = this._formatParameterAsObject(output, linkifier, includePreview); | 
| break; | 
| case "node": | 
| - this._formatParameterAsNode(output, span); | 
| + element = this._formatParameterAsNode(output, linkifier); | 
| break; | 
| case "string": | 
| - this._formatParameterAsString(output, span); | 
| + element = this._formatParameterAsString(output); | 
| break; | 
| case "boolean": | 
| case "date": | 
| @@ -493,32 +496,50 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| case "regexp": | 
| case "symbol": | 
| case "undefined": | 
| - this._formatParameterAsValue(output, span); | 
| + element = this._formatParameterAsValue(output); | 
| break; | 
| default: | 
| - this._formatParameterAsValue(output, span); | 
| + element = this._formatParameterAsValue(output); | 
| console.error("Tried to format remote object of unknown type."); | 
| } | 
| - return span; | 
| + element.className = "object-value-" + type + " source-code"; | 
| + return element; | 
| }, | 
| /** | 
| * @param {!WebInspector.RemoteObject} obj | 
| - * @param {!Element} elem | 
| + * @return {!Element} | 
| */ | 
| - _formatParameterAsValue: function(obj, elem) | 
| + _formatParameterAsValue: function(obj) | 
| { | 
| - elem.createTextChild(obj.description || ""); | 
| + var element = createElement("span"); | 
| + element.createTextChild(obj.description || ""); | 
| if (obj.objectId) | 
| - elem.addEventListener("contextmenu", this._contextMenuEventFired.bind(this, obj), false); | 
| + element.addEventListener("contextmenu", this._contextMenuEventFired.bind(this, obj), false); | 
| + return element; | 
| }, | 
| /** | 
| * @param {!WebInspector.RemoteObject} obj | 
| - * @param {!Element} elem | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| * @param {boolean=} includePreview | 
| + * @return {!Element} | 
| */ | 
| - _formatParameterAsObject: function(obj, elem, includePreview) | 
| + _formatParameterAsObject: function(obj, linkifier, includePreview) | 
| + { | 
| + var element = createElement("span"); | 
| + var expandableObject = this._formatAsExpandableObject(obj, linkifier, includePreview); | 
| + element.appendChild(expandableObject); | 
| + return element; | 
| + }, | 
| + | 
| + /** | 
| + * @param {!WebInspector.RemoteObject} obj | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| + * @param {boolean=} includePreview | 
| + * @return {!Element} | 
| + */ | 
| + _formatAsExpandableObject: function(obj, linkifier, includePreview) | 
| { | 
| var titleElement = createElement("span"); | 
| if (includePreview && obj.preview) { | 
| @@ -531,20 +552,22 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| titleElement.createTextChild(obj.description || ""); | 
| } | 
| - var section = new WebInspector.ObjectPropertiesSection(obj, titleElement, this._linkifier); | 
| + var section = new WebInspector.ObjectPropertiesSection(obj, titleElement, linkifier); | 
| section.element.classList.add("console-view-object-properties-section"); | 
| section.enableContextMenu(); | 
| - elem.appendChild(section.element); | 
| + return section.element; | 
| }, | 
| /** | 
| * @param {!WebInspector.RemoteObject} func | 
| - * @param {!Element} element | 
| * @param {boolean=} includePreview | 
| + * @return {!Element} | 
| */ | 
| - _formatParameterAsFunction: function(func, element, includePreview) | 
| + _formatParameterAsFunction: function(func, includePreview) | 
| { | 
| + var element = createElement("span"); | 
| WebInspector.RemoteFunction.objectAsFunction(func).targetFunction().then(formatTargetFunction.bind(this)); | 
| + return element; | 
| /** | 
| * @param {!WebInspector.RemoteObject} targetFunction | 
| @@ -589,18 +612,22 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| /** | 
| * @param {!WebInspector.RemoteObject} object | 
| - * @param {!Element} elem | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| + * @return {!Element} | 
| */ | 
| - _formatParameterAsNode: function(object, elem) | 
| + _formatParameterAsNode: function(object, linkifier) | 
| { | 
| + var element = createElement("span"); | 
| WebInspector.Renderer.renderPromise(object).then(appendRenderer.bind(this), failedToRender.bind(this)); | 
| + return element; | 
| + | 
| /** | 
| * @param {!Element} rendererElement | 
| * @this {WebInspector.ConsoleViewMessage} | 
| */ | 
| function appendRenderer(rendererElement) | 
| { | 
| - elem.appendChild(rendererElement); | 
| + element.appendChild(rendererElement); | 
| this._formattedParameterAsNodeForTest(); | 
| } | 
| @@ -609,7 +636,8 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| */ | 
| function failedToRender() | 
| { | 
| - this._formatParameterAsObject(object, elem, false); | 
| + var expandableObject = this._formatAsExpandableObject(object, linkifier, false); | 
| + element.appendChild(expandableObject); | 
| } | 
| }, | 
| @@ -619,16 +647,19 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| /** | 
| * @param {!WebInspector.RemoteObject} array | 
| - * @param {!Element} elem | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| + * @param {string} messageType | 
| + * @return {!Element} | 
| */ | 
| - _formatParameterAsArray: function(array, elem) | 
| + _formatParameterAsArray: function(array, linkifier, messageType) | 
| { | 
| - var usePrintedArrayFormat = this._message.type !== WebInspector.ConsoleMessage.MessageType.DirXML && this._message.type !== WebInspector.ConsoleMessage.MessageType.Result; | 
| + var element = createElement("span"); | 
| + var usePrintedArrayFormat = messageType !== WebInspector.ConsoleMessage.MessageType.DirXML && messageType !== WebInspector.ConsoleMessage.MessageType.Result; | 
| var isLongArray = array.arrayLength() > 100; | 
| if (usePrintedArrayFormat || isLongArray) | 
| - this._formatParameterAsObject(array, elem, usePrintedArrayFormat || !isLongArray); | 
| - else | 
| - array.getAllProperties(false, printArrayResult.bind(this)); | 
| + return this._formatParameterAsObject(array, linkifier, usePrintedArrayFormat || !isLongArray); | 
| + array.getAllProperties(false, printArrayResult.bind(this)); | 
| + return element; | 
| /** | 
| * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties | 
| @@ -637,7 +668,8 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| function printArrayResult(properties) | 
| { | 
| if (!properties) { | 
| - this._formatParameterAsObject(array, elem, false); | 
| + var expandableObject = this._formatAsExpandableObject(array, linkifier, false); | 
| + element.appendChild(expandableObject); | 
| return; | 
| } | 
| @@ -667,8 +699,8 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| var length = array.arrayLength(); | 
| for (var i = 0; i < length; ++i) { | 
| - var element = elements[i]; | 
| - if (!element) | 
| + var entryElement = elements[i]; | 
| + if (!entryElement) | 
| continue; | 
| if (i - lastNonEmptyIndex > 1) { | 
| @@ -676,7 +708,7 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| titleElement.createTextChild(", "); | 
| } | 
| - titleElement.appendChild(element); | 
| + titleElement.appendChild(entryElement); | 
| lastNonEmptyIndex = i; | 
| if (i < length - 1) | 
| titleElement.createTextChild(", "); | 
| @@ -685,39 +717,44 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| titleElement.createTextChild("]"); | 
| - var section = new WebInspector.ObjectPropertiesSection(array, titleElement, this._linkifier); | 
| + var section = new WebInspector.ObjectPropertiesSection(array, titleElement, linkifier); | 
| section.element.classList.add("console-view-object-properties-section"); | 
| section.enableContextMenu(); | 
| - elem.appendChild(section.element); | 
| + element.appendChild(section.element); | 
| } | 
| }, | 
| /** | 
| * @param {!WebInspector.RemoteObject} output | 
| - * @param {!Element} elem | 
| + * @return {!Element} | 
| */ | 
| - _formatParameterAsString: function(output, elem) | 
| + _formatParameterAsString: function(output) | 
| { | 
| var span = createElement("span"); | 
| - span.className = "object-value-string source-code"; | 
| + span.className = "object-value-string-inner source-code"; | 
| span.appendChild(WebInspector.linkifyStringAsFragment(output.description || "")); | 
| // Make black quotes. | 
| - elem.classList.remove("object-value-string"); | 
| 
 
lushnikov
2016/10/12 20:58:23
let's address this separately by moving "object-va
 
luoe
2016/10/13 20:44:20
Done in patch set 6+7.  Changes can be seen by dif
 
 | 
| - elem.createTextChild("\""); | 
| - elem.appendChild(span); | 
| - elem.createTextChild("\""); | 
| + var element = createElement("span"); | 
| + element.createTextChild("\""); | 
| + element.appendChild(span); | 
| + element.createTextChild("\""); | 
| + return element; | 
| }, | 
| /** | 
| * @param {!WebInspector.RemoteObject} output | 
| - * @param {!Element} elem | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| + * @param {?WebInspector.Target} target | 
| + * @return {!Element} | 
| */ | 
| - _formatParameterAsError: function(output, elem) | 
| + _formatParameterAsError: function(output, linkifier, target) | 
| { | 
| - var span = elem.createChild("span", "object-value-error source-code"); | 
| - var errorSpan = this._tryFormatAsError(output.description || ""); | 
| + var element = createElement("span"); | 
| + var span = element.createChild("span", "object-value-error source-code"); | 
| 
 
lushnikov
2016/10/12 20:58:23
object-value-error is not used at all?
 
luoe
2016/10/13 20:44:20
Done.
 
 | 
| + var errorSpan = this._tryFormatAsError(target, linkifier, output.description || ""); | 
| span.appendChild(errorSpan ? errorSpan : WebInspector.linkifyStringAsFragment(output.description || "")); | 
| + return element; | 
| }, | 
| /** | 
| @@ -775,11 +812,13 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| }, | 
| /** | 
| + * @param {!WebInspector.ConsoleMessage} consoleMessage | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| * @param {string} format | 
| * @param {!Array.<!WebInspector.RemoteObject>} parameters | 
| * @param {!Element} formattedResult | 
| */ | 
| - _formatWithSubstitutionString: function(format, parameters, formattedResult) | 
| + _formatWithSubstitutionString: function(consoleMessage, linkifier, format, parameters, formattedResult) | 
| 
 
lushnikov
2016/10/12 20:58:23
you won't need console message here - just console
 
luoe
2016/10/13 20:44:20
Done.
 
 | 
| { | 
| var formatters = {}; | 
| @@ -791,7 +830,7 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| */ | 
| function parameterFormatter(force, obj) | 
| { | 
| - return this._formatParameter(obj, force, false); | 
| + return this._formatParameter(consoleMessage, linkifier, obj, force, false); | 
| } | 
| function stringFormatter(obj) | 
| @@ -974,7 +1013,7 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| else if (this._message.type === WebInspector.ConsoleMessage.MessageType.Table) | 
| formattedMessage = this._buildTableMessage(this._message); | 
| else | 
| - formattedMessage = this._buildMessage(consoleMessage); | 
| + formattedMessage = this._buildMessage(consoleMessage, this._linkifier); | 
| contentElement.appendChild(formattedMessage); | 
| this.updateTimestamp(WebInspector.moduleSetting("consoleTimestampsEnabled").get()); | 
| @@ -1138,10 +1177,12 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| }, | 
| /** | 
| + * @param {?WebInspector.Target} target | 
| + * @param {!WebInspector.Linkifier} linkifier | 
| * @param {string} string | 
| * @return {?Element} | 
| */ | 
| - _tryFormatAsError: function(string) | 
| + _tryFormatAsError: function(target, linkifier, string) | 
| { | 
| /** | 
| * @param {string} prefix | 
| @@ -1152,7 +1193,6 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| } | 
| var errorPrefixes = ["EvalError", "ReferenceError", "SyntaxError", "TypeError", "RangeError", "Error", "URIError"]; | 
| - var target = this._target(); | 
| if (!target || !errorPrefixes.some(startsWith)) | 
| return null; | 
| var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); | 
| @@ -1207,7 +1247,7 @@ WebInspector.ConsoleViewMessage.prototype = { | 
| var start = 0; | 
| for (var i = 0; i < links.length; ++i) { | 
| formattedResult.appendChild(WebInspector.linkifyStringAsFragment(string.substring(start, links[i].positionLeft))); | 
| - formattedResult.appendChild(this._linkifier.linkifyScriptLocation(target, null, links[i].url, links[i].lineNumber, links[i].columnNumber)); | 
| + formattedResult.appendChild(linkifier.linkifyScriptLocation(target, null, links[i].url, links[i].lineNumber, links[i].columnNumber)); | 
| start = links[i].positionRight; | 
| } |