Chromium Code Reviews| 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 |