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

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
« no previous file with comments | « Source/devtools/front_end/common/ParsedURL.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 bc3a72d12b0d7065fe7b8c8190a76e4ea757d672..1f6a5734cc70de720cf0eb6dfed8a1931541f06a 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) {
@@ -1264,6 +1267,69 @@ WebInspector.ConsoleViewMessage.prototype = {
{
return this._message.messageText;
},
+
+ /**
+ * @param {string} string
+ * @return {?Element}
+ */
+ _tryFormatAsError: function(string)
+ {
+ if (!string.startsWith("Error"))
+ return null;
+
+ var lines = string.split("\n");
+ var beforeAts = true;
+ //check format
+ for (var i = 0; i < lines.length; ++i) {
vsevik 2014/10/23 08:40:57 var i = 0; for (; i < lines.length && !lines[i].tr
+ var atLine = lines[i].trim().startsWith("at");
+ if (beforeAts && atLine) {
+ beforeAts = false;
+ continue;
+ }
+ if (!beforeAts && !atLine)
+ return null;
+ }
+
+ if (beforeAts)
+ return null;
+
+ var formattedResult = createElement("span");
+ for (var i = 0; i < lines.length; ++i) {
vsevik 2014/10/23 08:40:57 for (var i = 0; i < firstAtLineIndex; ++i) { ...
+ var atLine = lines[i].trim().startsWith("at ");
+ if (!atLine)
+ formattedResult.appendChild(this._linkifier.linkifyStringAsFragment(this._target(), lines[i] + "\n"));
+ else {
+ var openBracket = lines[i].indexOf("(");
+ var closeBracket = lines[i].indexOf(")");
+ var left = openBracket === -1 ? lines[i].indexOf("at") + 3 : openBracket + 1;
+ var right = closeBracket === -1? lines[i].length : closeBracket;
+ formattedResult.appendChild(createTextNode(lines[i].substring(0, left)));
+ var toAppend = this._parseLink(lines[i].substring(left, right));
vsevik 2014/10/23 08:40:57 We need to check that this line matches some very
+ formattedResult.appendChild(toAppend);
+ formattedResult.appendChild(createTextNode(lines[i].substring(right, lines[i].length) + "\n"))
+ }
+
+ }
+ return formattedResult;
+ },
+
+ /**
+ * @param {string} link
+ * @return {!Node}
+ */
+ _parseLink: function(link)
+ {
+ var splitResult = WebInspector.ParsedURL.splitLineAndColumn(link);
+ if (!splitResult) {
vsevik 2014/10/23 10:47:27 extra {
+ return this._linkifier.linkifyStringAsFragment(this._target(), link);
+ }
+
+ var parsed = splitResult.url.asParsedURL();
+ if (!parsed)
+ parsed = new WebInspector.ParsedURL(WebInspector.targetManager.inspectedPageURL() + splitResult.url);
+
+ return parsed.isValid ? this._linkifier.linkifyScriptLocation(this._target(), null, splitResult.url, splitResult.lineNumber, splitResult.columnNumber) : createTextNode(link);
vsevik 2014/10/23 10:47:27 Shouldn't we use parsed here?
+ }
}
/**
« no previous file with comments | « Source/devtools/front_end/common/ParsedURL.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698