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

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

Issue 211493002: DevTools: Show user code location for wrapped console.log() calls. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 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
« no previous file with comments | « LayoutTests/inspector/console/resources/framework.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 12 matching lines...) Expand all
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 /** 31 /**
32 * @constructor 32 * @constructor
33 * 33 * @param {!WebInspector.Target} target
34 * @param {!WebInspector.ConsoleMessage} consoleMessage 34 * @param {!WebInspector.ConsoleMessage} consoleMessage
35 * @param {?WebInspector.Linkifier} linkifier 35 * @param {?WebInspector.Linkifier} linkifier
36 */ 36 */
37 WebInspector.ConsoleViewMessage = function(target, consoleMessage, linkifier) 37 WebInspector.ConsoleViewMessage = function(target, consoleMessage, linkifier)
38 { 38 {
39 this._message = consoleMessage; 39 this._message = consoleMessage;
40 this._linkifier = linkifier; 40 this._linkifier = linkifier;
41 this._target = target; 41 this._target = target;
42 42
43 /** @type {!Array.<!WebInspector.DataGrid>} */ 43 /** @type {!Array.<!WebInspector.DataGrid>} */
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 } 153 }
154 this._messageElement = this._format([consoleMessage.messageT ext]); 154 this._messageElement = this._format([consoleMessage.messageT ext]);
155 } 155 }
156 } else { 156 } else {
157 var args = consoleMessage.parameters || [consoleMessage.messageT ext]; 157 var args = consoleMessage.parameters || [consoleMessage.messageT ext];
158 this._messageElement = this._format(args); 158 this._messageElement = this._format(args);
159 } 159 }
160 } 160 }
161 161
162 if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource. Network || consoleMessage.request) { 162 if (consoleMessage.source !== WebInspector.ConsoleMessage.MessageSource. Network || consoleMessage.request) {
163 if (consoleMessage.stackTrace && consoleMessage.stackTrace.length && consoleMessage.stackTrace[0].scriptId) { 163 var callFrame = this._callFrameAnchorFromStackTrace(consoleMessage.s tackTrace);
164 this._anchorElement = this._linkifyCallFrame(consoleMessage.stac kTrace[0]); 164 if (callFrame)
165 } else if (consoleMessage.url && consoleMessage.url !== "undefined") { 165 this._anchorElement = this._linkifyCallFrame(callFrame);
166 else if (consoleMessage.url && consoleMessage.url !== "undefined")
166 this._anchorElement = this._linkifyLocation(consoleMessage.url, consoleMessage.line, consoleMessage.column); 167 this._anchorElement = this._linkifyLocation(consoleMessage.url, consoleMessage.line, consoleMessage.column);
167 }
168 } 168 }
169 169
170 this._formattedMessage.appendChild(this._messageElement); 170 this._formattedMessage.appendChild(this._messageElement);
171 if (this._anchorElement) { 171 if (this._anchorElement) {
172 this._formattedMessage.appendChild(document.createTextNode(" ")); 172 this._formattedMessage.appendChild(document.createTextNode(" "));
173 this._formattedMessage.appendChild(this._anchorElement); 173 this._formattedMessage.appendChild(this._anchorElement);
174 } 174 }
175 175
176 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 ); 176 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 );
177 if (dumpStackTrace) { 177 if (dumpStackTrace) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 if (!this._linkifier) 240 if (!this._linkifier)
241 return null; 241 return null;
242 // FIXME(62725): stack trace line/column numbers are one-based. 242 // FIXME(62725): stack trace line/column numbers are one-based.
243 var lineNumber = callFrame.lineNumber ? callFrame.lineNumber - 1 : 0; 243 var lineNumber = callFrame.lineNumber ? callFrame.lineNumber - 1 : 0;
244 var columnNumber = callFrame.columnNumber ? callFrame.columnNumber - 1 : 0; 244 var columnNumber = callFrame.columnNumber ? callFrame.columnNumber - 1 : 0;
245 var rawLocation = new WebInspector.DebuggerModel.Location(callFrame.scri ptId, lineNumber, columnNumber); 245 var rawLocation = new WebInspector.DebuggerModel.Location(callFrame.scri ptId, lineNumber, columnNumber);
246 return this._linkifier.linkifyRawLocation(rawLocation, "console-message- url"); 246 return this._linkifier.linkifyRawLocation(rawLocation, "console-message- url");
247 }, 247 },
248 248
249 /** 249 /**
250 * @param {?Array.<!ConsoleAgent.CallFrame>} stackTrace
251 * @return {?ConsoleAgent.CallFrame}
252 */
253 _callFrameAnchorFromStackTrace: function(stackTrace)
254 {
255 if (!stackTrace || !stackTrace.length)
256 return null;
257 var callFrame = stackTrace[0];
258 if (WebInspector.experimentsSettings.frameworksDebuggingSupport.isEnable d() && WebInspector.settings.skipStackFramesSwitch.get()) {
pfeldman 2014/03/26 08:57:25 I'd use early return instead.
aandrey 2014/03/26 09:30:18 Done.
259 var regex;
260 try {
261 // FIXME: Cache the created RegExp object.
aandrey 2014/03/26 08:48:31 this will be addressed after https://codereview.ch
262 regex = new RegExp(WebInspector.settings.skipStackFramesPattern. get());
263 } catch (e) {
264 }
265 if (regex) {
pfeldman 2014/03/26 08:57:25 ditto
aandrey 2014/03/26 09:30:18 Done.
266 for (var i = 0; i < stackTrace.length; ++i) {
267 var script = this._target.debuggerModel.scriptForId(stackTra ce[i].scriptId);
268 if (!script || !regex.test(script.sourceURL)) {
269 callFrame = stackTrace[i];
270 break;
271 }
272 }
273 }
274 }
275 return callFrame.scriptId ? callFrame : null;
276 },
277
278 /**
250 * @return {boolean} 279 * @return {boolean}
251 */ 280 */
252 isErrorOrWarning: function() 281 isErrorOrWarning: function()
253 { 282 {
254 return (this._message.level === WebInspector.ConsoleMessage.MessageLevel .Warning || this._message.level === WebInspector.ConsoleMessage.MessageLevel.Err or); 283 return (this._message.level === WebInspector.ConsoleMessage.MessageLevel .Warning || this._message.level === WebInspector.ConsoleMessage.MessageLevel.Err or);
255 }, 284 },
256 285
257 _format: function(parameters) 286 _format: function(parameters)
258 { 287 {
259 // This node is used like a Builder. Values are continually appended ont o it. 288 // This node is used like a Builder. Values are continually appended ont o it.
(...skipping 758 matching lines...) Expand 10 before | Expand all | Expand 10 after
1018 } 1047 }
1019 1048
1020 return sourceString + " " + typeString + " " + levelString + ": " + this .formattedMessage().textContent + "\n" + this._message.url + " line " + this._me ssage.line; 1049 return sourceString + " " + typeString + " " + levelString + ": " + this .formattedMessage().textContent + "\n" + this._message.url + " line " + this._me ssage.line;
1021 }, 1050 },
1022 1051
1023 get text() 1052 get text()
1024 { 1053 {
1025 return this._message.messageText; 1054 return this._message.messageText;
1026 } 1055 }
1027 } 1056 }
OLDNEW
« no previous file with comments | « LayoutTests/inspector/console/resources/framework.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698