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

Side by Side Diff: Source/devtools/front_end/console/ConsoleViewMessage.js

Issue 448743002: DevTools: Linkify console stacks with blackboxing consideration. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 4 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 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 } 189 }
190 this._messageElement = this._format([consoleMessage.messageT ext]); 190 this._messageElement = this._format([consoleMessage.messageT ext]);
191 } 191 }
192 } else { 192 } else {
193 var args = consoleMessage.parameters || [consoleMessage.messageT ext]; 193 var args = consoleMessage.parameters || [consoleMessage.messageT ext];
194 this._messageElement = this._format(args); 194 this._messageElement = this._format(args);
195 } 195 }
196 } 196 }
197 197
198 if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource. Network || consoleMessage.request) { 198 if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource. Network || consoleMessage.request) {
199 var callFrame = this._callFrameAnchorFromStackTrace(consoleMessage.s tackTrace); 199 console.assert(this._linkifier);
200 if (callFrame) 200 if (this._linkifier)
201 this._anchorElement = this._linkifyCallFrame(callFrame); 201 this._anchorElement = this._linkifier.linkifyTopUnblackboxedCons oleCallFrame(this._target(), consoleMessage.stackTrace, "console-message-url", t rue);
vsevik 2014/08/07 09:11:58 I don't think we should update the console message
aandrey 2014/08/07 10:24:59 I'm not sure I follow you here. Anyway, I did't ch
202 else if (consoleMessage.url && consoleMessage.url !== "undefined") 202 if (!this._anchorElement && consoleMessage.url && consoleMessage.url !== "undefined")
203 this._anchorElement = this._linkifyLocation(consoleMessage.url, consoleMessage.line, consoleMessage.column); 203 this._anchorElement = this._linkifyLocation(consoleMessage.url, consoleMessage.line, consoleMessage.column);
204 } 204 }
205 205
206 this._formattedMessage.appendChild(this._messageElement); 206 this._formattedMessage.appendChild(this._messageElement);
207 if (this._anchorElement) { 207 if (this._anchorElement) {
208 this._formattedMessage.appendChild(document.createTextNode(" ")); 208 this._formattedMessage.appendChild(document.createTextNode(" "));
209 this._formattedMessage.appendChild(this._anchorElement); 209 this._formattedMessage.appendChild(this._anchorElement);
210 } 210 }
211 211
212 var dumpStackTrace = !!consoleMessage.stackTrace && consoleMessage.stack Trace.length && (consoleMessage.source === WebInspector.ConsoleMessage.MessageSo urce.Network || consoleMessage.level === WebInspector.ConsoleMessage.MessageLeve l.Error || consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace ); 212 var dumpStackTrace = !!consoleMessage.stackTrace && consoleMessage.stack Trace.length && (consoleMessage.source === WebInspector.ConsoleMessage.MessageSo urce.Network || consoleMessage.level === WebInspector.ConsoleMessage.MessageLeve l.Error || consoleMessage.type === WebInspector.ConsoleMessage.MessageType.Trace );
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 /** 248 /**
249 * @param {string} url 249 * @param {string} url
250 * @param {number} lineNumber 250 * @param {number} lineNumber
251 * @param {number} columnNumber 251 * @param {number} columnNumber
252 * @return {?Element} 252 * @return {?Element}
253 */ 253 */
254 _linkifyLocation: function(url, lineNumber, columnNumber) 254 _linkifyLocation: function(url, lineNumber, columnNumber)
255 { 255 {
256 console.assert(this._linkifier); 256 console.assert(this._linkifier);
257 var target = this._target(); 257 var target = this._target();
258 if (!this._linkifier || !target) 258 if (!this._linkifier)
259 return null; 259 return null;
260 // FIXME(62725): stack trace line/column numbers are one-based. 260 // FIXME(62725): stack trace line/column numbers are one-based.
261 lineNumber = lineNumber ? lineNumber - 1 : 0; 261 lineNumber = lineNumber ? lineNumber - 1 : 0;
262 columnNumber = columnNumber ? columnNumber - 1 : 0; 262 columnNumber = columnNumber ? columnNumber - 1 : 0;
263 if (this._message.source === WebInspector.ConsoleMessage.MessageSource.C SS) { 263 if (this._message.source === WebInspector.ConsoleMessage.MessageSource.C SS) {
264 if (!target)
265 return null;
264 var headerIds = target.cssModel.styleSheetIdsForURL(url); 266 var headerIds = target.cssModel.styleSheetIdsForURL(url);
265 var cssLocation = new WebInspector.CSSLocation(target, headerIds[0] || null, url, lineNumber, columnNumber); 267 var cssLocation = new WebInspector.CSSLocation(target, headerIds[0] || null, url, lineNumber, columnNumber);
266 return this._linkifier.linkifyCSSLocation(cssLocation, "console-mess age-url"); 268 return this._linkifier.linkifyCSSLocation(cssLocation, "console-mess age-url");
267 } 269 }
268 270
269 return this._linkifier.linkifyScriptLocation(target, null, url, lineNumb er, columnNumber, "console-message-url"); 271 return this._linkifier.linkifyScriptLocation(target, null, url, lineNumb er, columnNumber, "console-message-url");
270 }, 272 },
271 273
272 /** 274 /**
273 * @param {!ConsoleAgent.CallFrame} callFrame
274 * @return {?Element}
275 */
276 _linkifyCallFrame: function(callFrame)
277 {
278 console.assert(this._linkifier);
279 var target = this._target();
280 if (!this._linkifier)
281 return null;
282
283 return this._linkifier.linkifyConsoleCallFrame(target, callFrame, "conso le-message-url");
284 },
285
286 /**
287 * @param {?Array.<!ConsoleAgent.CallFrame>} stackTrace
288 * @return {?ConsoleAgent.CallFrame}
289 */
290 _callFrameAnchorFromStackTrace: function(stackTrace)
291 {
292 if (!stackTrace || !stackTrace.length)
293 return null;
294 var callFrame = stackTrace[0].scriptId ? stackTrace[0] : null;
295 if (!WebInspector.experimentsSettings.frameworksDebuggingSupport.isEnabl ed())
296 return callFrame;
297 var regex = WebInspector.settings.skipStackFramesPattern.asRegExp();
298 if (!regex)
299 return callFrame;
300 for (var i = 0; i < stackTrace.length; ++i) {
301 var script = this._target().debuggerModel.scriptForId(stackTrace[i]. scriptId);
302 if (!script || !regex.test(script.sourceURL))
303 return stackTrace[i].scriptId ? stackTrace[i] : null;
304 }
305 return callFrame;
306 },
307
308 /**
309 * @return {boolean} 275 * @return {boolean}
310 */ 276 */
311 isErrorOrWarning: function() 277 isErrorOrWarning: function()
312 { 278 {
313 return (this._message.level === WebInspector.ConsoleMessage.MessageLevel .Warning || this._message.level === WebInspector.ConsoleMessage.MessageLevel.Err or); 279 return (this._message.level === WebInspector.ConsoleMessage.MessageLevel .Warning || this._message.level === WebInspector.ConsoleMessage.MessageLevel.Err or);
314 }, 280 },
315 281
316 _format: function(parameters) 282 _format: function(parameters)
317 { 283 {
318 // This node is used like a Builder. Values are continually appended ont o it. 284 // This node is used like a Builder. Values are continually appended ont o it.
(...skipping 736 matching lines...) Expand 10 before | Expand all | Expand 10 after
1055 if (!stackTrace) 1021 if (!stackTrace)
1056 return; 1022 return;
1057 1023
1058 for (var i = 0; i < stackTrace.length; i++) { 1024 for (var i = 0; i < stackTrace.length; i++) {
1059 var frame = stackTrace[i]; 1025 var frame = stackTrace[i];
1060 1026
1061 var content = document.createElementWithClass("div", "stacktrace -entry"); 1027 var content = document.createElementWithClass("div", "stacktrace -entry");
1062 var functionName = frame.functionName || WebInspector.UIString(" (anonymous function)"); 1028 var functionName = frame.functionName || WebInspector.UIString(" (anonymous function)");
1063 content.createChild("span", "console-message-text source-code"). textContent = functionName; 1029 content.createChild("span", "console-message-text source-code"). textContent = functionName;
1064 1030
1065 if (frame.scriptId) { 1031 if (frame.scriptId && this._linkifier) {
1066 content.createTextChild(" "); 1032 content.createTextChild(" ");
1067 var urlElement = this._linkifyCallFrame(frame); 1033 content.appendChild(this._linkifier.linkifyConsoleCallFrame( this._target(), frame, "console-message-url"));
1068 if (!urlElement)
1069 continue;
1070 content.appendChild(urlElement);
1071 } 1034 }
1072 1035
1073 parentTreeElement.appendChild(new TreeElement(content)); 1036 parentTreeElement.appendChild(new TreeElement(content));
1074 } 1037 }
1075 } 1038 }
1076 1039
1077 appendStackTrace.call(this, this._message.stackTrace); 1040 appendStackTrace.call(this, this._message.stackTrace);
1078 1041
1079 for (var asyncTrace = this._message.asyncStackTrace; asyncTrace; asyncTr ace = asyncTrace.asyncStackTrace) { 1042 for (var asyncTrace = this._message.asyncStackTrace; asyncTrace; asyncTr ace = asyncTrace.asyncStackTrace) {
1080 if (!asyncTrace.callFrames || !asyncTrace.callFrames.length) 1043 if (!asyncTrace.callFrames || !asyncTrace.callFrames.length)
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
1258 { 1221 {
1259 if (!this._wrapperElement) { 1222 if (!this._wrapperElement) {
1260 WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this ); 1223 WebInspector.ConsoleViewMessage.prototype.toMessageElement.call(this );
1261 this._wrapperElement.classList.toggle("collapsed", this._collapsed); 1224 this._wrapperElement.classList.toggle("collapsed", this._collapsed);
1262 } 1225 }
1263 return this._wrapperElement; 1226 return this._wrapperElement;
1264 }, 1227 },
1265 1228
1266 __proto__: WebInspector.ConsoleViewMessage.prototype 1229 __proto__: WebInspector.ConsoleViewMessage.prototype
1267 } 1230 }
OLDNEW
« no previous file with comments | « no previous file | Source/devtools/front_end/inspectorSyntaxHighlight.css » ('j') | Source/devtools/front_end/sdk/Linkifier.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698