| Index: Source/devtools/front_end/console/ConsoleViewMessage.js
|
| diff --git a/Source/devtools/front_end/console/ConsoleViewMessage.js b/Source/devtools/front_end/console/ConsoleViewMessage.js
|
| index 2d88c73e68ef891d651f7e396b49ff3327815f3f..4617e192ce59a5ebf434952bd9b4a93bf656bd48 100644
|
| --- a/Source/devtools/front_end/console/ConsoleViewMessage.js
|
| +++ b/Source/devtools/front_end/console/ConsoleViewMessage.js
|
| @@ -166,8 +166,11 @@ WebInspector.ConsoleViewMessage.prototype = {
|
| this._messageElement = this._format([consoleMessage.messageText]);
|
| break;
|
| default:
|
| + if (consoleMessage.parameters && consoleMessage.parameters.length === 1 && consoleMessage.parameters[0].type === "string")
|
| + this._messageElement = this._tryFormatAsError(/**@type {string} */(consoleMessage.parameters[0].value));
|
| +
|
| var args = consoleMessage.parameters || [consoleMessage.messageText];
|
| - this._messageElement = this._format(args);
|
| + this._messageElement = this._messageElement || this._format(args);
|
| }
|
| } else if (consoleMessage.source === WebInspector.ConsoleMessage.MessageSource.Network) {
|
| if (consoleMessage.request) {
|
| @@ -282,9 +285,6 @@ WebInspector.ConsoleViewMessage.prototype = {
|
| _linkifyCallFrame: function(callFrame)
|
| {
|
| var target = this._target();
|
| - if (!this._linkifier)
|
| - return null;
|
| -
|
| return this._linkifier.linkifyConsoleCallFrame(target, callFrame, "console-message-url");
|
| },
|
|
|
| @@ -1272,6 +1272,73 @@ WebInspector.ConsoleViewMessage.prototype = {
|
| {
|
| return this._message.messageText;
|
| },
|
| +
|
| + /**
|
| + * @param {string} string
|
| + * @return {?Element}
|
| + */
|
| + _tryFormatAsError: function(string)
|
| + {
|
| + var errorPrefixes = ["EvalError", "ReferenceError", "SyntaxError", "TypeError", "RangeError", "Error", "URIError"];
|
| + if (!errorPrefixes.some(String.prototype.startsWith.bind(new String(string))))
|
| + return null;
|
| +
|
| + var lines = string.split("\n");
|
| + var links = [];
|
| + var position = 0;
|
| + for (var i = 0; i < lines.length; ++i) {
|
| + position += i > 0 ? lines[i - 1].length + 1 : 0;
|
| + var isCallFrameLine = /^\s*at\s/.test(lines[i]);
|
| + if (!isCallFrameLine && links.length)
|
| + return null;
|
| +
|
| + if (!isCallFrameLine)
|
| + continue;
|
| +
|
| + var openBracketIndex = lines[i].indexOf("(");
|
| + var closeBracketIndex = lines[i].indexOf(")");
|
| + var hasOpenBracket = openBracketIndex !== -1;
|
| + var hasCloseBracket = closeBracketIndex !== -1;
|
| +
|
| + if ((openBracketIndex > closeBracketIndex) || (hasOpenBracket ^ hasCloseBracket))
|
| + return null;
|
| +
|
| + var left = hasOpenBracket ? openBracketIndex + 1 : lines[i].indexOf("at") + 3;
|
| + var right = hasOpenBracket ? closeBracketIndex : lines[i].length;
|
| + var linkCandidate = lines[i].substring(left, right);
|
| + var splitResult = WebInspector.ParsedURL.splitLineAndColumn(linkCandidate);
|
| + if (!splitResult)
|
| + return null;
|
| +
|
| + var parsed = splitResult.url.asParsedURL();
|
| + if (!parsed) {
|
| + var baseUrl = this._target() ? this._target().url() : WebInspector.targetManager.inspectedPageURL();
|
| + var completeURL = WebInspector.ParsedURL.completeURL(baseUrl, splitResult.url);
|
| + parsed = completeURL ? completeURL.asParsedURL() : null;
|
| + }
|
| +
|
| + if (!parsed)
|
| + return null;
|
| +
|
| + links.push({url: parsed.url, positionLeft: position + left, positionRight: position + right, lineNumber: splitResult.lineNumber, columnNumber: splitResult.columnNumber});
|
| + }
|
| +
|
| + if (!links.length)
|
| + return null;
|
| +
|
| + var formattedResult = createElement("span");
|
| + var start = 0;
|
| + for (var i = 0; i < links.length; ++i) {
|
| + formattedResult.appendChild(this._linkifier.linkifyStringAsFragment(this._target(), string.substring(start, links[i].positionLeft)));
|
| + formattedResult.appendChild(this._linkifier.linkifyScriptLocation(this._target(), null, links[i].url, links[i].lineNumber, links[i].columnNumber));
|
| + start = links[i].positionRight;
|
| + }
|
| +
|
| + if (start != string.length)
|
| + formattedResult.appendChild(this._linkifier.linkifyStringAsFragment(this._target(), string.substring(start)));
|
| +
|
| + return formattedResult;
|
| + }
|
| }
|
|
|
| /**
|
|
|