OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |