| 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 ce85acf028ebbed2749e7eea311b453a671f1db6..34e7e2bb526118a3de02843835b68649c638a101 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js
|
| @@ -138,26 +138,11 @@ WebInspector.ConsoleViewMessage.prototype = {
|
| },
|
|
|
| /**
|
| + * @param {!WebInspector.ConsoleMessage} consoleMessage
|
| * @return {!Element}
|
| */
|
| - _formatMessage: function()
|
| + _buildMessage: function(consoleMessage)
|
| {
|
| - var formattedMessage = createElement("span");
|
| - 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 anchorElement;
|
| var messageElement;
|
| if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.ConsoleAPI) {
|
| switch (consoleMessage.type) {
|
| @@ -165,8 +150,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 +189,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);
|
| - }
|
| messageElement = this._format([consoleMessage.messageText]);
|
| }
|
| } else {
|
| @@ -216,6 +196,34 @@ WebInspector.ConsoleViewMessage.prototype = {
|
| messageElement = this._format(args);
|
| }
|
|
|
| + var formattedMessage = createElement("span");
|
| + WebInspector.appendStyle(formattedMessage, "components/objectValue.css");
|
| + formattedMessage.className = "console-message-text source-code";
|
| +
|
| + var anchorElement = this._buildMessageAnchor(consoleMessage);
|
| + if (anchorElement)
|
| + formattedMessage.appendChild(anchorElement);
|
| + formattedMessage.appendChild(messageElement);
|
| + return formattedMessage;
|
| +
|
| + /**
|
| + * @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}
|
| + */
|
| + _buildMessageAnchor: 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 +233,65 @@ 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.
|
| + // Append a space to prevent the anchor text from being glued to the console message when the user selects and copies the console messages.
|
| + if (anchorElement)
|
| anchorElement.appendChild(createTextNode(" "));
|
| - formattedMessage.insertBefore(anchorElement, formattedMessage.firstChild);
|
| - }
|
| -
|
| - 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);
|
| - }
|
| + return anchorElement;
|
| + },
|
|
|
| - /**
|
| - * @param {?Event} event
|
| - */
|
| - function toggleStackTrace(event)
|
| - {
|
| - if (event.target.hasSelection())
|
| - return;
|
| - expandStackTrace(stackTraceElement.classList.contains("hidden"));
|
| - event.consume();
|
| - }
|
| + /**
|
| + * @param {!WebInspector.ConsoleMessage} consoleMessage
|
| + * @param {!WebInspector.Target} target
|
| + * @param {!WebInspector.Linkifier} linkifier
|
| + * @return {!Element}
|
| + */
|
| + _buildMessageWithStackTrace: function(consoleMessage, target, linkifier)
|
| + {
|
| + 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 messageElement = this._buildMessage(consoleMessage);
|
| + var clickableElement = contentElement.createChild("div");
|
| + clickableElement.appendChild(messageElement);
|
| + var stackTraceElement = contentElement.createChild("div");
|
| + var stackTracePreview = WebInspector.DOMPresentationUtils.buildStackTracePreviewContents(target, linkifier, consoleMessage.stackTrace);
|
| + 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 (consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace)
|
| + expandStackTrace(true);
|
| +
|
| + toggleElement._expandStackTraceForTest = expandStackTrace.bind(null, true);
|
| + return toggleElement;
|
| },
|
|
|
| /**
|
| @@ -320,6 +335,26 @@ WebInspector.ConsoleViewMessage.prototype = {
|
| return this._linkifier.linkifyScriptLocation(target, scriptId, url, lineNumber, columnNumber, "console-message-url");
|
| },
|
|
|
| + /**
|
| + * @param {!WebInspector.RemoteObject|!Object|string} parameter
|
| + * @param {?WebInspector.Target} target
|
| + * @return {!WebInspector.RemoteObject}
|
| + */
|
| + _parameterToRemoteObject: function(parameter, target)
|
| + {
|
| + if (parameter instanceof WebInspector.RemoteObject)
|
| + return parameter;
|
| + if (!target)
|
| + return WebInspector.RemoteObject.fromLocalObject(parameter);
|
| + if (typeof parameter === "object")
|
| + return target.runtimeModel.createRemoteObject(parameter);
|
| + return target.runtimeModel.createRemoteObjectFromPrimitiveValue(parameter);
|
| + },
|
| +
|
| + /**
|
| + * @param {!Array.<!WebInspector.RemoteObject|string>} parameters
|
| + * @return {!Element}
|
| + */
|
| _format: function(parameters)
|
| {
|
| // This node is used like a Builder. Values are continually appended onto it.
|
| @@ -327,33 +362,18 @@ WebInspector.ConsoleViewMessage.prototype = {
|
| if (!parameters.length)
|
| return formattedResult;
|
|
|
| - var target = this._target();
|
| -
|
| // Formatting code below assumes that parameters are all wrappers whereas frontend console
|
| // API allows passing arbitrary values as messages (strings, numbers, etc.). Wrap them here.
|
| - for (var i = 0; i < parameters.length; ++i) {
|
| - // FIXME: Only pass runtime wrappers here.
|
| - if (parameters[i] instanceof WebInspector.RemoteObject)
|
| - continue;
|
| -
|
| - if (!target) {
|
| - parameters[i] = WebInspector.RemoteObject.fromLocalObject(parameters[i]);
|
| - continue;
|
| - }
|
| -
|
| - if (typeof parameters[i] === "object")
|
| - parameters[i] = target.runtimeModel.createRemoteObject(parameters[i]);
|
| - else
|
| - parameters[i] = target.runtimeModel.createRemoteObjectFromPrimitiveValue(parameters[i]);
|
| - }
|
| + // FIXME: Only pass runtime wrappers here.
|
| + for (var i = 0; i < parameters.length; ++i)
|
| + parameters[i] = this._parameterToRemoteObject(parameters[i], this._target());
|
|
|
| // 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(" ");
|
| @@ -755,7 +775,7 @@ WebInspector.ConsoleViewMessage.prototype = {
|
|
|
| /**
|
| * @param {string} format
|
| - * @param {!Array.<string>} parameters
|
| + * @param {!Array.<!WebInspector.RemoteObject>} parameters
|
| * @param {!Element} formattedResult
|
| */
|
| _formatWithSubstitutionString: function(format, parameters, formattedResult)
|
| @@ -941,14 +961,20 @@ WebInspector.ConsoleViewMessage.prototype = {
|
|
|
| var contentElement = createElementWithClass("div", "console-message");
|
| this._contentElement = contentElement;
|
| -
|
| if (this._message.type === WebInspector.ConsoleMessage.MessageType.StartGroup || this._message.type === WebInspector.ConsoleMessage.MessageType.StartGroupCollapsed)
|
| contentElement.classList.add("console-group-title");
|
|
|
| - contentElement.appendChild(this._formatMessage());
|
| + var formattedMessage;
|
| + var consoleMessage = this._message;
|
| + var target = consoleMessage.target();
|
| + var shouldIncludeTrace = !!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);
|
| + if (target && shouldIncludeTrace)
|
| + formattedMessage = this._buildMessageWithStackTrace(consoleMessage, target, this._linkifier);
|
| + else
|
| + formattedMessage = this._buildMessage(consoleMessage);
|
| + contentElement.appendChild(formattedMessage);
|
|
|
| this.updateTimestamp(WebInspector.moduleSetting("consoleTimestampsEnabled").get());
|
| -
|
| return this._contentElement;
|
| },
|
|
|
|
|