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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js

Issue 2751193003: [DevTools] Move ConsoleModel to it's own module (Closed)
Patch Set: Created 3 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
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 /**
32 * @implements {SDK.TargetManager.Observer}
33 */
34 SDK.ConsoleModel = class extends Common.Object {
35 constructor() {
36 super();
37
38 /** @type {!Array.<!SDK.ConsoleMessage>} */
39 this._messages = [];
40 /** @type {!Map<!SDK.Target, !Map<number, !SDK.ConsoleMessage>>} */
41 this._messageByExceptionId = new Map();
42 this._warnings = 0;
43 this._errors = 0;
44
45 SDK.targetManager.observeTargets(this);
46 }
47
48 /**
49 * @override
50 * @param {!SDK.Target} target
51 */
52 targetAdded(target) {
53 var eventListeners = [];
54
55 var logModel = target.model(SDK.LogModel);
56 if (logModel)
57 eventListeners.push(logModel.on(SDK.LogModel.EntryAddedEvent, this._logEnt ryAdded, this));
58
59 var cpuProfilerModel = target.model(SDK.CPUProfilerModel);
60 if (cpuProfilerModel) {
61 eventListeners.push(cpuProfilerModel.addEventListener(
62 SDK.CPUProfilerModel.Events.ConsoleProfileStarted, this._consoleProfil eStarted.bind(this, cpuProfilerModel)));
63 eventListeners.push(cpuProfilerModel.addEventListener(
64 SDK.CPUProfilerModel.Events.ConsoleProfileFinished,
65 this._consoleProfileFinished.bind(this, cpuProfilerModel)));
66 }
67
68 var resourceTreeModel = target.model(SDK.ResourceTreeModel);
69 if (resourceTreeModel) {
70 eventListeners.push(resourceTreeModel.addEventListener(
71 SDK.ResourceTreeModel.Events.MainFrameStartedLoading, this._mainFrameS tartedLoading, this));
72 eventListeners.push(resourceTreeModel.addEventListener(
73 SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNaviga ted, this));
74 }
75
76 var runtimeModel = target.model(SDK.RuntimeModel);
77 if (runtimeModel) {
78 eventListeners.push(runtimeModel.addEventListener(
79 SDK.RuntimeModel.Events.ExceptionThrown, this._exceptionThrown.bind(th is, runtimeModel)));
80 eventListeners.push(runtimeModel.addEventListener(
81 SDK.RuntimeModel.Events.ExceptionRevoked, this._exceptionRevoked.bind( this, runtimeModel)));
82 eventListeners.push(runtimeModel.addEventListener(
83 SDK.RuntimeModel.Events.ConsoleAPICalled, this._consoleAPICalled.bind( this, runtimeModel)));
84 }
85
86 var networkManager = target.model(SDK.NetworkManager);
87 if (networkManager) {
88 eventListeners.push(networkManager.addEventListener(
89 SDK.NetworkManager.Events.WarningGenerated, this._networkWarningGenera ted.bind(this, networkManager)));
90 }
91
92 target[SDK.ConsoleModel._events] = eventListeners;
93 }
94
95 /**
96 * @override
97 * @param {!SDK.Target} target
98 */
99 targetRemoved(target) {
100 this._messageByExceptionId.delete(target);
101 Common.EventTarget.removeEventListeners(target[SDK.ConsoleModel._events]);
102 }
103
104 /**
105 * @param {!SDK.ExecutionContext} executionContext
106 * @param {string} text
107 * @param {boolean} useCommandLineAPI
108 */
109 evaluateCommandInConsole(executionContext, text, useCommandLineAPI) {
110 var target = executionContext.target();
111 var requestedText = text;
112
113 var commandMessage = new SDK.ConsoleMessage(
114 target, SDK.ConsoleMessage.MessageSource.JS, null, text, SDK.ConsoleMess age.MessageType.Command);
115 commandMessage.setExecutionContextId(executionContext.id);
116 this.addMessage(commandMessage);
117
118 /**
119 * @param {?SDK.RemoteObject} result
120 * @param {!Protocol.Runtime.ExceptionDetails=} exceptionDetails
121 * @this {SDK.ConsoleModel}
122 */
123 function printResult(result, exceptionDetails) {
124 if (!result)
125 return;
126
127 Common.console.showPromise().then(() => {
128 this.dispatchEventToListeners(
129 SDK.ConsoleModel.Events.CommandEvaluated,
130 {result: result, text: requestedText, commandMessage: commandMessage , exceptionDetails: exceptionDetails});
131 });
132 }
133
134 /**
135 * @param {string} code
136 * @suppress {uselessCode}
137 * @return {boolean}
138 */
139 function looksLikeAnObjectLiteral(code) {
140 // Only parenthesize what appears to be an object literal.
141 if (!(/^\s*\{/.test(code) && /\}\s*$/.test(code)))
142 return false;
143
144 try {
145 // Check if the code can be interpreted as an expression.
146 Function('return ' + code + ';');
147
148 // No syntax error! Does it work parenthesized?
149 Function('(' + code + ')');
150
151 return true;
152 } catch (e) {
153 return false;
154 }
155 }
156
157 if (looksLikeAnObjectLiteral(text))
158 text = '(' + text + ')';
159
160 executionContext.evaluate(text, 'console', useCommandLineAPI, false, false, true, true, printResult.bind(this));
161 Host.userMetrics.actionTaken(Host.UserMetrics.Action.ConsoleEvaluated);
162 }
163
164 /**
165 * @param {!SDK.ConsoleMessage} msg
166 */
167 addMessage(msg) {
168 if (msg.source === SDK.ConsoleMessage.MessageSource.Worker && SDK.targetMana ger.targetById(msg.workerId))
169 return;
170
171 if (msg.source === SDK.ConsoleMessage.MessageSource.ConsoleAPI && msg.type = == SDK.ConsoleMessage.MessageType.Clear)
172 this._clear();
173
174 this._messages.push(msg);
175 if (msg._exceptionId && msg.target()) {
176 // TODO(dgozman): make target non-nullable, as we only have messages witho ut a target
177 // internally in ConsoleView.
178 var target = /** @type {!SDK.Target} */ (msg.target());
179 var targetMap = this._messageByExceptionId.get(target);
180 if (!targetMap) {
181 targetMap = new Map();
182 this._messageByExceptionId.set(target, targetMap);
183 }
184 targetMap.set(msg._exceptionId, msg);
185 }
186 this._incrementErrorWarningCount(msg);
187 this.dispatchEventToListeners(SDK.ConsoleModel.Events.MessageAdded, msg);
188 }
189
190 /**
191 * @param {!SDK.LogModel.EntryAddedEvent} event
192 */
193 _logEntryAdded(event) {
194 var consoleMessage = new SDK.ConsoleMessage(
195 event.logModel.target(), event.entry.source, event.entry.level, event.en try.text, undefined, event.entry.url,
196 event.entry.lineNumber, undefined, event.entry.networkRequestId, undefin ed, event.entry.stackTrace,
197 event.entry.timestamp, undefined, undefined, event.entry.workerId);
198 this.addMessage(consoleMessage);
199 }
200
201 /**
202 * @param {!SDK.RuntimeModel} runtimeModel
203 * @param {!Common.Event} event
204 */
205 _exceptionThrown(runtimeModel, event) {
206 var exceptionWithTimestamp = /** @type {!SDK.RuntimeModel.ExceptionWithTimes tamp} */ (event.data);
207 var consoleMessage = SDK.ConsoleMessage.fromException(
208 runtimeModel.target(), exceptionWithTimestamp.details, undefined, except ionWithTimestamp.timestamp, undefined);
209 consoleMessage.setExceptionId(exceptionWithTimestamp.details.exceptionId);
210 this.addMessage(consoleMessage);
211 }
212
213 /**
214 * @param {!SDK.RuntimeModel} runtimeModel
215 * @param {!Common.Event} event
216 */
217 _exceptionRevoked(runtimeModel, event) {
218 var exceptionId = /** @type {number} */ (event.data);
219 var targetMap = this._messageByExceptionId.get(runtimeModel.target());
220 var exceptionMessage = targetMap ? targetMap.get(exceptionId) : null;
221 if (!exceptionMessage)
222 return;
223 this._errors--;
224 exceptionMessage.level = SDK.ConsoleMessage.MessageLevel.Info;
225 this.dispatchEventToListeners(SDK.ConsoleModel.Events.MessageUpdated, except ionMessage);
226 }
227
228 /**
229 * @param {!SDK.RuntimeModel} runtimeModel
230 * @param {!Common.Event} event
231 */
232 _consoleAPICalled(runtimeModel, event) {
233 var call = /** @type {!SDK.RuntimeModel.ConsoleAPICall} */ (event.data);
234 var level = SDK.ConsoleMessage.MessageLevel.Info;
235 if (call.type === SDK.ConsoleMessage.MessageType.Debug)
236 level = SDK.ConsoleMessage.MessageLevel.Verbose;
237 else if (call.type === SDK.ConsoleMessage.MessageType.Error || call.type === SDK.ConsoleMessage.MessageType.Assert)
238 level = SDK.ConsoleMessage.MessageLevel.Error;
239 else if (call.type === SDK.ConsoleMessage.MessageType.Warning)
240 level = SDK.ConsoleMessage.MessageLevel.Warning;
241 else if (call.type === SDK.ConsoleMessage.MessageType.Info || call.type === SDK.ConsoleMessage.MessageType.Log)
242 level = SDK.ConsoleMessage.MessageLevel.Info;
243 var message = '';
244 if (call.args.length && typeof call.args[0].value === 'string')
245 message = call.args[0].value;
246 else if (call.args.length && call.args[0].description)
247 message = call.args[0].description;
248 var callFrame = call.stackTrace && call.stackTrace.callFrames.length ? call. stackTrace.callFrames[0] : null;
249 var consoleMessage = new SDK.ConsoleMessage(
250 runtimeModel.target(), SDK.ConsoleMessage.MessageSource.ConsoleAPI, leve l,
251 /** @type {string} */ (message), call.type, callFrame ? callFrame.url : undefined,
252 callFrame ? callFrame.lineNumber : undefined, callFrame ? callFrame.colu mnNumber : undefined, undefined,
253 call.args, call.stackTrace, call.timestamp, call.executionContextId, und efined);
254 this.addMessage(consoleMessage);
255 }
256
257 /**
258 * @param {!Common.Event} event
259 */
260 _mainFrameStartedLoading(event) {
261 if (!Common.moduleSetting('preserveConsoleLog').get())
262 this._clear();
263 }
264
265 /**
266 * @param {!Common.Event} event
267 */
268 _mainFrameNavigated(event) {
269 if (Common.moduleSetting('preserveConsoleLog').get())
270 Common.console.log(Common.UIString('Navigated to %s', event.data.url));
271 }
272
273 /**
274 * @param {!SDK.CPUProfilerModel} cpuProfilerModel
275 * @param {!Common.Event} event
276 */
277 _consoleProfileStarted(cpuProfilerModel, event) {
278 var data = /** @type {!SDK.CPUProfilerModel.EventData} */ (event.data);
279 this._addConsoleProfileMessage(
280 cpuProfilerModel, SDK.ConsoleMessage.MessageType.Profile, data.scriptLoc ation,
281 Common.UIString('Profile \'%s\' started.', data.title));
282 }
283
284 /**
285 * @param {!SDK.CPUProfilerModel} cpuProfilerModel
286 * @param {!Common.Event} event
287 */
288 _consoleProfileFinished(cpuProfilerModel, event) {
289 var data = /** @type {!SDK.CPUProfilerModel.EventData} */ (event.data);
290 this._addConsoleProfileMessage(
291 cpuProfilerModel, SDK.ConsoleMessage.MessageType.ProfileEnd, data.script Location,
292 Common.UIString('Profile \'%s\' finished.', data.title));
293 }
294
295 /**
296 * @param {!SDK.CPUProfilerModel} cpuProfilerModel
297 * @param {string} type
298 * @param {!SDK.DebuggerModel.Location} scriptLocation
299 * @param {string} messageText
300 */
301 _addConsoleProfileMessage(cpuProfilerModel, type, scriptLocation, messageText) {
302 var stackTrace = [{
303 functionName: '',
304 scriptId: scriptLocation.scriptId,
305 url: scriptLocation.script() ? scriptLocation.script().contentURL() : '',
306 lineNumber: scriptLocation.lineNumber,
307 columnNumber: scriptLocation.columnNumber || 0
308 }];
309 this.addMessage(new SDK.ConsoleMessage(
310 cpuProfilerModel.target(), SDK.ConsoleMessage.MessageSource.ConsoleAPI, SDK.ConsoleMessage.MessageLevel.Info,
311 messageText, type, undefined, undefined, undefined, undefined, stackTrac e));
312 }
313
314 /**
315 * @param {!SDK.NetworkManager} networkManager
316 * @param {!Common.Event} event
317 */
318 _networkWarningGenerated(networkManager, event) {
319 var warning = /** @type {!SDK.NetworkManager.Warning} */ (event.data);
320 this.addMessage(new SDK.ConsoleMessage(
321 networkManager.target(), SDK.ConsoleMessage.MessageSource.Network, SDK.C onsoleMessage.MessageLevel.Warning,
322 warning.message, undefined, undefined, undefined, undefined, warning.req uestId));
323 }
324
325 /**
326 * @param {!SDK.ConsoleMessage} msg
327 */
328 _incrementErrorWarningCount(msg) {
329 if (msg.source === SDK.ConsoleMessage.MessageSource.Violation)
330 return;
331 switch (msg.level) {
332 case SDK.ConsoleMessage.MessageLevel.Warning:
333 this._warnings++;
334 break;
335 case SDK.ConsoleMessage.MessageLevel.Error:
336 this._errors++;
337 break;
338 }
339 }
340
341 /**
342 * @return {!Array.<!SDK.ConsoleMessage>}
343 */
344 messages() {
345 return this._messages;
346 }
347
348 requestClearMessages() {
349 for (var logModel of SDK.targetManager.models(SDK.LogModel))
350 logModel.requestClear();
351 for (var runtimeModel of SDK.targetManager.models(SDK.RuntimeModel))
352 runtimeModel.discardConsoleEntries();
353 this._clear();
354 }
355
356 _clear() {
357 this._messages = [];
358 this._messageByExceptionId.clear();
359 this._errors = 0;
360 this._warnings = 0;
361 this.dispatchEventToListeners(SDK.ConsoleModel.Events.ConsoleCleared);
362 }
363
364 /**
365 * @return {number}
366 */
367 errors() {
368 return this._errors;
369 }
370
371 /**
372 * @return {number}
373 */
374 warnings() {
375 return this._warnings;
376 }
377 };
378
379 /** @enum {symbol} */
380 SDK.ConsoleModel.Events = {
381 ConsoleCleared: Symbol('ConsoleCleared'),
382 MessageAdded: Symbol('MessageAdded'),
383 MessageUpdated: Symbol('MessageUpdated'),
384 CommandEvaluated: Symbol('CommandEvaluated')
385 };
386
387
388 /**
389 * @unrestricted
390 */
391 SDK.ConsoleMessage = class {
392 /**
393 * @param {?SDK.Target} target
394 * @param {string} source
395 * @param {?string} level
396 * @param {string} messageText
397 * @param {string=} type
398 * @param {?string=} url
399 * @param {number=} line
400 * @param {number=} column
401 * @param {!Protocol.Network.RequestId=} requestId
402 * @param {!Array.<!Protocol.Runtime.RemoteObject>=} parameters
403 * @param {!Protocol.Runtime.StackTrace=} stackTrace
404 * @param {number=} timestamp
405 * @param {!Protocol.Runtime.ExecutionContextId=} executionContextId
406 * @param {?string=} scriptId
407 * @param {?string=} workerId
408 */
409 constructor(
410 target,
411 source,
412 level,
413 messageText,
414 type,
415 url,
416 line,
417 column,
418 requestId,
419 parameters,
420 stackTrace,
421 timestamp,
422 executionContextId,
423 scriptId,
424 workerId) {
425 this._target = target;
426 this.source = source;
427 this.level = /** @type {?SDK.ConsoleMessage.MessageLevel} */ (level);
428 this.messageText = messageText;
429 this.type = type || SDK.ConsoleMessage.MessageType.Log;
430 /** @type {string|undefined} */
431 this.url = url || undefined;
432 /** @type {number} */
433 this.line = line || 0;
434 /** @type {number} */
435 this.column = column || 0;
436 this.parameters = parameters;
437 /** @type {!Protocol.Runtime.StackTrace|undefined} */
438 this.stackTrace = stackTrace;
439 this.timestamp = timestamp || Date.now();
440 this.executionContextId = executionContextId || 0;
441 this.scriptId = scriptId || null;
442 this.workerId = workerId || null;
443
444 var networkLog = target && SDK.NetworkLog.fromTarget(target);
445 this.request = (requestId && networkLog) ? networkLog.requestForId(requestId ) : null;
446
447 if (this.request) {
448 var initiator = this.request.initiator();
449 if (initiator) {
450 this.stackTrace = initiator.stack || undefined;
451 if (initiator.url) {
452 this.url = initiator.url;
453 this.line = initiator.lineNumber || 0;
454 }
455 }
456 }
457 }
458
459 /**
460 * @param {!SDK.ConsoleMessage} a
461 * @param {!SDK.ConsoleMessage} b
462 * @return {number}
463 */
464 static timestampComparator(a, b) {
465 return a.timestamp - b.timestamp;
466 }
467
468 /**
469 * @param {!SDK.Target} target
470 * @param {!Protocol.Runtime.ExceptionDetails} exceptionDetails
471 * @param {string=} messageType
472 * @param {number=} timestamp
473 * @param {string=} forceUrl
474 * @return {!SDK.ConsoleMessage}
475 */
476 static fromException(target, exceptionDetails, messageType, timestamp, forceUr l) {
477 return new SDK.ConsoleMessage(
478 target, SDK.ConsoleMessage.MessageSource.JS, SDK.ConsoleMessage.MessageL evel.Error,
479 SDK.RuntimeModel.simpleTextFromException(exceptionDetails), messageType, forceUrl || exceptionDetails.url,
480 exceptionDetails.lineNumber, exceptionDetails.columnNumber, undefined,
481 exceptionDetails.exception ?
482 [SDK.RemoteObject.fromLocalObject(exceptionDetails.text), exceptionD etails.exception] :
483 undefined,
484 exceptionDetails.stackTrace, timestamp, exceptionDetails.executionContex tId, exceptionDetails.scriptId);
485 }
486
487 /**
488 * @return {?SDK.Target}
489 */
490 target() {
491 return this._target;
492 }
493
494 /**
495 * @param {!SDK.ConsoleMessage} originatingMessage
496 */
497 setOriginatingMessage(originatingMessage) {
498 this._originatingConsoleMessage = originatingMessage;
499 this.executionContextId = originatingMessage.executionContextId;
500 }
501
502 /**
503 * @param {!Protocol.Runtime.ExecutionContextId} executionContextId
504 */
505 setExecutionContextId(executionContextId) {
506 this.executionContextId = executionContextId;
507 }
508
509 /**
510 * @param {number} exceptionId
511 */
512 setExceptionId(exceptionId) {
513 this._exceptionId = exceptionId;
514 }
515
516 /**
517 * @return {?SDK.ConsoleMessage}
518 */
519 originatingMessage() {
520 return this._originatingConsoleMessage;
521 }
522
523 /**
524 * @return {boolean}
525 */
526 isGroupMessage() {
527 return this.type === SDK.ConsoleMessage.MessageType.StartGroup ||
528 this.type === SDK.ConsoleMessage.MessageType.StartGroupCollapsed ||
529 this.type === SDK.ConsoleMessage.MessageType.EndGroup;
530 }
531
532 /**
533 * @return {boolean}
534 */
535 isGroupStartMessage() {
536 return this.type === SDK.ConsoleMessage.MessageType.StartGroup ||
537 this.type === SDK.ConsoleMessage.MessageType.StartGroupCollapsed;
538 }
539
540 /**
541 * @return {boolean}
542 */
543 isErrorOrWarning() {
544 return (
545 this.level === SDK.ConsoleMessage.MessageLevel.Warning || this.level === SDK.ConsoleMessage.MessageLevel.Error);
546 }
547
548 /**
549 * @param {?SDK.ConsoleMessage} msg
550 * @return {boolean}
551 */
552 isEqual(msg) {
553 if (!msg)
554 return false;
555
556 if (this._exceptionId || msg._exceptionId)
557 return false;
558
559 if (!this._isEqualStackTraces(this.stackTrace, msg.stackTrace))
560 return false;
561
562 if (this.parameters) {
563 if (!msg.parameters || this.parameters.length !== msg.parameters.length)
564 return false;
565
566 for (var i = 0; i < msg.parameters.length; ++i) {
567 // Never treat objects as equal - their properties might change over tim e.
568 if (this.parameters[i].type !== msg.parameters[i].type || msg.parameters [i].type === 'object' ||
569 this.parameters[i].value !== msg.parameters[i].value)
570 return false;
571 }
572 }
573
574 return (this.target() === msg.target()) && (this.source === msg.source) && ( this.type === msg.type) &&
575 (this.level === msg.level) && (this.line === msg.line) && (this.url === msg.url) &&
576 (this.messageText === msg.messageText) && (this.request === msg.request) &&
577 (this.executionContextId === msg.executionContextId);
578 }
579
580 /**
581 * @param {!Protocol.Runtime.StackTrace|undefined} stackTrace1
582 * @param {!Protocol.Runtime.StackTrace|undefined} stackTrace2
583 * @return {boolean}
584 */
585 _isEqualStackTraces(stackTrace1, stackTrace2) {
586 if (!stackTrace1 !== !stackTrace2)
587 return false;
588 if (!stackTrace1)
589 return true;
590 var callFrames1 = stackTrace1.callFrames;
591 var callFrames2 = stackTrace2.callFrames;
592 if (callFrames1.length !== callFrames2.length)
593 return false;
594 for (var i = 0, n = callFrames1.length; i < n; ++i) {
595 if (callFrames1[i].url !== callFrames2[i].url || callFrames1[i].functionNa me !== callFrames2[i].functionName ||
596 callFrames1[i].lineNumber !== callFrames2[i].lineNumber ||
597 callFrames1[i].columnNumber !== callFrames2[i].columnNumber)
598 return false;
599 }
600 return this._isEqualStackTraces(stackTrace1.parent, stackTrace2.parent);
601 }
602 };
603
604 // Note: Keep these constants in sync with the ones in Console.h
605 /**
606 * @enum {string}
607 */
608 SDK.ConsoleMessage.MessageSource = {
609 XML: 'xml',
610 JS: 'javascript',
611 Network: 'network',
612 ConsoleAPI: 'console-api',
613 Storage: 'storage',
614 AppCache: 'appcache',
615 Rendering: 'rendering',
616 CSS: 'css',
617 Security: 'security',
618 Deprecation: 'deprecation',
619 Worker: 'worker',
620 Violation: 'violation',
621 Intervention: 'intervention',
622 Other: 'other'
623 };
624
625 /**
626 * @enum {string}
627 */
628 SDK.ConsoleMessage.MessageType = {
629 Log: 'log',
630 Debug: 'debug',
631 Info: 'info',
632 Error: 'error',
633 Warning: 'warning',
634 Dir: 'dir',
635 DirXML: 'dirxml',
636 Table: 'table',
637 Trace: 'trace',
638 Clear: 'clear',
639 StartGroup: 'startGroup',
640 StartGroupCollapsed: 'startGroupCollapsed',
641 EndGroup: 'endGroup',
642 Assert: 'assert',
643 Result: 'result',
644 Profile: 'profile',
645 ProfileEnd: 'profileEnd',
646 Command: 'command'
647 };
648
649 /**
650 * @enum {string}
651 */
652 SDK.ConsoleMessage.MessageLevel = {
653 Verbose: 'verbose',
654 Info: 'info',
655 Warning: 'warning',
656 Error: 'error'
657 };
658
659 /**
660 * @param {!SDK.ConsoleMessage.MessageLevel} level
661 * @return {number}
662 */
663 SDK.ConsoleMessage.MessageLevel.ordinal = function(level) {
664 if (level === SDK.ConsoleMessage.MessageLevel.Verbose)
665 return 0;
666 if (level === SDK.ConsoleMessage.MessageLevel.Info)
667 return 1;
668 if (level === SDK.ConsoleMessage.MessageLevel.Warning)
669 return 2;
670 return 3;
671 };
672
673 SDK.ConsoleModel._events = Symbol('SDK.ConsoleModel.events');
674
675 /**
676 * @type {!SDK.ConsoleModel}
677 */
678 SDK.consoleModel;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698