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

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

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month 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
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
11 * copyright notice, this list of conditions and the following disclaimer 11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the 12 * in the documentation and/or other materials provided with the
13 * distribution. 13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its 14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from 15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission. 16 * this software without specific prior written permission.
17 * 17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 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. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30
31 /** 30 /**
32 * @constructor 31 * @unrestricted
33 * @extends {WebInspector.SDKModel}
34 * @param {!WebInspector.Target} target
35 * @param {?Protocol.LogAgent} logAgent
36 */ 32 */
37 WebInspector.ConsoleModel = function(target, logAgent) 33 WebInspector.ConsoleModel = class extends WebInspector.SDKModel {
38 { 34 /**
39 WebInspector.SDKModel.call(this, WebInspector.ConsoleModel, target); 35 * @param {!WebInspector.Target} target
36 * @param {?Protocol.LogAgent} logAgent
37 */
38 constructor(target, logAgent) {
39 super(WebInspector.ConsoleModel, target);
40 40
41 /** @type {!Array.<!WebInspector.ConsoleMessage>} */ 41 /** @type {!Array.<!WebInspector.ConsoleMessage>} */
42 this._messages = []; 42 this._messages = [];
43 /** @type {!Map<number, !WebInspector.ConsoleMessage>} */ 43 /** @type {!Map<number, !WebInspector.ConsoleMessage>} */
44 this._messageByExceptionId = new Map(); 44 this._messageByExceptionId = new Map();
45 this._warnings = 0; 45 this._warnings = 0;
46 this._errors = 0; 46 this._errors = 0;
47 this._revokedErrors = 0; 47 this._revokedErrors = 0;
48 this._logAgent = logAgent; 48 this._logAgent = logAgent;
49 if (this._logAgent) { 49 if (this._logAgent) {
50 target.registerLogDispatcher(new WebInspector.LogDispatcher(this)); 50 target.registerLogDispatcher(new WebInspector.LogDispatcher(this));
51 this._logAgent.enable(); 51 this._logAgent.enable();
52 } 52 }
53 }; 53 }
54 54
55 /** @enum {symbol} */ 55 /**
56 WebInspector.ConsoleModel.Events = { 56 * @param {!WebInspector.ExecutionContext} executionContext
57 ConsoleCleared: Symbol("ConsoleCleared"), 57 * @param {string} text
58 MessageAdded: Symbol("MessageAdded"), 58 * @param {boolean=} useCommandLineAPI
59 MessageUpdated: Symbol("MessageUpdated"), 59 */
60 CommandEvaluated: Symbol("CommandEvaluated") 60 static evaluateCommandInConsole(executionContext, text, useCommandLineAPI) {
61 };
62
63 WebInspector.ConsoleModel.prototype = {
64 /**
65 * @param {!WebInspector.ConsoleMessage} msg
66 */
67 addMessage: function(msg)
68 {
69 if (this._isBlacklisted(msg))
70 return;
71
72 if (msg.source === WebInspector.ConsoleMessage.MessageSource.Worker && m sg.target().subTargetsManager && msg.target().subTargetsManager.targetForId(msg. workerId))
73 return;
74
75 if (msg.source === WebInspector.ConsoleMessage.MessageSource.ConsoleAPI && msg.type === WebInspector.ConsoleMessage.MessageType.Clear)
76 this.clear();
77
78 if (msg.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError && msg._revokedExceptionId) {
79 var exceptionMessage = this._messageByExceptionId.get(msg._revokedEx ceptionId);
80 if (!exceptionMessage)
81 return;
82 this._errors--;
83 this._revokedErrors++;
84 exceptionMessage.level = WebInspector.ConsoleMessage.MessageLevel.Re vokedError;
85 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.Messa geUpdated, exceptionMessage);
86 return;
87 }
88
89 this._messages.push(msg);
90 if (msg._exceptionId)
91 this._messageByExceptionId.set(msg._exceptionId, msg);
92 this._incrementErrorWarningCount(msg);
93 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.MessageAd ded, msg);
94 },
95
96 /**
97 * @param {!WebInspector.ConsoleMessage} msg
98 */
99 _incrementErrorWarningCount: function(msg)
100 {
101 switch (msg.level) {
102 case WebInspector.ConsoleMessage.MessageLevel.Warning:
103 this._warnings++;
104 break;
105 case WebInspector.ConsoleMessage.MessageLevel.Error:
106 this._errors++;
107 break;
108 case WebInspector.ConsoleMessage.MessageLevel.RevokedError:
109 this._revokedErrors++;
110 break;
111 }
112 },
113
114 /**
115 * @param {!WebInspector.ConsoleMessage} msg
116 * @return {boolean}
117 */
118 _isBlacklisted: function(msg)
119 {
120 if (msg.source !== WebInspector.ConsoleMessage.MessageSource.Network || msg.level !== WebInspector.ConsoleMessage.MessageLevel.Error || !msg.url || !msg .url.startsWith("chrome-extension"))
121 return false;
122
123 // ignore Chromecast's cast_sender spam
124 if (msg.url.includes("://boadgeojelhgndaghljhdicfkmllpafd") || msg.url. includes("://dliochdbjfkdbacpmhlcpmleaejidimm") || msg.url.includes("://pkedcjk defgpdelpbcmbmeomcjbeemfm") || msg.url.includes("://fjhoaacokmgbjemoflkofnenfaie kifl") || msg.url.includes("://fmfcbgogabcbclcofgocippekhfcmgfj") || msg.url.inc ludes("://enhhojjnijigcajfphajepfemndkmdlo") || msg.url.includes("://ekpaaapppgp molpcldedioblbkmijaca"))
125 return true;
126
127 return false;
128 },
129
130 /**
131 * @return {!Array.<!WebInspector.ConsoleMessage>}
132 */
133 messages: function()
134 {
135 return this._messages;
136 },
137
138 requestClearMessages: function()
139 {
140 this._logAgent && this._logAgent.clear();
141 this.clear();
142 },
143
144 clear: function()
145 {
146 this._messages = [];
147 this._messageByExceptionId.clear();
148 this._errors = 0;
149 this._revokedErrors = 0;
150 this._warnings = 0;
151 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.ConsoleCl eared);
152 },
153
154 /**
155 * @return {number}
156 */
157 errors: function()
158 {
159 return this._errors;
160 },
161
162 /**
163 * @return {number}
164 */
165 revokedErrors: function()
166 {
167 return this._revokedErrors;
168 },
169
170 /**
171 * @return {number}
172 */
173 warnings: function()
174 {
175 return this._warnings;
176 },
177
178 __proto__: WebInspector.SDKModel.prototype
179 };
180
181 /**
182 * @param {!WebInspector.ExecutionContext} executionContext
183 * @param {string} text
184 * @param {boolean=} useCommandLineAPI
185 */
186 WebInspector.ConsoleModel.evaluateCommandInConsole = function(executionContext, text, useCommandLineAPI)
187 {
188 var target = executionContext.target(); 61 var target = executionContext.target();
189 var requestedText = text; 62 var requestedText = text;
190 63
191 var commandMessage = new WebInspector.ConsoleMessage(target, WebInspector.Co nsoleMessage.MessageSource.JS, null, text, WebInspector.ConsoleMessage.MessageTy pe.Command); 64 var commandMessage = new WebInspector.ConsoleMessage(
65 target, WebInspector.ConsoleMessage.MessageSource.JS, null, text,
66 WebInspector.ConsoleMessage.MessageType.Command);
192 commandMessage.setExecutionContextId(executionContext.id); 67 commandMessage.setExecutionContextId(executionContext.id);
193 target.consoleModel.addMessage(commandMessage); 68 target.consoleModel.addMessage(commandMessage);
194 69
195 /** 70 /**
196 * @param {?WebInspector.RemoteObject} result 71 * @param {?WebInspector.RemoteObject} result
197 * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails 72 * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
198 */ 73 */
199 function printResult(result, exceptionDetails) 74 function printResult(result, exceptionDetails) {
200 { 75 if (!result)
201 if (!result) 76 return;
202 return;
203 77
204 WebInspector.console.showPromise().then(reportUponEvaluation); 78 WebInspector.console.showPromise().then(reportUponEvaluation);
205 function reportUponEvaluation() 79 function reportUponEvaluation() {
206 { 80 target.consoleModel.dispatchEventToListeners(
207 target.consoleModel.dispatchEventToListeners(WebInspector.ConsoleMod el.Events.CommandEvaluated, {result: result, text: requestedText, commandMessage : commandMessage, exceptionDetails: exceptionDetails}); 81 WebInspector.ConsoleModel.Events.CommandEvaluated,
208 } 82 {result: result, text: requestedText, commandMessage: commandMessage , exceptionDetails: exceptionDetails});
83 }
209 } 84 }
210 85
211 /** 86 /**
212 * @param {string} code 87 * @param {string} code
213 * @suppress {uselessCode} 88 * @suppress {uselessCode}
214 * @return {boolean} 89 * @return {boolean}
215 */ 90 */
216 function looksLikeAnObjectLiteral(code) 91 function looksLikeAnObjectLiteral(code) {
217 { 92 // Only parenthesize what appears to be an object literal.
218 // Only parenthesize what appears to be an object literal. 93 if (!(/^\s*\{/.test(code) && /\}\s*$/.test(code)))
219 if (!(/^\s*\{/.test(code) && /\}\s*$/.test(code))) 94 return false;
220 return false;
221 95
222 try { 96 try {
223 // Check if the code can be interpreted as an expression. 97 // Check if the code can be interpreted as an expression.
224 Function("return " + code + ";"); 98 Function('return ' + code + ';');
225 99
226 // No syntax error! Does it work parenthesized? 100 // No syntax error! Does it work parenthesized?
227 Function("(" + code + ")"); 101 Function('(' + code + ')');
228 102
229 return true; 103 return true;
230 } catch (e) { 104 } catch (e) {
231 return false; 105 return false;
232 } 106 }
233 } 107 }
234 108
235 if (looksLikeAnObjectLiteral(text)) 109 if (looksLikeAnObjectLiteral(text))
236 text = "(" + text + ")"; 110 text = '(' + text + ')';
237 111
238 executionContext.evaluate(text, "console", !!useCommandLineAPI, false, false , true, true, printResult); 112 executionContext.evaluate(text, 'console', !!useCommandLineAPI, false, false , true, true, printResult);
239 WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.Console Evaluated); 113 WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.Console Evaluated);
114 }
115
116 /**
117 * @param {!WebInspector.ConsoleMessage} msg
118 */
119 addMessage(msg) {
120 if (this._isBlacklisted(msg))
121 return;
122
123 if (msg.source === WebInspector.ConsoleMessage.MessageSource.Worker && msg.t arget().subTargetsManager &&
124 msg.target().subTargetsManager.targetForId(msg.workerId))
125 return;
126
127 if (msg.source === WebInspector.ConsoleMessage.MessageSource.ConsoleAPI &&
128 msg.type === WebInspector.ConsoleMessage.MessageType.Clear)
129 this.clear();
130
131 if (msg.level === WebInspector.ConsoleMessage.MessageLevel.RevokedError && m sg._revokedExceptionId) {
132 var exceptionMessage = this._messageByExceptionId.get(msg._revokedExceptio nId);
133 if (!exceptionMessage)
134 return;
135 this._errors--;
136 this._revokedErrors++;
137 exceptionMessage.level = WebInspector.ConsoleMessage.MessageLevel.RevokedE rror;
138 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.MessageUpda ted, exceptionMessage);
139 return;
140 }
141
142 this._messages.push(msg);
143 if (msg._exceptionId)
144 this._messageByExceptionId.set(msg._exceptionId, msg);
145 this._incrementErrorWarningCount(msg);
146 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.MessageAdded, msg);
147 }
148
149 /**
150 * @param {!WebInspector.ConsoleMessage} msg
151 */
152 _incrementErrorWarningCount(msg) {
153 switch (msg.level) {
154 case WebInspector.ConsoleMessage.MessageLevel.Warning:
155 this._warnings++;
156 break;
157 case WebInspector.ConsoleMessage.MessageLevel.Error:
158 this._errors++;
159 break;
160 case WebInspector.ConsoleMessage.MessageLevel.RevokedError:
161 this._revokedErrors++;
162 break;
163 }
164 }
165
166 /**
167 * @param {!WebInspector.ConsoleMessage} msg
168 * @return {boolean}
169 */
170 _isBlacklisted(msg) {
171 if (msg.source !== WebInspector.ConsoleMessage.MessageSource.Network ||
172 msg.level !== WebInspector.ConsoleMessage.MessageLevel.Error || !msg.url ||
173 !msg.url.startsWith('chrome-extension'))
174 return false;
175
176 // ignore Chromecast's cast_sender spam
177 if (msg.url.includes('://boadgeojelhgndaghljhdicfkmllpafd') ||
178 msg.url.includes('://dliochdbjfkdbacpmhlcpmleaejidimm') ||
179 msg.url.includes('://pkedcjkdefgpdelpbcmbmeomcjbeemfm') ||
180 msg.url.includes('://fjhoaacokmgbjemoflkofnenfaiekifl') ||
181 msg.url.includes('://fmfcbgogabcbclcofgocippekhfcmgfj') ||
182 msg.url.includes('://enhhojjnijigcajfphajepfemndkmdlo') ||
183 msg.url.includes('://ekpaaapppgpmolpcldedioblbkmijaca'))
184 return true;
185
186 return false;
187 }
188
189 /**
190 * @return {!Array.<!WebInspector.ConsoleMessage>}
191 */
192 messages() {
193 return this._messages;
194 }
195
196 requestClearMessages() {
197 this._logAgent && this._logAgent.clear();
198 this.clear();
199 }
200
201 clear() {
202 this._messages = [];
203 this._messageByExceptionId.clear();
204 this._errors = 0;
205 this._revokedErrors = 0;
206 this._warnings = 0;
207 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.ConsoleCleare d);
208 }
209
210 /**
211 * @return {number}
212 */
213 errors() {
214 return this._errors;
215 }
216
217 /**
218 * @return {number}
219 */
220 revokedErrors() {
221 return this._revokedErrors;
222 }
223
224 /**
225 * @return {number}
226 */
227 warnings() {
228 return this._warnings;
229 }
240 }; 230 };
241 231
232 /** @enum {symbol} */
233 WebInspector.ConsoleModel.Events = {
234 ConsoleCleared: Symbol('ConsoleCleared'),
235 MessageAdded: Symbol('MessageAdded'),
236 MessageUpdated: Symbol('MessageUpdated'),
237 CommandEvaluated: Symbol('CommandEvaluated')
238 };
239
240
242 /** 241 /**
243 * @constructor 242 * @unrestricted
244 * @param {?WebInspector.Target} target
245 * @param {string} source
246 * @param {?string} level
247 * @param {string} messageText
248 * @param {string=} type
249 * @param {?string=} url
250 * @param {number=} line
251 * @param {number=} column
252 * @param {!NetworkAgent.RequestId=} requestId
253 * @param {!Array.<!RuntimeAgent.RemoteObject>=} parameters
254 * @param {!RuntimeAgent.StackTrace=} stackTrace
255 * @param {number=} timestamp
256 * @param {!RuntimeAgent.ExecutionContextId=} executionContextId
257 * @param {?string=} scriptId
258 * @param {?string=} workerId
259 */ 243 */
260 WebInspector.ConsoleMessage = function(target, source, level, messageText, type, url, line, column, requestId, parameters, stackTrace, timestamp, executionConte xtId, scriptId, workerId) 244 WebInspector.ConsoleMessage = class {
261 { 245 /**
246 * @param {?WebInspector.Target} target
247 * @param {string} source
248 * @param {?string} level
249 * @param {string} messageText
250 * @param {string=} type
251 * @param {?string=} url
252 * @param {number=} line
253 * @param {number=} column
254 * @param {!NetworkAgent.RequestId=} requestId
255 * @param {!Array.<!RuntimeAgent.RemoteObject>=} parameters
256 * @param {!RuntimeAgent.StackTrace=} stackTrace
257 * @param {number=} timestamp
258 * @param {!RuntimeAgent.ExecutionContextId=} executionContextId
259 * @param {?string=} scriptId
260 * @param {?string=} workerId
261 */
262 constructor(
263 target,
264 source,
265 level,
266 messageText,
267 type,
268 url,
269 line,
270 column,
271 requestId,
272 parameters,
273 stackTrace,
274 timestamp,
275 executionContextId,
276 scriptId,
277 workerId) {
262 this._target = target; 278 this._target = target;
263 this.source = source; 279 this.source = source;
264 this.level = level; 280 this.level = level;
265 this.messageText = messageText; 281 this.messageText = messageText;
266 this.type = type || WebInspector.ConsoleMessage.MessageType.Log; 282 this.type = type || WebInspector.ConsoleMessage.MessageType.Log;
267 /** @type {string|undefined} */ 283 /** @type {string|undefined} */
268 this.url = url || undefined; 284 this.url = url || undefined;
269 /** @type {number} */ 285 /** @type {number} */
270 this.line = line || 0; 286 this.line = line || 0;
271 /** @type {number} */ 287 /** @type {number} */
272 this.column = column || 0; 288 this.column = column || 0;
273 this.parameters = parameters; 289 this.parameters = parameters;
274 /** @type {!RuntimeAgent.StackTrace|undefined} */ 290 /** @type {!RuntimeAgent.StackTrace|undefined} */
275 this.stackTrace = stackTrace; 291 this.stackTrace = stackTrace;
276 this.timestamp = timestamp || Date.now(); 292 this.timestamp = timestamp || Date.now();
277 this.executionContextId = executionContextId || 0; 293 this.executionContextId = executionContextId || 0;
278 this.scriptId = scriptId || null; 294 this.scriptId = scriptId || null;
279 this.workerId = workerId || null; 295 this.workerId = workerId || null;
280 296
281 var networkLog = target && WebInspector.NetworkLog.fromTarget(target); 297 var networkLog = target && WebInspector.NetworkLog.fromTarget(target);
282 this.request = (requestId && networkLog) ? networkLog.requestForId(requestId ) : null; 298 this.request = (requestId && networkLog) ? networkLog.requestForId(requestId ) : null;
283 299
284 if (this.request) { 300 if (this.request) {
285 var initiator = this.request.initiator(); 301 var initiator = this.request.initiator();
286 if (initiator) { 302 if (initiator) {
287 this.stackTrace = initiator.stack || undefined; 303 this.stackTrace = initiator.stack || undefined;
288 if (initiator.url) { 304 if (initiator.url) {
289 this.url = initiator.url; 305 this.url = initiator.url;
290 this.line = initiator.lineNumber || 0; 306 this.line = initiator.lineNumber || 0;
291 }
292 } 307 }
308 }
293 } 309 }
294 }; 310 }
295 311
296 WebInspector.ConsoleMessage.prototype = { 312 /**
297 /** 313 * @param {!WebInspector.ConsoleMessage} a
298 * @return {?WebInspector.Target} 314 * @param {!WebInspector.ConsoleMessage} b
299 */ 315 * @return {number}
300 target: function() 316 */
301 { 317 static timestampComparator(a, b) {
302 return this._target; 318 return a.timestamp - b.timestamp;
303 }, 319 }
304 320
305 /** 321 /**
306 * @param {!WebInspector.ConsoleMessage} originatingMessage 322 * @param {!RuntimeAgent.ExceptionDetails} exceptionDetails
307 */ 323 * @return {string}
308 setOriginatingMessage: function(originatingMessage) 324 */
309 { 325 static simpleTextFromException(exceptionDetails) {
310 this._originatingConsoleMessage = originatingMessage; 326 var text = exceptionDetails.text;
311 this.executionContextId = originatingMessage.executionContextId; 327 if (exceptionDetails.exception && exceptionDetails.exception.description) {
312 }, 328 var description = exceptionDetails.exception.description;
329 if (description.indexOf('\n') !== -1)
330 description = description.substring(0, description.indexOf('\n'));
331 text += ' ' + description;
332 }
333 return text;
334 }
313 335
314 /** 336 /**
315 * @param {!RuntimeAgent.ExecutionContextId} executionContextId 337 * @param {!WebInspector.Target} target
316 */ 338 * @param {!RuntimeAgent.ExceptionDetails} exceptionDetails
317 setExecutionContextId: function(executionContextId) 339 * @param {string=} messageType
318 { 340 * @param {number=} timestamp
319 this.executionContextId = executionContextId; 341 * @param {string=} forceUrl
320 }, 342 * @return {!WebInspector.ConsoleMessage}
343 */
344 static fromException(target, exceptionDetails, messageType, timestamp, forceUr l) {
345 return new WebInspector.ConsoleMessage(
346 target, WebInspector.ConsoleMessage.MessageSource.JS, WebInspector.Conso leMessage.MessageLevel.Error,
347 WebInspector.ConsoleMessage.simpleTextFromException(exceptionDetails), m essageType,
348 forceUrl || exceptionDetails.url, exceptionDetails.lineNumber, exception Details.columnNumber, undefined,
349 exceptionDetails.exception ?
350 [WebInspector.RemoteObject.fromLocalObject(exceptionDetails.text), e xceptionDetails.exception] :
351 undefined,
352 exceptionDetails.stackTrace, timestamp, exceptionDetails.executionContex tId, exceptionDetails.scriptId);
353 }
321 354
322 /** 355 /**
323 * @param {number} exceptionId 356 * @return {?WebInspector.Target}
324 */ 357 */
325 setExceptionId: function(exceptionId) 358 target() {
326 { 359 return this._target;
327 this._exceptionId = exceptionId; 360 }
328 },
329 361
330 /** 362 /**
331 * @param {number} revokedExceptionId 363 * @param {!WebInspector.ConsoleMessage} originatingMessage
332 */ 364 */
333 setRevokedExceptionId: function(revokedExceptionId) 365 setOriginatingMessage(originatingMessage) {
334 { 366 this._originatingConsoleMessage = originatingMessage;
335 this._revokedExceptionId = revokedExceptionId; 367 this.executionContextId = originatingMessage.executionContextId;
336 }, 368 }
337 369
338 /** 370 /**
339 * @return {?WebInspector.ConsoleMessage} 371 * @param {!RuntimeAgent.ExecutionContextId} executionContextId
340 */ 372 */
341 originatingMessage: function() 373 setExecutionContextId(executionContextId) {
342 { 374 this.executionContextId = executionContextId;
343 return this._originatingConsoleMessage; 375 }
344 },
345 376
346 /** 377 /**
347 * @return {boolean} 378 * @param {number} exceptionId
348 */ 379 */
349 isGroupMessage: function() 380 setExceptionId(exceptionId) {
350 { 381 this._exceptionId = exceptionId;
351 return this.type === WebInspector.ConsoleMessage.MessageType.StartGroup || 382 }
352 this.type === WebInspector.ConsoleMessage.MessageType.StartGroupColl apsed ||
353 this.type === WebInspector.ConsoleMessage.MessageType.EndGroup;
354 },
355 383
356 /** 384 /**
357 * @return {boolean} 385 * @param {number} revokedExceptionId
358 */ 386 */
359 isGroupStartMessage: function() 387 setRevokedExceptionId(revokedExceptionId) {
360 { 388 this._revokedExceptionId = revokedExceptionId;
361 return this.type === WebInspector.ConsoleMessage.MessageType.StartGroup || 389 }
362 this.type === WebInspector.ConsoleMessage.MessageType.StartGroupColl apsed;
363 },
364 390
365 /** 391 /**
366 * @return {boolean} 392 * @return {?WebInspector.ConsoleMessage}
367 */ 393 */
368 isErrorOrWarning: function() 394 originatingMessage() {
369 { 395 return this._originatingConsoleMessage;
370 return (this.level === WebInspector.ConsoleMessage.MessageLevel.Warning || this.level === WebInspector.ConsoleMessage.MessageLevel.Error); 396 }
371 },
372 397
373 /** 398 /**
374 * @param {?WebInspector.ConsoleMessage} msg 399 * @return {boolean}
375 * @return {boolean} 400 */
376 */ 401 isGroupMessage() {
377 isEqual: function(msg) 402 return this.type === WebInspector.ConsoleMessage.MessageType.StartGroup ||
378 { 403 this.type === WebInspector.ConsoleMessage.MessageType.StartGroupCollapse d ||
379 if (!msg) 404 this.type === WebInspector.ConsoleMessage.MessageType.EndGroup;
380 return false; 405 }
381 406
382 if (this._exceptionId || msg._exceptionId) 407 /**
383 return false; 408 * @return {boolean}
384 if (this._revokedExceptionId || msg._revokedExceptionId) 409 */
385 return false; 410 isGroupStartMessage() {
411 return this.type === WebInspector.ConsoleMessage.MessageType.StartGroup ||
412 this.type === WebInspector.ConsoleMessage.MessageType.StartGroupCollapse d;
413 }
386 414
387 if (!this._isEqualStackTraces(this.stackTrace, msg.stackTrace)) 415 /**
388 return false; 416 * @return {boolean}
417 */
418 isErrorOrWarning() {
419 return (
420 this.level === WebInspector.ConsoleMessage.MessageLevel.Warning ||
421 this.level === WebInspector.ConsoleMessage.MessageLevel.Error);
422 }
389 423
390 if (this.parameters) { 424 /**
391 if (!msg.parameters || this.parameters.length !== msg.parameters.len gth) 425 * @param {?WebInspector.ConsoleMessage} msg
392 return false; 426 * @return {boolean}
427 */
428 isEqual(msg) {
429 if (!msg)
430 return false;
393 431
394 for (var i = 0; i < msg.parameters.length; ++i) { 432 if (this._exceptionId || msg._exceptionId)
395 // Never treat objects as equal - their properties might change over time. 433 return false;
396 if (this.parameters[i].type !== msg.parameters[i].type || msg.pa rameters[i].type === "object" || this.parameters[i].value !== msg.parameters[i]. value) 434 if (this._revokedExceptionId || msg._revokedExceptionId)
397 return false; 435 return false;
398 }
399 }
400 436
401 return (this.target() === msg.target()) 437 if (!this._isEqualStackTraces(this.stackTrace, msg.stackTrace))
402 && (this.source === msg.source) 438 return false;
403 && (this.type === msg.type)
404 && (this.level === msg.level)
405 && (this.line === msg.line)
406 && (this.url === msg.url)
407 && (this.messageText === msg.messageText)
408 && (this.request === msg.request)
409 && (this.executionContextId === msg.executionContextId)
410 && (this.scriptId === msg.scriptId);
411 },
412 439
413 /** 440 if (this.parameters) {
414 * @param {!RuntimeAgent.StackTrace|undefined} stackTrace1 441 if (!msg.parameters || this.parameters.length !== msg.parameters.length)
415 * @param {!RuntimeAgent.StackTrace|undefined} stackTrace2 442 return false;
416 * @return {boolean} 443
417 */ 444 for (var i = 0; i < msg.parameters.length; ++i) {
418 _isEqualStackTraces: function(stackTrace1, stackTrace2) 445 // Never treat objects as equal - their properties might change over tim e.
419 { 446 if (this.parameters[i].type !== msg.parameters[i].type || msg.parameters [i].type === 'object' ||
420 if (!stackTrace1 !== !stackTrace2) 447 this.parameters[i].value !== msg.parameters[i].value)
421 return false; 448 return false;
422 if (!stackTrace1) 449 }
423 return true;
424 var callFrames1 = stackTrace1.callFrames;
425 var callFrames2 = stackTrace2.callFrames;
426 if (callFrames1.length !== callFrames2.length)
427 return false;
428 for (var i = 0, n = callFrames1.length; i < n; ++i) {
429 if (callFrames1[i].url !== callFrames2[i].url ||
430 callFrames1[i].functionName !== callFrames2[i].functionName ||
431 callFrames1[i].lineNumber !== callFrames2[i].lineNumber ||
432 callFrames1[i].columnNumber !== callFrames2[i].columnNumber)
433 return false;
434 }
435 return this._isEqualStackTraces(stackTrace1.parent, stackTrace2.parent);
436 } 450 }
451
452 return (this.target() === msg.target()) && (this.source === msg.source) && ( this.type === msg.type) &&
453 (this.level === msg.level) && (this.line === msg.line) && (this.url === msg.url) &&
454 (this.messageText === msg.messageText) && (this.request === msg.request) &&
455 (this.executionContextId === msg.executionContextId) && (this.scriptId = == msg.scriptId);
456 }
457
458 /**
459 * @param {!RuntimeAgent.StackTrace|undefined} stackTrace1
460 * @param {!RuntimeAgent.StackTrace|undefined} stackTrace2
461 * @return {boolean}
462 */
463 _isEqualStackTraces(stackTrace1, stackTrace2) {
464 if (!stackTrace1 !== !stackTrace2)
465 return false;
466 if (!stackTrace1)
467 return true;
468 var callFrames1 = stackTrace1.callFrames;
469 var callFrames2 = stackTrace2.callFrames;
470 if (callFrames1.length !== callFrames2.length)
471 return false;
472 for (var i = 0, n = callFrames1.length; i < n; ++i) {
473 if (callFrames1[i].url !== callFrames2[i].url || callFrames1[i].functionNa me !== callFrames2[i].functionName ||
474 callFrames1[i].lineNumber !== callFrames2[i].lineNumber ||
475 callFrames1[i].columnNumber !== callFrames2[i].columnNumber)
476 return false;
477 }
478 return this._isEqualStackTraces(stackTrace1.parent, stackTrace2.parent);
479 }
437 }; 480 };
438 481
439 // Note: Keep these constants in sync with the ones in Console.h 482 // Note: Keep these constants in sync with the ones in Console.h
440 /** 483 /**
441 * @enum {string} 484 * @enum {string}
442 */ 485 */
443 WebInspector.ConsoleMessage.MessageSource = { 486 WebInspector.ConsoleMessage.MessageSource = {
444 XML: "xml", 487 XML: 'xml',
445 JS: "javascript", 488 JS: 'javascript',
446 Network: "network", 489 Network: 'network',
447 ConsoleAPI: "console-api", 490 ConsoleAPI: 'console-api',
448 Storage: "storage", 491 Storage: 'storage',
449 AppCache: "appcache", 492 AppCache: 'appcache',
450 Rendering: "rendering", 493 Rendering: 'rendering',
451 CSS: "css", 494 CSS: 'css',
452 Security: "security", 495 Security: 'security',
453 Other: "other", 496 Other: 'other',
454 Deprecation: "deprecation", 497 Deprecation: 'deprecation',
455 Worker: "worker" 498 Worker: 'worker'
456 }; 499 };
457 500
458 /** 501 /**
459 * @enum {string} 502 * @enum {string}
460 */ 503 */
461 WebInspector.ConsoleMessage.MessageType = { 504 WebInspector.ConsoleMessage.MessageType = {
462 Log: "log", 505 Log: 'log',
463 Debug: "debug", 506 Debug: 'debug',
464 Info: "info", 507 Info: 'info',
465 Error: "error", 508 Error: 'error',
466 Warning: "warning", 509 Warning: 'warning',
467 Dir: "dir", 510 Dir: 'dir',
468 DirXML: "dirxml", 511 DirXML: 'dirxml',
469 Table: "table", 512 Table: 'table',
470 Trace: "trace", 513 Trace: 'trace',
471 Clear: "clear", 514 Clear: 'clear',
472 StartGroup: "startGroup", 515 StartGroup: 'startGroup',
473 StartGroupCollapsed: "startGroupCollapsed", 516 StartGroupCollapsed: 'startGroupCollapsed',
474 EndGroup: "endGroup", 517 EndGroup: 'endGroup',
475 Assert: "assert", 518 Assert: 'assert',
476 Result: "result", 519 Result: 'result',
477 Profile: "profile", 520 Profile: 'profile',
478 ProfileEnd: "profileEnd", 521 ProfileEnd: 'profileEnd',
479 Command: "command" 522 Command: 'command'
480 }; 523 };
481 524
482 /** 525 /**
483 * @enum {string} 526 * @enum {string}
484 */ 527 */
485 WebInspector.ConsoleMessage.MessageLevel = { 528 WebInspector.ConsoleMessage.MessageLevel = {
486 Log: "log", 529 Log: 'log',
487 Info: "info", 530 Info: 'info',
488 Warning: "warning", 531 Warning: 'warning',
489 Error: "error", 532 Error: 'error',
490 Debug: "debug", 533 Debug: 'debug',
491 RevokedError: "revokedError" // This is frontend-only level, used to put ex ceptions to console. 534 RevokedError: 'revokedError' // This is frontend-only level, used to put exce ptions to console.
535 };
536
537
538 /**
539 * @implements {LogAgent.Dispatcher}
540 * @unrestricted
541 */
542 WebInspector.LogDispatcher = class {
543 /**
544 * @param {!WebInspector.ConsoleModel} console
545 */
546 constructor(console) {
547 this._console = console;
548 }
549
550 /**
551 * @override
552 * @param {!LogAgent.LogEntry} payload
553 */
554 entryAdded(payload) {
555 var consoleMessage = new WebInspector.ConsoleMessage(
556 this._console.target(), payload.source, payload.level, payload.text, und efined, payload.url, payload.lineNumber,
557 undefined, payload.networkRequestId, undefined, payload.stackTrace, payl oad.timestamp, undefined, undefined,
558 payload.workerId);
559 this._console.addMessage(consoleMessage);
560 }
492 }; 561 };
493 562
494 /** 563 /**
495 * @param {!WebInspector.ConsoleMessage} a 564 * @implements {WebInspector.TargetManager.Observer}
496 * @param {!WebInspector.ConsoleMessage} b 565 * @unrestricted
497 * @return {number}
498 */ 566 */
499 WebInspector.ConsoleMessage.timestampComparator = function(a, b) 567 WebInspector.MultitargetConsoleModel = class extends WebInspector.Object {
500 { 568 constructor() {
501 return a.timestamp - b.timestamp; 569 super();
570 WebInspector.targetManager.observeTargets(this);
571 WebInspector.targetManager.addModelListener(
572 WebInspector.ConsoleModel, WebInspector.ConsoleModel.Events.MessageAdded , this._consoleMessageAdded, this);
573 WebInspector.targetManager.addModelListener(
574 WebInspector.ConsoleModel, WebInspector.ConsoleModel.Events.MessageUpdat ed, this._consoleMessageUpdated, this);
575 WebInspector.targetManager.addModelListener(
576 WebInspector.ConsoleModel, WebInspector.ConsoleModel.Events.CommandEvalu ated, this._commandEvaluated, this);
577 }
578
579 /**
580 * @override
581 * @param {!WebInspector.Target} target
582 */
583 targetAdded(target) {
584 if (!this._mainTarget) {
585 this._mainTarget = target;
586 target.consoleModel.addEventListener(WebInspector.ConsoleModel.Events.Cons oleCleared, this._consoleCleared, this);
587 }
588 }
589
590 /**
591 * @override
592 * @param {!WebInspector.Target} target
593 */
594 targetRemoved(target) {
595 if (this._mainTarget === target) {
596 delete this._mainTarget;
597 target.consoleModel.removeEventListener(
598 WebInspector.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this);
599 }
600 }
601
602 /**
603 * @return {!Array.<!WebInspector.ConsoleMessage>}
604 */
605 messages() {
606 var targets = WebInspector.targetManager.targets();
607 var result = [];
608 for (var i = 0; i < targets.length; ++i)
609 result = result.concat(targets[i].consoleModel.messages());
610 return result;
611 }
612
613 _consoleCleared() {
614 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.ConsoleCleare d);
615 }
616
617 /**
618 * @param {!WebInspector.Event} event
619 */
620 _consoleMessageAdded(event) {
621 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.MessageAdded, event.data);
622 }
623
624 /**
625 * @param {!WebInspector.Event} event
626 */
627 _consoleMessageUpdated(event) {
628 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.MessageUpdate d, event.data);
629 }
630
631 /**
632 * @param {!WebInspector.Event} event
633 */
634 _commandEvaluated(event) {
635 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.CommandEvalua ted, event.data);
636 }
502 }; 637 };
503 638
504 /** 639 /**
505 * @param {!RuntimeAgent.ExceptionDetails} exceptionDetails
506 * @return {string}
507 */
508 WebInspector.ConsoleMessage.simpleTextFromException = function(exceptionDetails)
509 {
510 var text = exceptionDetails.text;
511 if (exceptionDetails.exception && exceptionDetails.exception.description) {
512 var description = exceptionDetails.exception.description;
513 if (description.indexOf("\n") !== -1)
514 description = description.substring(0, description.indexOf("\n"));
515 text += " " + description;
516 }
517 return text;
518 };
519
520 /**
521 * @param {!WebInspector.Target} target
522 * @param {!RuntimeAgent.ExceptionDetails} exceptionDetails
523 * @param {string=} messageType
524 * @param {number=} timestamp
525 * @param {string=} forceUrl
526 * @return {!WebInspector.ConsoleMessage}
527 */
528 WebInspector.ConsoleMessage.fromException = function(target, exceptionDetails, m essageType, timestamp, forceUrl)
529 {
530 return new WebInspector.ConsoleMessage(
531 target,
532 WebInspector.ConsoleMessage.MessageSource.JS,
533 WebInspector.ConsoleMessage.MessageLevel.Error,
534 WebInspector.ConsoleMessage.simpleTextFromException(exceptionDetails),
535 messageType,
536 forceUrl || exceptionDetails.url,
537 exceptionDetails.lineNumber,
538 exceptionDetails.columnNumber,
539 undefined,
540 exceptionDetails.exception ? [WebInspector.RemoteObject.fromLocalObject( exceptionDetails.text), exceptionDetails.exception] : undefined,
541 exceptionDetails.stackTrace,
542 timestamp,
543 exceptionDetails.executionContextId,
544 exceptionDetails.scriptId);
545 };
546
547 /**
548 * @constructor
549 * @implements {LogAgent.Dispatcher}
550 * @param {!WebInspector.ConsoleModel} console
551 */
552 WebInspector.LogDispatcher = function(console)
553 {
554 this._console = console;
555 };
556
557 WebInspector.LogDispatcher.prototype = {
558 /**
559 * @override
560 * @param {!LogAgent.LogEntry} payload
561 */
562 entryAdded: function(payload)
563 {
564 var consoleMessage = new WebInspector.ConsoleMessage(
565 this._console.target(),
566 payload.source,
567 payload.level,
568 payload.text,
569 undefined,
570 payload.url,
571 payload.lineNumber,
572 undefined,
573 payload.networkRequestId,
574 undefined,
575 payload.stackTrace,
576 payload.timestamp,
577 undefined,
578 undefined,
579 payload.workerId);
580 this._console.addMessage(consoleMessage);
581 }
582 };
583
584 /**
585 * @constructor
586 * @extends {WebInspector.Object}
587 * @implements {WebInspector.TargetManager.Observer}
588 */
589 WebInspector.MultitargetConsoleModel = function()
590 {
591 WebInspector.targetManager.observeTargets(this);
592 WebInspector.targetManager.addModelListener(WebInspector.ConsoleModel, WebIn spector.ConsoleModel.Events.MessageAdded, this._consoleMessageAdded, this);
593 WebInspector.targetManager.addModelListener(WebInspector.ConsoleModel, WebIn spector.ConsoleModel.Events.MessageUpdated, this._consoleMessageUpdated, this);
594 WebInspector.targetManager.addModelListener(WebInspector.ConsoleModel, WebIn spector.ConsoleModel.Events.CommandEvaluated, this._commandEvaluated, this);
595 };
596
597 WebInspector.MultitargetConsoleModel.prototype = {
598 /**
599 * @override
600 * @param {!WebInspector.Target} target
601 */
602 targetAdded: function(target)
603 {
604 if (!this._mainTarget) {
605 this._mainTarget = target;
606 target.consoleModel.addEventListener(WebInspector.ConsoleModel.Event s.ConsoleCleared, this._consoleCleared, this);
607 }
608 },
609
610 /**
611 * @override
612 * @param {!WebInspector.Target} target
613 */
614 targetRemoved: function(target)
615 {
616 if (this._mainTarget === target) {
617 delete this._mainTarget;
618 target.consoleModel.removeEventListener(WebInspector.ConsoleModel.Ev ents.ConsoleCleared, this._consoleCleared, this);
619 }
620 },
621
622 /**
623 * @return {!Array.<!WebInspector.ConsoleMessage>}
624 */
625 messages: function()
626 {
627 var targets = WebInspector.targetManager.targets();
628 var result = [];
629 for (var i = 0; i < targets.length; ++i)
630 result = result.concat(targets[i].consoleModel.messages());
631 return result;
632 },
633
634 _consoleCleared: function()
635 {
636 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.ConsoleCl eared);
637 },
638
639 /**
640 * @param {!WebInspector.Event} event
641 */
642 _consoleMessageAdded: function(event)
643 {
644 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.MessageAd ded, event.data);
645 },
646
647 /**
648 * @param {!WebInspector.Event} event
649 */
650 _consoleMessageUpdated: function(event)
651 {
652 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.MessageUp dated, event.data);
653 },
654
655 /**
656 * @param {!WebInspector.Event} event
657 */
658 _commandEvaluated: function(event)
659 {
660 this.dispatchEventToListeners(WebInspector.ConsoleModel.Events.CommandEv aluated, event.data);
661 },
662
663 __proto__: WebInspector.Object.prototype
664 };
665
666 /**
667 * @type {!WebInspector.MultitargetConsoleModel} 640 * @type {!WebInspector.MultitargetConsoleModel}
668 */ 641 */
669 WebInspector.multitargetConsoleModel; 642 WebInspector.multitargetConsoleModel;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698