OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 21 matching lines...) Expand all Loading... |
32 * @constructor | 32 * @constructor |
33 * @extends {WebInspector.SDKModel} | 33 * @extends {WebInspector.SDKModel} |
34 * @param {!WebInspector.Target} target | 34 * @param {!WebInspector.Target} target |
35 */ | 35 */ |
36 WebInspector.ConsoleModel = function(target) | 36 WebInspector.ConsoleModel = function(target) |
37 { | 37 { |
38 WebInspector.SDKModel.call(this, WebInspector.ConsoleModel, target); | 38 WebInspector.SDKModel.call(this, WebInspector.ConsoleModel, target); |
39 | 39 |
40 /** @type {!Array.<!WebInspector.ConsoleMessage>} */ | 40 /** @type {!Array.<!WebInspector.ConsoleMessage>} */ |
41 this._messages = []; | 41 this._messages = []; |
42 this.warnings = 0; | 42 /** @type {!Map<number, !WebInspector.ConsoleMessage>} */ |
43 this.errors = 0; | 43 this._messageById = new Map(); |
| 44 this._warnings = 0; |
| 45 this._errors = 0; |
| 46 this._revokedErrors = 0; |
44 this._consoleAgent = target.consoleAgent(); | 47 this._consoleAgent = target.consoleAgent(); |
45 target.registerConsoleDispatcher(new WebInspector.ConsoleDispatcher(this)); | 48 target.registerConsoleDispatcher(new WebInspector.ConsoleDispatcher(this)); |
46 this._enableAgent(); | 49 this._enableAgent(); |
47 } | 50 } |
48 | 51 |
49 WebInspector.ConsoleModel.Events = { | 52 WebInspector.ConsoleModel.Events = { |
50 ConsoleCleared: "ConsoleCleared", | 53 ConsoleCleared: "ConsoleCleared", |
51 MessageAdded: "MessageAdded", | 54 MessageAdded: "MessageAdded", |
| 55 MessageUpdated: "MessageUpdated", |
52 CommandEvaluated: "CommandEvaluated", | 56 CommandEvaluated: "CommandEvaluated", |
53 } | 57 } |
54 | 58 |
55 WebInspector.ConsoleModel.prototype = { | 59 WebInspector.ConsoleModel.prototype = { |
56 _enableAgent: function() | 60 _enableAgent: function() |
57 { | 61 { |
58 this._enablingConsole = true; | 62 this._enablingConsole = true; |
59 | 63 |
60 /** | 64 /** |
61 * @this {WebInspector.ConsoleModel} | 65 * @this {WebInspector.ConsoleModel} |
62 */ | 66 */ |
63 function callback() | 67 function callback() |
64 { | 68 { |
65 delete this._enablingConsole; | 69 delete this._enablingConsole; |
66 } | 70 } |
67 this._consoleAgent.enable(callback.bind(this)); | 71 this._consoleAgent.enable(callback.bind(this)); |
68 }, | 72 }, |
69 | 73 |
70 /** | 74 /** |
71 * @param {!WebInspector.ConsoleMessage} msg | 75 * @param {!WebInspector.ConsoleMessage} msg |
72 */ | 76 */ |
73 addMessage: function(msg) | 77 addMessage: function(msg) |
74 { | 78 { |
75 msg.index = this._messages.length; | 79 if (msg.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError
&& msg._relatedMessageId) { |
| 80 var relatedMessage = this._messageById.get(msg._relatedMessageId); |
| 81 if (!relatedMessage) |
| 82 return; |
| 83 this._errors--; |
| 84 this._revokedErrors++; |
| 85 relatedMessage.level = WebInspector.ConsoleMessage.MessageLevel.Revo
kedError; |
| 86 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.Messa
geUpdated, relatedMessage); |
| 87 return; |
| 88 } |
| 89 |
76 this._messages.push(msg); | 90 this._messages.push(msg); |
| 91 if (msg._messageId) |
| 92 this._messageById.set(msg._messageId, msg); |
77 this._incrementErrorWarningCount(msg); | 93 this._incrementErrorWarningCount(msg); |
78 | |
79 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.MessageAd
ded, msg); | 94 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.MessageAd
ded, msg); |
80 }, | 95 }, |
81 | 96 |
82 /** | 97 /** |
83 * @param {!WebInspector.ConsoleMessage} msg | 98 * @param {!WebInspector.ConsoleMessage} msg |
84 */ | 99 */ |
85 _incrementErrorWarningCount: function(msg) | 100 _incrementErrorWarningCount: function(msg) |
86 { | 101 { |
87 switch (msg.level) { | 102 switch (msg.level) { |
88 case WebInspector.ConsoleMessage.MessageLevel.Warning: | 103 case WebInspector.ConsoleMessage.MessageLevel.Warning: |
89 this.warnings++; | 104 this._warnings++; |
90 break; | 105 break; |
91 case WebInspector.ConsoleMessage.MessageLevel.Error: | 106 case WebInspector.ConsoleMessage.MessageLevel.Error: |
92 this.errors++; | 107 this._errors++; |
| 108 break; |
| 109 case WebInspector.ConsoleMessage.MessageLevel.RevokedError: |
| 110 this._revokedErrors++; |
93 break; | 111 break; |
94 } | 112 } |
95 }, | 113 }, |
96 | 114 |
97 /** | 115 /** |
98 * @return {!Array.<!WebInspector.ConsoleMessage>} | 116 * @return {!Array.<!WebInspector.ConsoleMessage>} |
99 */ | 117 */ |
100 messages: function() | 118 messages: function() |
101 { | 119 { |
102 return this._messages; | 120 return this._messages; |
103 }, | 121 }, |
104 | 122 |
105 requestClearMessages: function() | 123 requestClearMessages: function() |
106 { | 124 { |
107 this._consoleAgent.clearMessages(); | 125 this._consoleAgent.clearMessages(); |
108 this._messagesCleared(); | 126 this._messagesCleared(); |
109 }, | 127 }, |
110 | 128 |
111 _messagesCleared: function() | 129 _messagesCleared: function() |
112 { | 130 { |
113 this._messages = []; | 131 this._messages = []; |
114 this.errors = 0; | 132 this._messageById.clear(); |
115 this.warnings = 0; | 133 this._errors = 0; |
| 134 this._revokedErrors = 0; |
| 135 this._warnings = 0; |
116 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.ConsoleCl
eared); | 136 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.ConsoleCl
eared); |
117 }, | 137 }, |
118 | 138 |
| 139 /** |
| 140 * @return {number} |
| 141 */ |
| 142 errors: function() |
| 143 { |
| 144 return this._errors; |
| 145 }, |
| 146 |
| 147 /** |
| 148 * @return {number} |
| 149 */ |
| 150 revokedErrors: function() |
| 151 { |
| 152 return this._revokedErrors; |
| 153 }, |
| 154 |
| 155 /** |
| 156 * @return {number} |
| 157 */ |
| 158 warnings: function() |
| 159 { |
| 160 return this._warnings; |
| 161 }, |
| 162 |
119 __proto__: WebInspector.SDKModel.prototype | 163 __proto__: WebInspector.SDKModel.prototype |
120 } | 164 } |
121 | 165 |
122 /** | 166 /** |
123 * @param {!WebInspector.ExecutionContext} executionContext | 167 * @param {!WebInspector.ExecutionContext} executionContext |
124 * @param {string} text | 168 * @param {string} text |
125 * @param {boolean=} useCommandLineAPI | 169 * @param {boolean=} useCommandLineAPI |
126 */ | 170 */ |
127 WebInspector.ConsoleModel.evaluateCommandInConsole = function(executionContext,
text, useCommandLineAPI) | 171 WebInspector.ConsoleModel.evaluateCommandInConsole = function(executionContext,
text, useCommandLineAPI) |
128 { | 172 { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 * @param {?string=} url | 211 * @param {?string=} url |
168 * @param {number=} line | 212 * @param {number=} line |
169 * @param {number=} column | 213 * @param {number=} column |
170 * @param {!NetworkAgent.RequestId=} requestId | 214 * @param {!NetworkAgent.RequestId=} requestId |
171 * @param {!Array.<!RuntimeAgent.RemoteObject>=} parameters | 215 * @param {!Array.<!RuntimeAgent.RemoteObject>=} parameters |
172 * @param {!Array.<!ConsoleAgent.CallFrame>=} stackTrace | 216 * @param {!Array.<!ConsoleAgent.CallFrame>=} stackTrace |
173 * @param {number=} timestamp | 217 * @param {number=} timestamp |
174 * @param {!RuntimeAgent.ExecutionContextId=} executionContextId | 218 * @param {!RuntimeAgent.ExecutionContextId=} executionContextId |
175 * @param {!ConsoleAgent.AsyncStackTrace=} asyncStackTrace | 219 * @param {!ConsoleAgent.AsyncStackTrace=} asyncStackTrace |
176 * @param {?string=} scriptId | 220 * @param {?string=} scriptId |
| 221 * @param {number=} messageId |
| 222 * @param {number=} relatedMessageId |
177 */ | 223 */ |
178 WebInspector.ConsoleMessage = function(target, source, level, messageText, type,
url, line, column, requestId, parameters, stackTrace, timestamp, executionConte
xtId, asyncStackTrace, scriptId) | 224 WebInspector.ConsoleMessage = function(target, source, level, messageText, type,
url, line, column, requestId, parameters, stackTrace, timestamp, executionConte
xtId, asyncStackTrace, scriptId, messageId, relatedMessageId) |
179 { | 225 { |
180 this._target = target; | 226 this._target = target; |
181 this.source = source; | 227 this.source = source; |
182 this.level = level; | 228 this.level = level; |
183 this.messageText = messageText; | 229 this.messageText = messageText; |
184 this.type = type || WebInspector.ConsoleMessage.MessageType.Log; | 230 this.type = type || WebInspector.ConsoleMessage.MessageType.Log; |
185 /** @type {string|undefined} */ | 231 /** @type {string|undefined} */ |
186 this.url = url || undefined; | 232 this.url = url || undefined; |
187 /** @type {number} */ | 233 /** @type {number} */ |
188 this.line = line || 0; | 234 this.line = line || 0; |
189 /** @type {number} */ | 235 /** @type {number} */ |
190 this.column = column || 0; | 236 this.column = column || 0; |
191 this.parameters = parameters; | 237 this.parameters = parameters; |
192 /** @type {!Array.<!ConsoleAgent.CallFrame>|undefined} */ | 238 /** @type {!Array.<!ConsoleAgent.CallFrame>|undefined} */ |
193 this.stackTrace = stackTrace; | 239 this.stackTrace = stackTrace; |
194 this.timestamp = timestamp || Date.now(); | 240 this.timestamp = timestamp || Date.now(); |
195 this.executionContextId = executionContextId || 0; | 241 this.executionContextId = executionContextId || 0; |
196 this.asyncStackTrace = asyncStackTrace; | 242 this.asyncStackTrace = asyncStackTrace; |
197 this.scriptId = scriptId || null; | 243 this.scriptId = scriptId || null; |
| 244 this._messageId = messageId || 0; |
| 245 this._relatedMessageId = relatedMessageId || 0; |
198 | 246 |
199 this.request = requestId ? target.networkLog.requestForId(requestId) : null; | 247 this.request = requestId ? target.networkLog.requestForId(requestId) : null; |
200 | 248 |
201 if (this.request) { | 249 if (this.request) { |
202 var initiator = this.request.initiator(); | 250 var initiator = this.request.initiator(); |
203 if (initiator) { | 251 if (initiator) { |
204 this.stackTrace = initiator.stackTrace || undefined; | 252 this.stackTrace = initiator.stackTrace || undefined; |
205 this.asyncStackTrace = initiator.asyncStackTrace; | 253 this.asyncStackTrace = initiator.asyncStackTrace; |
206 if (initiator.url) { | 254 if (initiator.url) { |
207 this.url = initiator.url; | 255 this.url = initiator.url; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 | 314 |
267 /** | 315 /** |
268 * @return {boolean} | 316 * @return {boolean} |
269 */ | 317 */ |
270 isErrorOrWarning: function() | 318 isErrorOrWarning: function() |
271 { | 319 { |
272 return (this.level === WebInspector.ConsoleMessage.MessageLevel.Warning
|| this.level === WebInspector.ConsoleMessage.MessageLevel.Error); | 320 return (this.level === WebInspector.ConsoleMessage.MessageLevel.Warning
|| this.level === WebInspector.ConsoleMessage.MessageLevel.Error); |
273 }, | 321 }, |
274 | 322 |
275 /** | 323 /** |
276 * @return {!WebInspector.ConsoleMessage} | |
277 */ | |
278 clone: function() | |
279 { | |
280 return new WebInspector.ConsoleMessage( | |
281 this.target(), | |
282 this.source, | |
283 this.level, | |
284 this.messageText, | |
285 this.type, | |
286 this.url, | |
287 this.line, | |
288 this.column, | |
289 this.request ? this.request.requestId : undefined, | |
290 this.parameters, | |
291 this.stackTrace, | |
292 this.timestamp, | |
293 this.executionContextId, | |
294 this.asyncStackTrace, | |
295 this.scriptId); | |
296 }, | |
297 | |
298 /** | |
299 * @param {?WebInspector.ConsoleMessage} msg | 324 * @param {?WebInspector.ConsoleMessage} msg |
300 * @return {boolean} | 325 * @return {boolean} |
301 */ | 326 */ |
302 isEqual: function(msg) | 327 isEqual: function(msg) |
303 { | 328 { |
304 if (!msg) | 329 if (!msg) |
305 return false; | 330 return false; |
306 | 331 |
| 332 if (this._messageId || msg._messageId) |
| 333 return false; |
| 334 if (this._relatedMessageId || msg._relatedMessageId) |
| 335 return false; |
| 336 |
307 if (!this._isEqualStackTraces(this.stackTrace, msg.stackTrace)) | 337 if (!this._isEqualStackTraces(this.stackTrace, msg.stackTrace)) |
308 return false; | 338 return false; |
309 | 339 |
310 var asyncTrace1 = this.asyncStackTrace; | 340 var asyncTrace1 = this.asyncStackTrace; |
311 var asyncTrace2 = msg.asyncStackTrace; | 341 var asyncTrace2 = msg.asyncStackTrace; |
312 while (asyncTrace1 || asyncTrace2) { | 342 while (asyncTrace1 || asyncTrace2) { |
313 if (!asyncTrace1 || !asyncTrace2) | 343 if (!asyncTrace1 || !asyncTrace2) |
314 return false; | 344 return false; |
315 if (asyncTrace1.description !== asyncTrace2.description) | 345 if (asyncTrace1.description !== asyncTrace2.description) |
316 return false; | 346 return false; |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 } | 434 } |
405 | 435 |
406 /** | 436 /** |
407 * @enum {string} | 437 * @enum {string} |
408 */ | 438 */ |
409 WebInspector.ConsoleMessage.MessageLevel = { | 439 WebInspector.ConsoleMessage.MessageLevel = { |
410 Log: "log", | 440 Log: "log", |
411 Info: "info", | 441 Info: "info", |
412 Warning: "warning", | 442 Warning: "warning", |
413 Error: "error", | 443 Error: "error", |
414 Debug: "debug" | 444 Debug: "debug", |
| 445 RevokedError: "revokedError" |
415 }; | 446 }; |
416 | 447 |
417 /** | 448 /** |
418 * @param {!WebInspector.ConsoleMessage} a | 449 * @param {!WebInspector.ConsoleMessage} a |
419 * @param {!WebInspector.ConsoleMessage} b | 450 * @param {!WebInspector.ConsoleMessage} b |
420 * @return {number} | 451 * @return {number} |
421 */ | 452 */ |
422 WebInspector.ConsoleMessage.timestampComparator = function (a, b) | 453 WebInspector.ConsoleMessage.timestampComparator = function (a, b) |
423 { | 454 { |
424 return a.timestamp - b.timestamp; | 455 return a.timestamp - b.timestamp; |
(...skipping 24 matching lines...) Expand all Loading... |
449 payload.type, | 480 payload.type, |
450 payload.url, | 481 payload.url, |
451 payload.line, | 482 payload.line, |
452 payload.column, | 483 payload.column, |
453 payload.networkRequestId, | 484 payload.networkRequestId, |
454 payload.parameters, | 485 payload.parameters, |
455 payload.stackTrace, | 486 payload.stackTrace, |
456 payload.timestamp * 1000, // Convert to ms. | 487 payload.timestamp * 1000, // Convert to ms. |
457 payload.executionContextId, | 488 payload.executionContextId, |
458 payload.asyncStackTrace, | 489 payload.asyncStackTrace, |
459 payload.scriptId); | 490 payload.scriptId, |
| 491 payload.messageId, |
| 492 payload.relatedMessageId); |
460 this._console.addMessage(consoleMessage); | 493 this._console.addMessage(consoleMessage); |
461 }, | 494 }, |
462 | 495 |
463 /** | 496 /** |
464 * @override | 497 * @override |
465 * @param {number} count | 498 * @param {number} count |
466 */ | 499 */ |
467 messageRepeatCountUpdated: function(count) | 500 messageRepeatCountUpdated: function(count) |
468 { | 501 { |
469 }, | 502 }, |
(...skipping 10 matching lines...) Expand all Loading... |
480 | 513 |
481 /** | 514 /** |
482 * @constructor | 515 * @constructor |
483 * @extends {WebInspector.Object} | 516 * @extends {WebInspector.Object} |
484 * @implements {WebInspector.TargetManager.Observer} | 517 * @implements {WebInspector.TargetManager.Observer} |
485 */ | 518 */ |
486 WebInspector.MultitargetConsoleModel = function() | 519 WebInspector.MultitargetConsoleModel = function() |
487 { | 520 { |
488 WebInspector.targetManager.observeTargets(this); | 521 WebInspector.targetManager.observeTargets(this); |
489 WebInspector.targetManager.addModelListener(WebInspector.ConsoleModel, WebIn
spector.ConsoleModel.Events.MessageAdded, this._consoleMessageAdded, this); | 522 WebInspector.targetManager.addModelListener(WebInspector.ConsoleModel, WebIn
spector.ConsoleModel.Events.MessageAdded, this._consoleMessageAdded, this); |
| 523 WebInspector.targetManager.addModelListener(WebInspector.ConsoleModel, WebIn
spector.ConsoleModel.Events.MessageUpdated, this._consoleMessageUpdated, this); |
490 WebInspector.targetManager.addModelListener(WebInspector.ConsoleModel, WebIn
spector.ConsoleModel.Events.CommandEvaluated, this._commandEvaluated, this); | 524 WebInspector.targetManager.addModelListener(WebInspector.ConsoleModel, WebIn
spector.ConsoleModel.Events.CommandEvaluated, this._commandEvaluated, this); |
491 } | 525 } |
492 | 526 |
493 WebInspector.MultitargetConsoleModel.prototype = { | 527 WebInspector.MultitargetConsoleModel.prototype = { |
494 /** | 528 /** |
495 * @override | 529 * @override |
496 * @param {!WebInspector.Target} target | 530 * @param {!WebInspector.Target} target |
497 */ | 531 */ |
498 targetAdded: function(target) | 532 targetAdded: function(target) |
499 { | 533 { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
536 * @param {!WebInspector.Event} event | 570 * @param {!WebInspector.Event} event |
537 */ | 571 */ |
538 _consoleMessageAdded: function(event) | 572 _consoleMessageAdded: function(event) |
539 { | 573 { |
540 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.MessageAd
ded, event.data); | 574 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.MessageAd
ded, event.data); |
541 }, | 575 }, |
542 | 576 |
543 /** | 577 /** |
544 * @param {!WebInspector.Event} event | 578 * @param {!WebInspector.Event} event |
545 */ | 579 */ |
| 580 _consoleMessageUpdated: function(event) |
| 581 { |
| 582 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.MessageUp
dated, event.data); |
| 583 }, |
| 584 |
| 585 /** |
| 586 * @param {!WebInspector.Event} event |
| 587 */ |
546 _commandEvaluated: function(event) | 588 _commandEvaluated: function(event) |
547 { | 589 { |
548 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.CommandEv
aluated, event.data); | 590 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.CommandEv
aluated, event.data); |
549 }, | 591 }, |
550 | 592 |
551 __proto__: WebInspector.Object.prototype | 593 __proto__: WebInspector.Object.prototype |
552 } | 594 } |
553 | 595 |
554 /** | 596 /** |
555 * @type {!WebInspector.MultitargetConsoleModel} | 597 * @type {!WebInspector.MultitargetConsoleModel} |
556 */ | 598 */ |
557 WebInspector.multitargetConsoleModel; | 599 WebInspector.multitargetConsoleModel; |
OLD | NEW |