OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 11 matching lines...) Expand all Loading... | |
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 Loading... | |
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; |
OLD | NEW |