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

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

Issue 2751173003: [DevTools] Turn ConsoleModel into a singleton (Closed)
Patch Set: rebased 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
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 11 matching lines...) Expand all
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 30
31 /** 31 /**
32 * @unrestricted 32 * @implements {SDK.TargetManager.Observer}
33 */ 33 */
34 SDK.ConsoleModel = class extends Common.Object { 34 SDK.ConsoleModel = class extends Common.Object {
35 /** 35 constructor() {
36 * @param {!SDK.Target} target
37 */
38 constructor(target) {
39 super(); 36 super();
40 this._target = target;
41 37
42 /** @type {!Array.<!SDK.ConsoleMessage>} */ 38 /** @type {!Array.<!SDK.ConsoleMessage>} */
43 this._messages = []; 39 this._messages = [];
44 /** @type {!Map<number, !SDK.ConsoleMessage>} */ 40 /** @type {!Map<!SDK.Target, !Map<number, !SDK.ConsoleMessage>>} */
45 this._messageByExceptionId = new Map(); 41 this._messageByExceptionId = new Map();
46 this._warnings = 0; 42 this._warnings = 0;
47 this._errors = 0; 43 this._errors = 0;
48 44
45 SDK.targetManager.observeTargets(this);
46 }
47
48 /**
49 * @override
50 * @param {!SDK.Target} target
51 */
52 targetAdded(target) {
53 var eventListeners = [];
54
49 var logModel = target.model(SDK.LogModel); 55 var logModel = target.model(SDK.LogModel);
50 if (logModel) 56 if (logModel)
51 logModel.on(SDK.LogModel.EntryAddedEvent, this._logEntryAdded, this); 57 eventListeners.push(logModel.on(SDK.LogModel.EntryAddedEvent, this._logEnt ryAdded, this));
52 58
53 var cpuProfilerModel = target.model(SDK.CPUProfilerModel); 59 var cpuProfilerModel = target.model(SDK.CPUProfilerModel);
54 if (cpuProfilerModel) { 60 if (cpuProfilerModel) {
55 cpuProfilerModel.addEventListener( 61 eventListeners.push(cpuProfilerModel.addEventListener(
56 SDK.CPUProfilerModel.Events.ConsoleProfileStarted, this._consoleProfil eStarted, this); 62 SDK.CPUProfilerModel.Events.ConsoleProfileStarted, this._consoleProfil eStarted.bind(this, cpuProfilerModel)));
57 cpuProfilerModel.addEventListener( 63 eventListeners.push(cpuProfilerModel.addEventListener(
58 SDK.CPUProfilerModel.Events.ConsoleProfileFinished, this._consoleProfi leFinished, this); 64 SDK.CPUProfilerModel.Events.ConsoleProfileFinished,
65 this._consoleProfileFinished.bind(this, cpuProfilerModel)));
59 } 66 }
60 67
61 var resourceTreeModel = target.model(SDK.ResourceTreeModel); 68 var resourceTreeModel = target.model(SDK.ResourceTreeModel);
62 if (resourceTreeModel) { 69 if (resourceTreeModel) {
63 resourceTreeModel.addEventListener( 70 eventListeners.push(resourceTreeModel.addEventListener(
64 SDK.ResourceTreeModel.Events.MainFrameStartedLoading, this._mainFrameS tartedLoading, this); 71 SDK.ResourceTreeModel.Events.MainFrameStartedLoading, this._mainFrameS tartedLoading, this));
65 resourceTreeModel.addEventListener( 72 eventListeners.push(resourceTreeModel.addEventListener(
66 SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNaviga ted, this); 73 SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNaviga ted, this));
67 } 74 }
68 75
69 var runtimeModel = target.model(SDK.RuntimeModel); 76 var runtimeModel = target.model(SDK.RuntimeModel);
70 if (runtimeModel) { 77 if (runtimeModel) {
71 runtimeModel.addEventListener(SDK.RuntimeModel.Events.ExceptionThrown, thi s._exceptionThrown, this); 78 eventListeners.push(runtimeModel.addEventListener(
72 runtimeModel.addEventListener(SDK.RuntimeModel.Events.ExceptionRevoked, th is._exceptionRevoked, this); 79 SDK.RuntimeModel.Events.ExceptionThrown, this._exceptionThrown.bind(th is, runtimeModel)));
73 runtimeModel.addEventListener(SDK.RuntimeModel.Events.ConsoleAPICalled, th is._consoleAPICalled, this); 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)));
74 } 84 }
75 85
76 var networkManager = target.model(SDK.NetworkManager); 86 var networkManager = target.model(SDK.NetworkManager);
77 if (networkManager) 87 if (networkManager) {
78 networkManager.addEventListener(SDK.NetworkManager.Events.WarningGenerated , this._networkWarningGenerated, this); 88 eventListeners.push(networkManager.addEventListener(
89 SDK.NetworkManager.Events.WarningGenerated, this._networkWarningGenera ted.bind(this, networkManager)));
90 }
91
92 target[SDK.ConsoleModel._events] = eventListeners;
79 } 93 }
80 94
81 /** 95 /**
82 * @return {!SDK.Target} 96 * @override
97 * @param {!SDK.Target} target
83 */ 98 */
84 target() { 99 targetRemoved(target) {
85 return this._target; 100 this._messageByExceptionId.delete(target);
101 Common.EventTarget.removeEventListeners(target[SDK.ConsoleModel._events]);
86 } 102 }
87 103
88 /** 104 /**
89 * @param {!SDK.ExecutionContext} executionContext 105 * @param {!SDK.ExecutionContext} executionContext
90 * @param {string} text 106 * @param {string} text
91 * @param {boolean} useCommandLineAPI 107 * @param {boolean} useCommandLineAPI
92 */ 108 */
93 static evaluateCommandInConsole(executionContext, text, useCommandLineAPI) { 109 evaluateCommandInConsole(executionContext, text, useCommandLineAPI) {
94 var target = executionContext.target(); 110 var target = executionContext.target();
95 var requestedText = text; 111 var requestedText = text;
96 112
97 var commandMessage = new SDK.ConsoleMessage( 113 var commandMessage = new SDK.ConsoleMessage(
98 target, SDK.ConsoleMessage.MessageSource.JS, null, text, SDK.ConsoleMess age.MessageType.Command); 114 target, SDK.ConsoleMessage.MessageSource.JS, null, text, SDK.ConsoleMess age.MessageType.Command);
99 commandMessage.setExecutionContextId(executionContext.id); 115 commandMessage.setExecutionContextId(executionContext.id);
100 SDK.multitargetConsoleModel.addMessage(commandMessage); 116 this.addMessage(commandMessage);
101 117
102 /** 118 /**
103 * @param {?SDK.RemoteObject} result 119 * @param {?SDK.RemoteObject} result
104 * @param {!Protocol.Runtime.ExceptionDetails=} exceptionDetails 120 * @param {!Protocol.Runtime.ExceptionDetails=} exceptionDetails
121 * @this {SDK.ConsoleModel}
105 */ 122 */
106 function printResult(result, exceptionDetails) { 123 function printResult(result, exceptionDetails) {
107 if (!result) 124 if (!result)
108 return; 125 return;
109 126
110 Common.console.showPromise().then(reportUponEvaluation); 127 Common.console.showPromise().then(() => {
111 function reportUponEvaluation() { 128 this.dispatchEventToListeners(
112 SDK.multitargetConsoleModel._consoleModels.get(target).dispatchEventToLi steners(
113 SDK.ConsoleModel.Events.CommandEvaluated, 129 SDK.ConsoleModel.Events.CommandEvaluated,
114 {result: result, text: requestedText, commandMessage: commandMessage , exceptionDetails: exceptionDetails}); 130 {result: result, text: requestedText, commandMessage: commandMessage , exceptionDetails: exceptionDetails});
115 } 131 });
116 } 132 }
117 133
118 /** 134 /**
119 * @param {string} code 135 * @param {string} code
120 * @suppress {uselessCode} 136 * @suppress {uselessCode}
121 * @return {boolean} 137 * @return {boolean}
122 */ 138 */
123 function looksLikeAnObjectLiteral(code) { 139 function looksLikeAnObjectLiteral(code) {
124 // Only parenthesize what appears to be an object literal. 140 // Only parenthesize what appears to be an object literal.
125 if (!(/^\s*\{/.test(code) && /\}\s*$/.test(code))) 141 if (!(/^\s*\{/.test(code) && /\}\s*$/.test(code)))
126 return false; 142 return false;
127 143
128 try { 144 try {
129 // Check if the code can be interpreted as an expression. 145 // Check if the code can be interpreted as an expression.
130 Function('return ' + code + ';'); 146 Function('return ' + code + ';');
131 147
132 // No syntax error! Does it work parenthesized? 148 // No syntax error! Does it work parenthesized?
133 Function('(' + code + ')'); 149 Function('(' + code + ')');
134 150
135 return true; 151 return true;
136 } catch (e) { 152 } catch (e) {
137 return false; 153 return false;
138 } 154 }
139 } 155 }
140 156
141 if (looksLikeAnObjectLiteral(text)) 157 if (looksLikeAnObjectLiteral(text))
142 text = '(' + text + ')'; 158 text = '(' + text + ')';
143 159
144 executionContext.evaluate(text, 'console', useCommandLineAPI, false, false, true, true, printResult); 160 executionContext.evaluate(text, 'console', useCommandLineAPI, false, false, true, true, printResult.bind(this));
145 Host.userMetrics.actionTaken(Host.UserMetrics.Action.ConsoleEvaluated); 161 Host.userMetrics.actionTaken(Host.UserMetrics.Action.ConsoleEvaluated);
146 } 162 }
147 163
148 /** 164 /**
149 * @param {!SDK.ConsoleMessage} msg 165 * @param {!SDK.ConsoleMessage} msg
150 */ 166 */
151 addMessage(msg) { 167 addMessage(msg) {
152 if (msg.source === SDK.ConsoleMessage.MessageSource.Worker && SDK.targetMana ger.targetById(msg.workerId)) 168 if (msg.source === SDK.ConsoleMessage.MessageSource.Worker && SDK.targetMana ger.targetById(msg.workerId))
153 return; 169 return;
154 170
155 if (msg.source === SDK.ConsoleMessage.MessageSource.ConsoleAPI && msg.type = == SDK.ConsoleMessage.MessageType.Clear) 171 if (msg.source === SDK.ConsoleMessage.MessageSource.ConsoleAPI && msg.type = == SDK.ConsoleMessage.MessageType.Clear)
156 this.clear(); 172 this._clear();
157 173
158 this._messages.push(msg); 174 this._messages.push(msg);
159 if (msg._exceptionId) 175 if (msg._exceptionId && msg.target()) {
160 this._messageByExceptionId.set(msg._exceptionId, msg); 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 }
161 this._incrementErrorWarningCount(msg); 186 this._incrementErrorWarningCount(msg);
162 this.dispatchEventToListeners(SDK.ConsoleModel.Events.MessageAdded, msg); 187 this.dispatchEventToListeners(SDK.ConsoleModel.Events.MessageAdded, msg);
163 } 188 }
164 189
165 /** 190 /**
166 * @param {!SDK.LogModel.EntryAddedEvent} event 191 * @param {!SDK.LogModel.EntryAddedEvent} event
167 */ 192 */
168 _logEntryAdded(event) { 193 _logEntryAdded(event) {
169 var consoleMessage = new SDK.ConsoleMessage( 194 var consoleMessage = new SDK.ConsoleMessage(
170 this.target(), event.entry.source, event.entry.level, event.entry.text, undefined, event.entry.url, 195 event.logModel.target(), event.entry.source, event.entry.level, event.en try.text, undefined, event.entry.url,
171 event.entry.lineNumber, undefined, event.entry.networkRequestId, undefin ed, event.entry.stackTrace, 196 event.entry.lineNumber, undefined, event.entry.networkRequestId, undefin ed, event.entry.stackTrace,
172 event.entry.timestamp, undefined, undefined, event.entry.workerId); 197 event.entry.timestamp, undefined, undefined, event.entry.workerId);
173 this.addMessage(consoleMessage); 198 this.addMessage(consoleMessage);
174 } 199 }
175 200
176 /** 201 /**
202 * @param {!SDK.RuntimeModel} runtimeModel
caseq 2017/03/16 00:38:55 you only use target, so let's bind to target strai
177 * @param {!Common.Event} event 203 * @param {!Common.Event} event
178 */ 204 */
179 _exceptionThrown(event) { 205 _exceptionThrown(runtimeModel, event) {
180 var exceptionWithTimestamp = /** @type {!SDK.RuntimeModel.ExceptionWithTimes tamp} */ (event.data); 206 var exceptionWithTimestamp = /** @type {!SDK.RuntimeModel.ExceptionWithTimes tamp} */ (event.data);
181 var consoleMessage = SDK.ConsoleMessage.fromException( 207 var consoleMessage = SDK.ConsoleMessage.fromException(
182 this.target(), exceptionWithTimestamp.details, undefined, exceptionWithT imestamp.timestamp, undefined); 208 runtimeModel.target(), exceptionWithTimestamp.details, undefined, except ionWithTimestamp.timestamp, undefined);
183 consoleMessage.setExceptionId(exceptionWithTimestamp.details.exceptionId); 209 consoleMessage.setExceptionId(exceptionWithTimestamp.details.exceptionId);
184 this.addMessage(consoleMessage); 210 this.addMessage(consoleMessage);
185 } 211 }
186 212
187 /** 213 /**
214 * @param {!SDK.RuntimeModel} runtimeModel
caseq 2017/03/16 00:38:54 ditto.
188 * @param {!Common.Event} event 215 * @param {!Common.Event} event
189 */ 216 */
190 _exceptionRevoked(event) { 217 _exceptionRevoked(runtimeModel, event) {
191 var exceptionId = /** @type {number} */ (event.data); 218 var exceptionId = /** @type {number} */ (event.data);
192 var exceptionMessage = this._messageByExceptionId.get(exceptionId); 219 var targetMap = this._messageByExceptionId.get(runtimeModel.target());
220 var exceptionMessage = targetMap ? targetMap.get(exceptionId) : null;
193 if (!exceptionMessage) 221 if (!exceptionMessage)
194 return; 222 return;
195 this._errors--; 223 this._errors--;
196 exceptionMessage.level = SDK.ConsoleMessage.MessageLevel.Info; 224 exceptionMessage.level = SDK.ConsoleMessage.MessageLevel.Info;
197 this.dispatchEventToListeners(SDK.ConsoleModel.Events.MessageUpdated, except ionMessage); 225 this.dispatchEventToListeners(SDK.ConsoleModel.Events.MessageUpdated, except ionMessage);
198 } 226 }
199 227
200 /** 228 /**
229 * @param {!SDK.RuntimeModel} runtimeModel
201 * @param {!Common.Event} event 230 * @param {!Common.Event} event
202 */ 231 */
203 _consoleAPICalled(event) { 232 _consoleAPICalled(runtimeModel, event) {
caseq 2017/03/16 00:38:55 ditto.
204 var call = /** @type {!SDK.RuntimeModel.ConsoleAPICall} */ (event.data); 233 var call = /** @type {!SDK.RuntimeModel.ConsoleAPICall} */ (event.data);
205 var level = SDK.ConsoleMessage.MessageLevel.Info; 234 var level = SDK.ConsoleMessage.MessageLevel.Info;
206 if (call.type === SDK.ConsoleMessage.MessageType.Debug) 235 if (call.type === SDK.ConsoleMessage.MessageType.Debug)
207 level = SDK.ConsoleMessage.MessageLevel.Verbose; 236 level = SDK.ConsoleMessage.MessageLevel.Verbose;
208 else if (call.type === SDK.ConsoleMessage.MessageType.Error || call.type === SDK.ConsoleMessage.MessageType.Assert) 237 else if (call.type === SDK.ConsoleMessage.MessageType.Error || call.type === SDK.ConsoleMessage.MessageType.Assert)
209 level = SDK.ConsoleMessage.MessageLevel.Error; 238 level = SDK.ConsoleMessage.MessageLevel.Error;
210 else if (call.type === SDK.ConsoleMessage.MessageType.Warning) 239 else if (call.type === SDK.ConsoleMessage.MessageType.Warning)
211 level = SDK.ConsoleMessage.MessageLevel.Warning; 240 level = SDK.ConsoleMessage.MessageLevel.Warning;
212 else if (call.type === SDK.ConsoleMessage.MessageType.Info || call.type === SDK.ConsoleMessage.MessageType.Log) 241 else if (call.type === SDK.ConsoleMessage.MessageType.Info || call.type === SDK.ConsoleMessage.MessageType.Log)
213 level = SDK.ConsoleMessage.MessageLevel.Info; 242 level = SDK.ConsoleMessage.MessageLevel.Info;
214 var message = ''; 243 var message = '';
215 if (call.args.length && typeof call.args[0].value === 'string') 244 if (call.args.length && typeof call.args[0].value === 'string')
216 message = call.args[0].value; 245 message = call.args[0].value;
217 else if (call.args.length && call.args[0].description) 246 else if (call.args.length && call.args[0].description)
218 message = call.args[0].description; 247 message = call.args[0].description;
219 var callFrame = call.stackTrace && call.stackTrace.callFrames.length ? call. stackTrace.callFrames[0] : null; 248 var callFrame = call.stackTrace && call.stackTrace.callFrames.length ? call. stackTrace.callFrames[0] : null;
220 var consoleMessage = new SDK.ConsoleMessage( 249 var consoleMessage = new SDK.ConsoleMessage(
221 this.target(), SDK.ConsoleMessage.MessageSource.ConsoleAPI, level, 250 runtimeModel.target(), SDK.ConsoleMessage.MessageSource.ConsoleAPI, leve l,
222 /** @type {string} */ (message), call.type, callFrame ? callFrame.url : undefined, 251 /** @type {string} */ (message), call.type, callFrame ? callFrame.url : undefined,
223 callFrame ? callFrame.lineNumber : undefined, callFrame ? callFrame.colu mnNumber : undefined, undefined, 252 callFrame ? callFrame.lineNumber : undefined, callFrame ? callFrame.colu mnNumber : undefined, undefined,
224 call.args, call.stackTrace, call.timestamp, call.executionContextId, und efined); 253 call.args, call.stackTrace, call.timestamp, call.executionContextId, und efined);
225 this.addMessage(consoleMessage); 254 this.addMessage(consoleMessage);
226 } 255 }
227 256
228 /** 257 /**
229 * @param {!Common.Event} event 258 * @param {!Common.Event} event
230 */ 259 */
231 _mainFrameStartedLoading(event) { 260 _mainFrameStartedLoading(event) {
232 if (!Common.moduleSetting('preserveConsoleLog').get()) 261 if (!Common.moduleSetting('preserveConsoleLog').get())
233 this.clear(); 262 this._clear();
234 } 263 }
235 264
236 /** 265 /**
237 * @param {!Common.Event} event 266 * @param {!Common.Event} event
238 */ 267 */
239 _mainFrameNavigated(event) { 268 _mainFrameNavigated(event) {
240 if (Common.moduleSetting('preserveConsoleLog').get()) 269 if (Common.moduleSetting('preserveConsoleLog').get())
241 Common.console.log(Common.UIString('Navigated to %s', event.data.url)); 270 Common.console.log(Common.UIString('Navigated to %s', event.data.url));
242 } 271 }
243 272
244 /** 273 /**
274 * @param {!SDK.CPUProfilerModel} cpuProfilerModel
245 * @param {!Common.Event} event 275 * @param {!Common.Event} event
246 */ 276 */
247 _consoleProfileStarted(event) { 277 _consoleProfileStarted(cpuProfilerModel, event) {
248 var data = /** @type {!SDK.CPUProfilerModel.EventData} */ (event.data); 278 var data = /** @type {!SDK.CPUProfilerModel.EventData} */ (event.data);
249 this._addConsoleProfileMessage( 279 this._addConsoleProfileMessage(
250 SDK.ConsoleMessage.MessageType.Profile, data.scriptLocation, 280 cpuProfilerModel, SDK.ConsoleMessage.MessageType.Profile, data.scriptLoc ation,
251 Common.UIString('Profile \'%s\' started.', data.title)); 281 Common.UIString('Profile \'%s\' started.', data.title));
252 } 282 }
253 283
254 /** 284 /**
285 * @param {!SDK.CPUProfilerModel} cpuProfilerModel
255 * @param {!Common.Event} event 286 * @param {!Common.Event} event
256 */ 287 */
257 _consoleProfileFinished(event) { 288 _consoleProfileFinished(cpuProfilerModel, event) {
258 var data = /** @type {!SDK.CPUProfilerModel.EventData} */ (event.data); 289 var data = /** @type {!SDK.CPUProfilerModel.EventData} */ (event.data);
259 this._addConsoleProfileMessage( 290 this._addConsoleProfileMessage(
260 SDK.ConsoleMessage.MessageType.ProfileEnd, data.scriptLocation, 291 cpuProfilerModel, SDK.ConsoleMessage.MessageType.ProfileEnd, data.script Location,
261 Common.UIString('Profile \'%s\' finished.', data.title)); 292 Common.UIString('Profile \'%s\' finished.', data.title));
262 } 293 }
263 294
264 /** 295 /**
296 * @param {!SDK.CPUProfilerModel} cpuProfilerModel
265 * @param {string} type 297 * @param {string} type
266 * @param {!SDK.DebuggerModel.Location} scriptLocation 298 * @param {!SDK.DebuggerModel.Location} scriptLocation
267 * @param {string} messageText 299 * @param {string} messageText
268 */ 300 */
269 _addConsoleProfileMessage(type, scriptLocation, messageText) { 301 _addConsoleProfileMessage(cpuProfilerModel, type, scriptLocation, messageText) {
caseq 2017/03/16 00:38:55 let's pass target instead.
270 var stackTrace = [{ 302 var stackTrace = [{
271 functionName: '', 303 functionName: '',
272 scriptId: scriptLocation.scriptId, 304 scriptId: scriptLocation.scriptId,
273 url: scriptLocation.script() ? scriptLocation.script().contentURL() : '', 305 url: scriptLocation.script() ? scriptLocation.script().contentURL() : '',
274 lineNumber: scriptLocation.lineNumber, 306 lineNumber: scriptLocation.lineNumber,
275 columnNumber: scriptLocation.columnNumber || 0 307 columnNumber: scriptLocation.columnNumber || 0
276 }]; 308 }];
277 this.addMessage(new SDK.ConsoleMessage( 309 this.addMessage(new SDK.ConsoleMessage(
278 this.target(), SDK.ConsoleMessage.MessageSource.ConsoleAPI, SDK.ConsoleM essage.MessageLevel.Info, messageText, 310 cpuProfilerModel.target(), SDK.ConsoleMessage.MessageSource.ConsoleAPI, SDK.ConsoleMessage.MessageLevel.Info,
279 type, undefined, undefined, undefined, undefined, stackTrace)); 311 messageText, type, undefined, undefined, undefined, undefined, stackTrac e));
280 } 312 }
281 313
282 /** 314 /**
315 * @param {!SDK.NetworkManager} networkManager
283 * @param {!Common.Event} event 316 * @param {!Common.Event} event
284 */ 317 */
285 _networkWarningGenerated(event) { 318 _networkWarningGenerated(networkManager, event) {
286 var warning = /** @type {!SDK.NetworkManager.Warning} */ (event.data); 319 var warning = /** @type {!SDK.NetworkManager.Warning} */ (event.data);
287 this.addMessage(new SDK.ConsoleMessage( 320 this.addMessage(new SDK.ConsoleMessage(
288 this.target(), SDK.ConsoleMessage.MessageSource.Network, SDK.ConsoleMess age.MessageLevel.Warning, 321 networkManager.target(), SDK.ConsoleMessage.MessageSource.Network, SDK.C onsoleMessage.MessageLevel.Warning,
289 warning.message, undefined, undefined, undefined, undefined, warning.req uestId)); 322 warning.message, undefined, undefined, undefined, undefined, warning.req uestId));
290 } 323 }
291 324
292 /** 325 /**
293 * @param {!SDK.ConsoleMessage} msg 326 * @param {!SDK.ConsoleMessage} msg
294 */ 327 */
295 _incrementErrorWarningCount(msg) { 328 _incrementErrorWarningCount(msg) {
296 if (msg.source === SDK.ConsoleMessage.MessageSource.Violation) 329 if (msg.source === SDK.ConsoleMessage.MessageSource.Violation)
297 return; 330 return;
298 switch (msg.level) { 331 switch (msg.level) {
299 case SDK.ConsoleMessage.MessageLevel.Warning: 332 case SDK.ConsoleMessage.MessageLevel.Warning:
300 this._warnings++; 333 this._warnings++;
301 break; 334 break;
302 case SDK.ConsoleMessage.MessageLevel.Error: 335 case SDK.ConsoleMessage.MessageLevel.Error:
303 this._errors++; 336 this._errors++;
304 break; 337 break;
305 } 338 }
306 } 339 }
307 340
308 /** 341 /**
309 * @return {!Array.<!SDK.ConsoleMessage>} 342 * @return {!Array.<!SDK.ConsoleMessage>}
310 */ 343 */
311 messages() { 344 messages() {
312 return this._messages; 345 return this._messages;
313 } 346 }
314 347
315 requestClearMessages() { 348 requestClearMessages() {
316 var logModel = this.target().model(SDK.LogModel); 349 for (var logModel of SDK.targetManager.models(SDK.LogModel))
317 if (logModel)
318 logModel.requestClear(); 350 logModel.requestClear();
319 this.clear(); 351 for (var runtimeModel of SDK.targetManager.models(SDK.RuntimeModel))
320 this.target().runtimeModel.discardConsoleEntries(); 352 runtimeModel.discardConsoleEntries();
353 this._clear();
321 } 354 }
322 355
323 clear() { 356 _clear() {
324 this._messages = []; 357 this._messages = [];
325 this._messageByExceptionId.clear(); 358 this._messageByExceptionId.clear();
326 // TODO(dgozman): clear exceptions and console api entries in runtimeModel.
327 this._errors = 0; 359 this._errors = 0;
328 this._warnings = 0; 360 this._warnings = 0;
329 this.dispatchEventToListeners(SDK.ConsoleModel.Events.ConsoleCleared); 361 this.dispatchEventToListeners(SDK.ConsoleModel.Events.ConsoleCleared);
330 } 362 }
331 363
332 /** 364 /**
333 * @return {number} 365 * @return {number}
334 */ 366 */
335 errors() { 367 errors() {
336 return this._errors; 368 return this._errors;
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 SDK.ConsoleMessage.MessageLevel.ordinal = function(level) { 663 SDK.ConsoleMessage.MessageLevel.ordinal = function(level) {
632 if (level === SDK.ConsoleMessage.MessageLevel.Verbose) 664 if (level === SDK.ConsoleMessage.MessageLevel.Verbose)
633 return 0; 665 return 0;
634 if (level === SDK.ConsoleMessage.MessageLevel.Info) 666 if (level === SDK.ConsoleMessage.MessageLevel.Info)
635 return 1; 667 return 1;
636 if (level === SDK.ConsoleMessage.MessageLevel.Warning) 668 if (level === SDK.ConsoleMessage.MessageLevel.Warning)
637 return 2; 669 return 2;
638 return 3; 670 return 3;
639 }; 671 };
640 672
641 /** 673 SDK.ConsoleModel._events = Symbol('SDK.ConsoleModel.events');
642 * @implements {SDK.TargetManager.Observer}
643 * @unrestricted
644 */
645 SDK.MultitargetConsoleModel = class extends Common.Object {
646 constructor() {
647 super();
648 /** @type {!Map<!SDK.Target, !SDK.ConsoleModel>} */
649 this._consoleModels = new Map();
650 SDK.targetManager.observeTargets(this);
651 }
652
653 /**
654 * @override
655 * @param {!SDK.Target} target
656 */
657 targetAdded(target) {
658 var consoleModel = new SDK.ConsoleModel(target);
659 this._consoleModels.set(target, consoleModel);
660 consoleModel[SDK.MultitargetConsoleModel._events] = [
661 consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, this._ consoleMessageAdded, this),
662 consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageUpdated, this ._consoleMessageUpdated, this),
663 consoleModel.addEventListener(SDK.ConsoleModel.Events.CommandEvaluated, th is._commandEvaluated, this)
664 ];
665
666 if (!this._mainTarget) {
667 this._mainTarget = target;
668 consoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this ._consoleCleared, this);
669 }
670 }
671
672 /**
673 * @override
674 * @param {!SDK.Target} target
675 */
676 targetRemoved(target) {
677 var consoleModel = this._consoleModels.get(target);
678 this._consoleModels.delete(target);
679 Common.EventTarget.removeEventListeners(consoleModel[SDK.MultitargetConsoleM odel._events]);
680
681 if (this._mainTarget === target) {
682 delete this._mainTarget;
683 consoleModel.removeEventListener(SDK.ConsoleModel.Events.ConsoleCleared, t his._consoleCleared, this);
684 }
685 }
686
687 /**
688 * @return {!Array.<!SDK.ConsoleMessage>}
689 */
690 messages() {
691 var result = [];
692 for (var consoleModel of this._consoleModels.values())
693 result = result.concat(consoleModel.messages());
694 return result;
695 }
696
697 requestClearMessages() {
698 for (var consoleModel of this._consoleModels.values())
699 consoleModel.requestClearMessages();
700 }
701
702 /**
703 * @param {!SDK.ConsoleMessage} consoleMessage
704 */
705 addMessage(consoleMessage) {
706 // TODO(dgozman): make target non-nullable, as we only have messages without a target
707 // internally in ConsoleView.
708 var target = /** @type {!SDK.Target} */ (consoleMessage.target());
709 this._consoleModels.get(target).addMessage(consoleMessage);
710 }
711
712 /**
713 * @return {number}
714 */
715 errors() {
716 var result = 0;
717 for (var consoleModel of this._consoleModels.values())
718 result += consoleModel.errors();
719 return result;
720 }
721
722 /**
723 * @return {number}
724 */
725 warnings() {
726 var result = 0;
727 for (var consoleModel of this._consoleModels.values())
728 result += consoleModel.warnings();
729 return result;
730 }
731
732 _consoleCleared() {
733 this.dispatchEventToListeners(SDK.ConsoleModel.Events.ConsoleCleared);
734 }
735
736 /**
737 * @param {!Common.Event} event
738 */
739 _consoleMessageAdded(event) {
740 this.dispatchEventToListeners(SDK.ConsoleModel.Events.MessageAdded, event.da ta);
741 }
742
743 /**
744 * @param {!Common.Event} event
745 */
746 _consoleMessageUpdated(event) {
747 this.dispatchEventToListeners(SDK.ConsoleModel.Events.MessageUpdated, event. data);
748 }
749
750 /**
751 * @param {!Common.Event} event
752 */
753 _commandEvaluated(event) {
754 this.dispatchEventToListeners(SDK.ConsoleModel.Events.CommandEvaluated, even t.data);
755 }
756 };
757
758 SDK.MultitargetConsoleModel._events = Symbol('SDK.MultitargetConsoleModel.events ');
759 674
760 /** 675 /**
761 * @type {!SDK.MultitargetConsoleModel} 676 * @type {!SDK.ConsoleModel}
762 */ 677 */
763 SDK.multitargetConsoleModel; 678 SDK.consoleModel;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698