Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1340)

Unified Diff: Source/devtools/front_end/console/ConsoleViewMessage.js

Issue 674513002: DevTools: linkify relative links in console.log(new Error().stack) (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..6b1f529d02a6d9c8b8e427e8bf3717facefb5dca 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) {
@@ -1272,6 +1275,74 @@ WebInspector.ConsoleViewMessage.prototype = {
{
return this._message.messageText;
},
+
+ /**
+ * @param {string} string
+ * @return {?Element}
+ */
+ _tryFormatAsError: function(string)
+ {
+ if (!string.startsWith("Error"))
aandrey 2014/10/23 17:51:30 what about ReferenceError? RangeError, SyntaxError
sergeyv 2014/10/27 08:30:59 Done.
+ return null;
+
+ var lines = string.split("\n");
+ var links = [];
+ var position = 0;
+ var beforeStack = true;
+ for (var i = 0; i < lines.length; ++i) {
+ position += i > 0 ? lines[i - 1].length + 1 : 0;
+ var hasAt = lines[i].trim().startsWith("at ");
aandrey 2014/10/23 17:51:30 var isCallFrameLine = /^\s*at\s/.test(lines[i]);
sergeyv 2014/10/27 08:30:59 Done.
+ if (!hasAt && !beforeStack)
aandrey 2014/10/23 17:51:30 beforeStack -> links.length
sergeyv 2014/10/27 08:31:00 Done.
+ return null;
+
+ if (!hasAt)
+ continue;
+
+ beforeStack = false;
+
+ 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 linkPretender = lines[i].substring(left, right);
+ var splitResult = WebInspector.ParsedURL.splitLineAndColumn(linkPretender);
+ if (!splitResult)
+ return null;
+
+ var parsed = splitResult.url.asParsedURL();
+ if (!parsed) {
+ var completeURL = WebInspector.ParsedURL.completeURL(WebInspector.targetManager.inspectedPageURL(), 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});
aandrey 2014/10/23 17:51:30 too complex...
sergeyv 2014/10/27 08:31:00 Acknowledged.
+ }
+
+ if (beforeStack)
+ 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;
+ }
}
/**

Powered by Google App Engine
This is Rietveld 408576698