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

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

Issue 220903002: DevTools: wrap DebuggerAgent.Location with DebuggerModel.Location. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: All tests!!! Created 6 years, 8 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 | « Source/devtools/front_end/ConsoleView.js ('k') | Source/devtools/front_end/DOMModel.js » ('j') | 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 * @extends {WebInspector.TargetAware}
33 * @param {!WebInspector.Target} target 34 * @param {!WebInspector.Target} target
34 * @param {!WebInspector.ConsoleMessage} consoleMessage 35 * @param {!WebInspector.ConsoleMessage} consoleMessage
35 * @param {?WebInspector.Linkifier} linkifier 36 * @param {?WebInspector.Linkifier} linkifier
36 */ 37 */
37 WebInspector.ConsoleViewMessage = function(target, consoleMessage, linkifier) 38 WebInspector.ConsoleViewMessage = function(target, consoleMessage, linkifier)
38 { 39 {
40 WebInspector.TargetAware.call(this, target);
39 this._message = consoleMessage; 41 this._message = consoleMessage;
40 this._linkifier = linkifier; 42 this._linkifier = linkifier;
41 this._target = target;
42 this._repeatCount = 1; 43 this._repeatCount = 1;
43 44
44 /** @type {!Array.<!WebInspector.DataGrid>} */ 45 /** @type {!Array.<!WebInspector.DataGrid>} */
45 this._dataGrids = []; 46 this._dataGrids = [];
46 /** @type {!Map.<!WebInspector.DataGrid, ?Element>} */ 47 /** @type {!Map.<!WebInspector.DataGrid, ?Element>} */
47 this._dataGridParents = new Map(); 48 this._dataGridParents = new Map();
48 49
49 this._customFormatters = { 50 this._customFormatters = {
50 "object": this._formatParameterAsObject, 51 "object": this._formatParameterAsObject,
51 "array": this._formatParameterAsArray, 52 "array": this._formatParameterAsArray,
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 */ 217 */
217 _linkifyLocation: function(url, lineNumber, columnNumber) 218 _linkifyLocation: function(url, lineNumber, columnNumber)
218 { 219 {
219 console.assert(this._linkifier); 220 console.assert(this._linkifier);
220 if (!this._linkifier) 221 if (!this._linkifier)
221 return null; 222 return null;
222 // FIXME(62725): stack trace line/column numbers are one-based. 223 // FIXME(62725): stack trace line/column numbers are one-based.
223 lineNumber = lineNumber ? lineNumber - 1 : 0; 224 lineNumber = lineNumber ? lineNumber - 1 : 0;
224 columnNumber = columnNumber ? columnNumber - 1 : 0; 225 columnNumber = columnNumber ? columnNumber - 1 : 0;
225 if (this._message.source === WebInspector.ConsoleMessage.MessageSource.C SS) { 226 if (this._message.source === WebInspector.ConsoleMessage.MessageSource.C SS) {
226 var headerIds = WebInspector.cssModel.styleSheetIdsForURL(url); 227 var headerIds = this.target().cssModel.styleSheetIdsForURL(url);
227 var cssLocation = new WebInspector.CSSLocation(url, lineNumber, colu mnNumber); 228 var cssLocation = new WebInspector.CSSLocation(this.target(), url, l ineNumber, columnNumber);
228 return this._linkifier.linkifyCSSLocation(headerIds[0] || null, cssL ocation, "console-message-url"); 229 return this._linkifier.linkifyCSSLocation(headerIds[0] || null, cssL ocation, "console-message-url");
229 } 230 }
230 231
231 return this._linkifier.linkifyLocation(url, lineNumber, columnNumber, "c onsole-message-url"); 232 return this._linkifier.linkifyLocation(url, lineNumber, columnNumber, "c onsole-message-url");
232 }, 233 },
233 234
234 /** 235 /**
235 * @param {!ConsoleAgent.CallFrame} callFrame 236 * @param {!ConsoleAgent.CallFrame} callFrame
236 * @return {?Element} 237 * @return {?Element}
237 */ 238 */
238 _linkifyCallFrame: function(callFrame) 239 _linkifyCallFrame: function(callFrame)
239 { 240 {
240 console.assert(this._linkifier); 241 console.assert(this._linkifier);
241 if (!this._linkifier) 242 if (!this._linkifier)
242 return null; 243 return null;
243 // FIXME(62725): stack trace line/column numbers are one-based. 244 // FIXME(62725): stack trace line/column numbers are one-based.
244 var lineNumber = callFrame.lineNumber ? callFrame.lineNumber - 1 : 0; 245 var lineNumber = callFrame.lineNumber ? callFrame.lineNumber - 1 : 0;
245 var columnNumber = callFrame.columnNumber ? callFrame.columnNumber - 1 : 0; 246 var columnNumber = callFrame.columnNumber ? callFrame.columnNumber - 1 : 0;
246 var rawLocation = new WebInspector.DebuggerModel.Location(callFrame.scri ptId, lineNumber, columnNumber); 247 var rawLocation = new WebInspector.DebuggerModel.Location(this.target(), callFrame.scriptId, lineNumber, columnNumber);
247 return this._linkifier.linkifyRawLocation(rawLocation, "console-message- url"); 248 return this._linkifier.linkifyRawLocation(rawLocation, "console-message- url");
248 }, 249 },
249 250
250 /** 251 /**
251 * @param {?Array.<!ConsoleAgent.CallFrame>} stackTrace 252 * @param {?Array.<!ConsoleAgent.CallFrame>} stackTrace
252 * @return {?ConsoleAgent.CallFrame} 253 * @return {?ConsoleAgent.CallFrame}
253 */ 254 */
254 _callFrameAnchorFromStackTrace: function(stackTrace) 255 _callFrameAnchorFromStackTrace: function(stackTrace)
255 { 256 {
256 if (!stackTrace || !stackTrace.length) 257 if (!stackTrace || !stackTrace.length)
257 return null; 258 return null;
258 var callFrame = stackTrace[0].scriptId ? stackTrace[0] : null; 259 var callFrame = stackTrace[0].scriptId ? stackTrace[0] : null;
259 if (!WebInspector.experimentsSettings.frameworksDebuggingSupport.isEnabl ed()) 260 if (!WebInspector.experimentsSettings.frameworksDebuggingSupport.isEnabl ed())
260 return callFrame; 261 return callFrame;
261 if (!WebInspector.settings.skipStackFramesSwitch.get()) 262 if (!WebInspector.settings.skipStackFramesSwitch.get())
262 return callFrame; 263 return callFrame;
263 var regex = WebInspector.settings.skipStackFramesPattern.asRegExp(); 264 var regex = WebInspector.settings.skipStackFramesPattern.asRegExp();
264 if (!regex) 265 if (!regex)
265 return callFrame; 266 return callFrame;
266 for (var i = 0; i < stackTrace.length; ++i) { 267 for (var i = 0; i < stackTrace.length; ++i) {
267 var script = this._target.debuggerModel.scriptForId(stackTrace[i].sc riptId); 268 var script = this.target().debuggerModel.scriptForId(stackTrace[i].s criptId);
268 if (!script || !regex.test(script.sourceURL)) 269 if (!script || !regex.test(script.sourceURL))
269 return stackTrace[i].scriptId ? stackTrace[i] : null; 270 return stackTrace[i].scriptId ? stackTrace[i] : null;
270 } 271 }
271 return callFrame; 272 return callFrame;
272 }, 273 },
273 274
274 /** 275 /**
275 * @return {boolean} 276 * @return {boolean}
276 */ 277 */
277 isErrorOrWarning: function() 278 isErrorOrWarning: function()
278 { 279 {
279 return (this._message.level === WebInspector.ConsoleMessage.MessageLevel .Warning || this._message.level === WebInspector.ConsoleMessage.MessageLevel.Err or); 280 return (this._message.level === WebInspector.ConsoleMessage.MessageLevel .Warning || this._message.level === WebInspector.ConsoleMessage.MessageLevel.Err or);
280 }, 281 },
281 282
282 _format: function(parameters) 283 _format: function(parameters)
283 { 284 {
284 // This node is used like a Builder. Values are continually appended ont o it. 285 // This node is used like a Builder. Values are continually appended ont o it.
285 var formattedResult = document.createElement("span"); 286 var formattedResult = document.createElement("span");
286 if (!parameters.length) 287 if (!parameters.length)
287 return formattedResult; 288 return formattedResult;
288 289
289 // Formatting code below assumes that parameters are all wrappers wherea s frontend console 290 // Formatting code below assumes that parameters are all wrappers wherea s frontend console
290 // API allows passing arbitrary values as messages (strings, numbers, et c.). Wrap them here. 291 // API allows passing arbitrary values as messages (strings, numbers, et c.). Wrap them here.
291 for (var i = 0; i < parameters.length; ++i) { 292 for (var i = 0; i < parameters.length; ++i) {
292 // FIXME: Only pass runtime wrappers here. 293 // FIXME: Only pass runtime wrappers here.
293 if (parameters[i] instanceof WebInspector.RemoteObject) 294 if (parameters[i] instanceof WebInspector.RemoteObject)
294 continue; 295 continue;
295 296
296 if (typeof parameters[i] === "object") 297 if (typeof parameters[i] === "object")
297 parameters[i] = this._target.runtimeModel.createRemoteObject(par ameters[i], this._target); 298 parameters[i] = this.target().runtimeModel.createRemoteObject(pa rameters[i]);
298 else 299 else
299 parameters[i] = this._target.runtimeModel.createRemoteObjectFrom PrimitiveValue(parameters[i]); 300 parameters[i] = this.target().runtimeModel.createRemoteObjectFro mPrimitiveValue(parameters[i]);
300 } 301 }
301 302
302 // There can be string log and string eval result. We distinguish betwee n them based on message type. 303 // There can be string log and string eval result. We distinguish betwee n them based on message type.
303 var shouldFormatMessage = WebInspector.RemoteObject.type(parameters[0]) === "string" && this._message.type !== WebInspector.ConsoleMessage.MessageType.R esult; 304 var shouldFormatMessage = WebInspector.RemoteObject.type(parameters[0]) === "string" && this._message.type !== WebInspector.ConsoleMessage.MessageType.R esult;
304 305
305 // Multiple parameters with the first being a format string. Save unused substitutions. 306 // Multiple parameters with the first being a format string. Save unused substitutions.
306 if (shouldFormatMessage) { 307 if (shouldFormatMessage) {
307 // Multiple parameters with the first being a format string. Save un used substitutions. 308 // Multiple parameters with the first being a format string. Save un used substitutions.
308 var result = this._formatWithSubstitutionString(parameters[0].descri ption, parameters.slice(1), formattedResult); 309 var result = this._formatWithSubstitutionString(parameters[0].descri ption, parameters.slice(1), formattedResult);
309 parameters = result.unusedSubstitutions; 310 parameters = result.unusedSubstitutions;
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 * @this {WebInspector.ConsoleViewMessage} 492 * @this {WebInspector.ConsoleViewMessage}
492 */ 493 */
493 function printNode(nodeId) 494 function printNode(nodeId)
494 { 495 {
495 if (!nodeId) { 496 if (!nodeId) {
496 // Sometimes DOM is loaded after the sync message is being forma tted, so we get no 497 // Sometimes DOM is loaded after the sync message is being forma tted, so we get no
497 // nodeId here. So we fall back to object formatting here. 498 // nodeId here. So we fall back to object formatting here.
498 this._formatParameterAsObject(object, elem, false); 499 this._formatParameterAsObject(object, elem, false);
499 return; 500 return;
500 } 501 }
501 var node = this._target.domModel.nodeForId(nodeId); 502 var node = this.target().domModel.nodeForId(nodeId);
502 var renderer = WebInspector.moduleManager.instance(WebInspector.Rend erer, node); 503 var renderer = WebInspector.moduleManager.instance(WebInspector.Rend erer, node);
503 if (renderer) 504 if (renderer)
504 elem.appendChild(renderer.render(node)); 505 elem.appendChild(renderer.render(node));
505 else 506 else
506 console.error("No renderer for node found"); 507 console.error("No renderer for node found");
507 } 508 }
508 object.pushNodeToFrontend(printNode.bind(this)); 509 object.pushNodeToFrontend(printNode.bind(this));
509 }, 510 },
510 511
511 /** 512 /**
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
1069 levelString = "Info"; 1070 levelString = "Info";
1070 break; 1071 break;
1071 } 1072 }
1072 1073
1073 return sourceString + " " + typeString + " " + levelString + ": " + this .formattedMessage().textContent + "\n" + this._message.url + " line " + this._me ssage.line; 1074 return sourceString + " " + typeString + " " + levelString + ": " + this .formattedMessage().textContent + "\n" + this._message.url + " line " + this._me ssage.line;
1074 }, 1075 },
1075 1076
1076 get text() 1077 get text()
1077 { 1078 {
1078 return this._message.messageText; 1079 return this._message.messageText;
1079 } 1080 },
1081
1082 __proto__: WebInspector.TargetAware.prototype
1080 } 1083 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/ConsoleView.js ('k') | Source/devtools/front_end/DOMModel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698