Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js |
| index 167cb264b6ea416b219b52b4ab198c25f20ba675..f89ee53e10b066510ebb9bd5d6d1d404617e1bbd 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js |
| @@ -31,12 +31,13 @@ |
| /** |
| * @unrestricted |
| */ |
| -SDK.ConsoleModel = class extends SDK.SDKModel { |
| +SDK.ConsoleModel = class extends Common.Object { |
| /** |
| * @param {!SDK.Target} target |
| */ |
| constructor(target) { |
| - super(target); |
| + super(); |
| + this._target = target; |
| /** @type {!Array.<!SDK.ConsoleMessage>} */ |
| this._messages = []; |
| @@ -78,6 +79,13 @@ SDK.ConsoleModel = class extends SDK.SDKModel { |
| } |
| /** |
| + * @return {!SDK.Target} |
| + */ |
| + target() { |
|
caseq
2017/03/15 21:32:01
drop this and keep it private?
|
| + return this._target; |
| + } |
| + |
| + /** |
| * @param {!SDK.ExecutionContext} executionContext |
| * @param {string} text |
| * @param {boolean} useCommandLineAPI |
| @@ -89,7 +97,7 @@ SDK.ConsoleModel = class extends SDK.SDKModel { |
| var commandMessage = new SDK.ConsoleMessage( |
| target, SDK.ConsoleMessage.MessageSource.JS, null, text, SDK.ConsoleMessage.MessageType.Command); |
| commandMessage.setExecutionContextId(executionContext.id); |
| - target.consoleModel.addMessage(commandMessage); |
| + SDK.multitargetConsoleModel.addMessage(commandMessage); |
| /** |
| * @param {?SDK.RemoteObject} result |
| @@ -101,7 +109,7 @@ SDK.ConsoleModel = class extends SDK.SDKModel { |
| Common.console.showPromise().then(reportUponEvaluation); |
| function reportUponEvaluation() { |
| - target.consoleModel.dispatchEventToListeners( |
| + SDK.multitargetConsoleModel._consoleModels.get(target).dispatchEventToListeners( |
| SDK.ConsoleModel.Events.CommandEvaluated, |
| {result: result, text: requestedText, commandMessage: commandMessage, exceptionDetails: exceptionDetails}); |
| } |
| @@ -336,8 +344,6 @@ SDK.ConsoleModel = class extends SDK.SDKModel { |
| } |
| }; |
| -SDK.SDKModel.register(SDK.ConsoleModel, SDK.Target.Capability.None); |
| - |
| /** @enum {symbol} */ |
| SDK.ConsoleModel.Events = { |
| ConsoleCleared: Symbol('ConsoleCleared'), |
| @@ -639,13 +645,9 @@ SDK.ConsoleMessage.MessageLevel.ordinal = function(level) { |
| SDK.MultitargetConsoleModel = class extends Common.Object { |
|
caseq
2017/03/15 21:32:01
This is really MultitargetLogModel, right?
dgozman
2017/03/15 23:08:13
Not really. It's a model for ConsoleView mostly.
|
| constructor() { |
| super(); |
| + /** @type {!Map<!SDK.Target, !SDK.ConsoleModel>} */ |
| + this._consoleModels = new Map(); |
| SDK.targetManager.observeTargets(this); |
| - SDK.targetManager.addModelListener( |
| - SDK.ConsoleModel, SDK.ConsoleModel.Events.MessageAdded, this._consoleMessageAdded, this); |
| - SDK.targetManager.addModelListener( |
| - SDK.ConsoleModel, SDK.ConsoleModel.Events.MessageUpdated, this._consoleMessageUpdated, this); |
| - SDK.targetManager.addModelListener( |
| - SDK.ConsoleModel, SDK.ConsoleModel.Events.CommandEvaluated, this._commandEvaluated, this); |
| } |
| /** |
| @@ -653,9 +655,17 @@ SDK.MultitargetConsoleModel = class extends Common.Object { |
| * @param {!SDK.Target} target |
| */ |
| targetAdded(target) { |
| + var consoleModel = new SDK.ConsoleModel(target); |
| + this._consoleModels.set(target, consoleModel); |
| + consoleModel[SDK.MultitargetConsoleModel._events] = [ |
|
caseq
2017/03/15 21:32:01
nit: you keep a map of all models anyway, so these
|
| + consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, this._consoleMessageAdded, this), |
| + consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageUpdated, this._consoleMessageUpdated, this), |
| + consoleModel.addEventListener(SDK.ConsoleModel.Events.CommandEvaluated, this._commandEvaluated, this) |
| + ]; |
| + |
| if (!this._mainTarget) { |
| this._mainTarget = target; |
| - target.consoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this); |
| + consoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this); |
| } |
| } |
| @@ -664,9 +674,13 @@ SDK.MultitargetConsoleModel = class extends Common.Object { |
| * @param {!SDK.Target} target |
| */ |
| targetRemoved(target) { |
| + var consoleModel = this._consoleModels.get(target); |
| + this._consoleModels.delete(target); |
| + Common.EventTarget.removeEventListeners(consoleModel[SDK.MultitargetConsoleModel._events]); |
| + |
| if (this._mainTarget === target) { |
| delete this._mainTarget; |
| - target.consoleModel.removeEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this); |
| + consoleModel.removeEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this); |
| } |
| } |
| @@ -674,10 +688,44 @@ SDK.MultitargetConsoleModel = class extends Common.Object { |
| * @return {!Array.<!SDK.ConsoleMessage>} |
| */ |
| messages() { |
| - var targets = SDK.targetManager.targets(); |
| var result = []; |
| - for (var i = 0; i < targets.length; ++i) |
| - result = result.concat(targets[i].consoleModel.messages()); |
| + for (var consoleModel of this._consoleModels.values()) |
| + result = result.concat(consoleModel.messages()); |
| + return result; |
| + } |
| + |
| + requestClearMessages() { |
| + for (var consoleModel of this._consoleModels.values()) |
| + consoleModel.requestClearMessages(); |
| + } |
| + |
| + /** |
| + * @param {!SDK.ConsoleMessage} consoleMessage |
| + */ |
| + addMessage(consoleMessage) { |
| + // TODO(dgozman): make target non-nullable, as we only have messages without a target |
| + // internally in ConsoleView. |
| + var target = /** @type {!SDK.Target} */ (consoleMessage.target()); |
| + this._consoleModels.get(target).addMessage(consoleMessage); |
| + } |
| + |
| + /** |
| + * @return {number} |
| + */ |
| + errors() { |
| + var result = 0; |
| + for (var consoleModel of this._consoleModels.values()) |
| + result += consoleModel.errors(); |
| + return result; |
| + } |
| + |
| + /** |
| + * @return {number} |
| + */ |
| + warnings() { |
| + var result = 0; |
| + for (var consoleModel of this._consoleModels.values()) |
| + result += consoleModel.warnings(); |
| return result; |
| } |
| @@ -707,6 +755,8 @@ SDK.MultitargetConsoleModel = class extends Common.Object { |
| } |
| }; |
| +SDK.MultitargetConsoleModel._events = Symbol('SDK.MultitargetConsoleModel.events'); |
| + |
| /** |
| * @type {!SDK.MultitargetConsoleModel} |
| */ |