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

Side by Side 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: Address aandrey comments 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 3 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
4 * Copyright (C) 2009 Joseph Pecoraro 4 * Copyright (C) 2009 Joseph Pecoraro
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 case WebInspector.ConsoleMessage.MessageType.Dir: 159 case WebInspector.ConsoleMessage.MessageType.Dir:
160 var obj = consoleMessage.parameters ? consoleMessage.par ameters[0] : undefined; 160 var obj = consoleMessage.parameters ? consoleMessage.par ameters[0] : undefined;
161 var args = ["%O", obj]; 161 var args = ["%O", obj];
162 this._messageElement = this._format(args); 162 this._messageElement = this._format(args);
163 break; 163 break;
164 case WebInspector.ConsoleMessage.MessageType.Profile: 164 case WebInspector.ConsoleMessage.MessageType.Profile:
165 case WebInspector.ConsoleMessage.MessageType.ProfileEnd: 165 case WebInspector.ConsoleMessage.MessageType.ProfileEnd:
166 this._messageElement = this._format([consoleMessage.mess ageText]); 166 this._messageElement = this._format([consoleMessage.mess ageText]);
167 break; 167 break;
168 default: 168 default:
169 if (consoleMessage.parameters && consoleMessage.paramete rs.length === 1 && consoleMessage.parameters[0].type === "string")
170 this._messageElement = this._tryFormatAsError(/**@t ype {string} */(consoleMessage.parameters[0].value));
171
169 var args = consoleMessage.parameters || [consoleMessage. messageText]; 172 var args = consoleMessage.parameters || [consoleMessage. messageText];
170 this._messageElement = this._format(args); 173 this._messageElement = this._messageElement || this._for mat(args);
171 } 174 }
172 } else if (consoleMessage.source === WebInspector.ConsoleMessage.Mes sageSource.Network) { 175 } else if (consoleMessage.source === WebInspector.ConsoleMessage.Mes sageSource.Network) {
173 if (consoleMessage.request) { 176 if (consoleMessage.request) {
174 this._messageElement = createElement("span"); 177 this._messageElement = createElement("span");
175 if (consoleMessage.level === WebInspector.ConsoleMessage.Mes sageLevel.Error) { 178 if (consoleMessage.level === WebInspector.ConsoleMessage.Mes sageLevel.Error) {
176 this._messageElement.createTextChildren(consoleMessage.r equest.requestMethod, " "); 179 this._messageElement.createTextChildren(consoleMessage.r equest.requestMethod, " ");
177 this._messageElement.appendChild(WebInspector.Linkifier. linkifyUsingRevealer(consoleMessage.request, consoleMessage.request.url, console Message.request.url)); 180 this._messageElement.appendChild(WebInspector.Linkifier. linkifyUsingRevealer(consoleMessage.request, consoleMessage.request.url, console Message.request.url));
178 if (consoleMessage.request.failed) 181 if (consoleMessage.request.failed)
179 this._messageElement.createTextChildren(" ", console Message.request.localizedFailDescription); 182 this._messageElement.createTextChildren(" ", console Message.request.localizedFailDescription);
180 else 183 else
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 return this._linkifier.linkifyScriptLocation(target, null, url, lineNumb er, columnNumber, "console-message-url"); 278 return this._linkifier.linkifyScriptLocation(target, null, url, lineNumb er, columnNumber, "console-message-url");
276 }, 279 },
277 280
278 /** 281 /**
279 * @param {!ConsoleAgent.CallFrame} callFrame 282 * @param {!ConsoleAgent.CallFrame} callFrame
280 * @return {?Element} 283 * @return {?Element}
281 */ 284 */
282 _linkifyCallFrame: function(callFrame) 285 _linkifyCallFrame: function(callFrame)
283 { 286 {
284 var target = this._target(); 287 var target = this._target();
285 if (!this._linkifier)
286 return null;
287
288 return this._linkifier.linkifyConsoleCallFrame(target, callFrame, "conso le-message-url"); 288 return this._linkifier.linkifyConsoleCallFrame(target, callFrame, "conso le-message-url");
289 }, 289 },
290 290
291 /** 291 /**
292 * @param {string} scriptId 292 * @param {string} scriptId
293 * @param {string} url 293 * @param {string} url
294 * @param {number} lineNumber 294 * @param {number} lineNumber
295 * @param {number} columnNumber 295 * @param {number} columnNumber
296 * @return {?Element} 296 * @return {?Element}
297 */ 297 */
(...skipping 967 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 break; 1265 break;
1266 } 1266 }
1267 1267
1268 return sourceString + " " + typeString + " " + levelString + ": " + this .formattedMessage().textContent + "\n" + this._message.url + " line " + this._me ssage.line; 1268 return sourceString + " " + typeString + " " + levelString + ": " + this .formattedMessage().textContent + "\n" + this._message.url + " line " + this._me ssage.line;
1269 }, 1269 },
1270 1270
1271 get text() 1271 get text()
1272 { 1272 {
1273 return this._message.messageText; 1273 return this._message.messageText;
1274 }, 1274 },
1275
1276 /**
1277 * @param {string} string
1278 * @return {?Element}
1279 */
1280 _tryFormatAsError: function(string)
1281 {
1282 var errorPrefixes = ["EvalError", "ReferenceError", "SyntaxError", "Type Error", "RangeError", "Error", "URIError"];
1283 if (!errorPrefixes.some(String.prototype.startsWith.bind(new String(stri ng))))
1284 return null;
1285
1286 var lines = string.split("\n");
1287 var links = [];
1288 var position = 0;
1289 for (var i = 0; i < lines.length; ++i) {
1290 position += i > 0 ? lines[i - 1].length + 1 : 0;
1291 var hasAt = /^\s*at\s/.test(lines[i]);
vsevik 2014/10/27 09:04:56 s/hasAt/isCallFrameLine/
sergeyv 2014/10/30 14:38:39 Done.
1292 if (!hasAt && links.length)
1293 return null;
1294
1295 if (!hasAt)
1296 continue;
1297
1298 var openBracketIndex = lines[i].indexOf("(");
1299 var closeBracketIndex = lines[i].indexOf(")");
1300 var hasOpenBracket = openBracketIndex !== -1;
1301 var hasCloseBracket = closeBracketIndex !== -1;
1302
1303 if ((openBracketIndex > closeBracketIndex) || (hasOpenBracket ^ has CloseBracket))
1304 return null;
1305
1306 var left = hasOpenBracket ? openBracketIndex + 1 : lines[i].indexOf( "at") + 3;
1307 var right = hasOpenBracket ? closeBracketIndex : lines[i].length;
1308 var linkPretender = lines[i].substring(left, right);
vsevik 2014/10/27 09:04:55 linkCandidate
sergeyv 2014/10/30 14:38:39 Done.
1309 var splitResult = WebInspector.ParsedURL.splitLineAndColumn(linkPret ender);
1310 if (!splitResult)
1311 return null;
1312
1313 var parsed = splitResult.url.asParsedURL();
1314 if (!parsed) {
1315 var completeURL = WebInspector.ParsedURL.completeURL(WebInspecto r.targetManager.inspectedPageURL(), splitResult.url);
vsevik 2014/10/27 09:04:55 This could be incorrect in case of worker. Is ther
sergeyv 2014/10/30 14:38:39 Done.
1316 parsed = completeURL ? completeURL.asParsedURL() : null;
1317 }
1318
1319 if (!parsed)
1320 return null;
1321
1322 links.push({url: parsed.url, positionLeft: position + left, position Right: position + right, lineNumber: splitResult.lineNumber, columnNumber: split Result.columnNumber});
1323 }
1324
1325 if (!links.length)
1326 return null;
1327
1328 var formattedResult = createElement("span");
1329 var start = 0;
1330 for (var i = 0; i < links.length; ++i) {
1331 formattedResult.appendChild(this._linkifier.linkifyStringAsFragment( this._target(), string.substring(start, links[i].positionLeft)));
1332 formattedResult.appendChild(this._linkifier.linkifyScriptLocation(th is._target(), null, links[i].url, links[i].lineNumber, links[i].columnNumber));
1333 start = links[i].positionRight;
1334 }
1335
1336 if (start != string.length)
1337 formattedResult.appendChild(this._linkifier.linkifyStringAsFragment( this._target(), string.substring(start)));
1338
1339 return formattedResult;
1340 }
1275 } 1341 }
1276 1342
1277 /** 1343 /**
1278 * @constructor 1344 * @constructor
1279 * @extends {WebInspector.ConsoleViewMessage} 1345 * @extends {WebInspector.ConsoleViewMessage}
1280 * @param {!WebInspector.ConsoleMessage} consoleMessage 1346 * @param {!WebInspector.ConsoleMessage} consoleMessage
1281 * @param {!WebInspector.Linkifier} linkifier 1347 * @param {!WebInspector.Linkifier} linkifier
1282 * @param {number} nestingLevel 1348 * @param {number} nestingLevel
1283 */ 1349 */
1284 WebInspector.ConsoleGroupViewMessage = function(consoleMessage, linkifier, nesti ngLevel) 1350 WebInspector.ConsoleGroupViewMessage = function(consoleMessage, linkifier, nesti ngLevel)
(...skipping 29 matching lines...) Expand all
1314 { 1380 {
1315 if (!this._wrapperElement) { 1381 if (!this._wrapperElement) {
1316 WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this ); 1382 WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this );
1317 this._wrapperElement.classList.toggle("collapsed", this._collapsed); 1383 this._wrapperElement.classList.toggle("collapsed", this._collapsed);
1318 } 1384 }
1319 return this._wrapperElement; 1385 return this._wrapperElement;
1320 }, 1386 },
1321 1387
1322 __proto__: WebInspector.ConsoleViewMessage.prototype 1388 __proto__: WebInspector.ConsoleViewMessage.prototype
1323 } 1389 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698