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

Unified 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 side-by-side diff with in-line comments
Download patch
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 f89ee53e10b066510ebb9bd5d6d1d404617e1bbd..f9e5681aeab6aa6d1aae8b812e93057ccae9bbcf 100644
--- a/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/sdk/ConsoleModel.js
@@ -29,60 +29,76 @@
*/
/**
- * @unrestricted
+ * @implements {SDK.TargetManager.Observer}
*/
SDK.ConsoleModel = class extends Common.Object {
- /**
- * @param {!SDK.Target} target
- */
- constructor(target) {
+ constructor() {
super();
- this._target = target;
/** @type {!Array.<!SDK.ConsoleMessage>} */
this._messages = [];
- /** @type {!Map<number, !SDK.ConsoleMessage>} */
+ /** @type {!Map<!SDK.Target, !Map<number, !SDK.ConsoleMessage>>} */
this._messageByExceptionId = new Map();
this._warnings = 0;
this._errors = 0;
+ SDK.targetManager.observeTargets(this);
+ }
+
+ /**
+ * @override
+ * @param {!SDK.Target} target
+ */
+ targetAdded(target) {
+ var eventListeners = [];
+
var logModel = target.model(SDK.LogModel);
if (logModel)
- logModel.on(SDK.LogModel.EntryAddedEvent, this._logEntryAdded, this);
+ eventListeners.push(logModel.on(SDK.LogModel.EntryAddedEvent, this._logEntryAdded, this));
var cpuProfilerModel = target.model(SDK.CPUProfilerModel);
if (cpuProfilerModel) {
- cpuProfilerModel.addEventListener(
- SDK.CPUProfilerModel.Events.ConsoleProfileStarted, this._consoleProfileStarted, this);
- cpuProfilerModel.addEventListener(
- SDK.CPUProfilerModel.Events.ConsoleProfileFinished, this._consoleProfileFinished, this);
+ eventListeners.push(cpuProfilerModel.addEventListener(
+ SDK.CPUProfilerModel.Events.ConsoleProfileStarted, this._consoleProfileStarted.bind(this, cpuProfilerModel)));
+ eventListeners.push(cpuProfilerModel.addEventListener(
+ SDK.CPUProfilerModel.Events.ConsoleProfileFinished,
+ this._consoleProfileFinished.bind(this, cpuProfilerModel)));
}
var resourceTreeModel = target.model(SDK.ResourceTreeModel);
if (resourceTreeModel) {
- resourceTreeModel.addEventListener(
- SDK.ResourceTreeModel.Events.MainFrameStartedLoading, this._mainFrameStartedLoading, this);
- resourceTreeModel.addEventListener(
- SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this);
+ eventListeners.push(resourceTreeModel.addEventListener(
+ SDK.ResourceTreeModel.Events.MainFrameStartedLoading, this._mainFrameStartedLoading, this));
+ eventListeners.push(resourceTreeModel.addEventListener(
+ SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this));
}
var runtimeModel = target.model(SDK.RuntimeModel);
if (runtimeModel) {
- runtimeModel.addEventListener(SDK.RuntimeModel.Events.ExceptionThrown, this._exceptionThrown, this);
- runtimeModel.addEventListener(SDK.RuntimeModel.Events.ExceptionRevoked, this._exceptionRevoked, this);
- runtimeModel.addEventListener(SDK.RuntimeModel.Events.ConsoleAPICalled, this._consoleAPICalled, this);
+ eventListeners.push(runtimeModel.addEventListener(
+ SDK.RuntimeModel.Events.ExceptionThrown, this._exceptionThrown.bind(this, runtimeModel)));
+ eventListeners.push(runtimeModel.addEventListener(
+ SDK.RuntimeModel.Events.ExceptionRevoked, this._exceptionRevoked.bind(this, runtimeModel)));
+ eventListeners.push(runtimeModel.addEventListener(
+ SDK.RuntimeModel.Events.ConsoleAPICalled, this._consoleAPICalled.bind(this, runtimeModel)));
}
var networkManager = target.model(SDK.NetworkManager);
- if (networkManager)
- networkManager.addEventListener(SDK.NetworkManager.Events.WarningGenerated, this._networkWarningGenerated, this);
+ if (networkManager) {
+ eventListeners.push(networkManager.addEventListener(
+ SDK.NetworkManager.Events.WarningGenerated, this._networkWarningGenerated.bind(this, networkManager)));
+ }
+
+ target[SDK.ConsoleModel._events] = eventListeners;
}
/**
- * @return {!SDK.Target}
+ * @override
+ * @param {!SDK.Target} target
*/
- target() {
- return this._target;
+ targetRemoved(target) {
+ this._messageByExceptionId.delete(target);
+ Common.EventTarget.removeEventListeners(target[SDK.ConsoleModel._events]);
}
/**
@@ -90,29 +106,29 @@ SDK.ConsoleModel = class extends Common.Object {
* @param {string} text
* @param {boolean} useCommandLineAPI
*/
- static evaluateCommandInConsole(executionContext, text, useCommandLineAPI) {
+ evaluateCommandInConsole(executionContext, text, useCommandLineAPI) {
var target = executionContext.target();
var requestedText = text;
var commandMessage = new SDK.ConsoleMessage(
target, SDK.ConsoleMessage.MessageSource.JS, null, text, SDK.ConsoleMessage.MessageType.Command);
commandMessage.setExecutionContextId(executionContext.id);
- SDK.multitargetConsoleModel.addMessage(commandMessage);
+ this.addMessage(commandMessage);
/**
* @param {?SDK.RemoteObject} result
* @param {!Protocol.Runtime.ExceptionDetails=} exceptionDetails
+ * @this {SDK.ConsoleModel}
*/
function printResult(result, exceptionDetails) {
if (!result)
return;
- Common.console.showPromise().then(reportUponEvaluation);
- function reportUponEvaluation() {
- SDK.multitargetConsoleModel._consoleModels.get(target).dispatchEventToListeners(
+ Common.console.showPromise().then(() => {
+ this.dispatchEventToListeners(
SDK.ConsoleModel.Events.CommandEvaluated,
{result: result, text: requestedText, commandMessage: commandMessage, exceptionDetails: exceptionDetails});
- }
+ });
}
/**
@@ -141,7 +157,7 @@ SDK.ConsoleModel = class extends Common.Object {
if (looksLikeAnObjectLiteral(text))
text = '(' + text + ')';
- executionContext.evaluate(text, 'console', useCommandLineAPI, false, false, true, true, printResult);
+ executionContext.evaluate(text, 'console', useCommandLineAPI, false, false, true, true, printResult.bind(this));
Host.userMetrics.actionTaken(Host.UserMetrics.Action.ConsoleEvaluated);
}
@@ -153,11 +169,20 @@ SDK.ConsoleModel = class extends Common.Object {
return;
if (msg.source === SDK.ConsoleMessage.MessageSource.ConsoleAPI && msg.type === SDK.ConsoleMessage.MessageType.Clear)
- this.clear();
+ this._clear();
this._messages.push(msg);
- if (msg._exceptionId)
- this._messageByExceptionId.set(msg._exceptionId, msg);
+ if (msg._exceptionId && msg.target()) {
+ // TODO(dgozman): make target non-nullable, as we only have messages without a target
+ // internally in ConsoleView.
+ var target = /** @type {!SDK.Target} */ (msg.target());
+ var targetMap = this._messageByExceptionId.get(target);
+ if (!targetMap) {
+ targetMap = new Map();
+ this._messageByExceptionId.set(target, targetMap);
+ }
+ targetMap.set(msg._exceptionId, msg);
+ }
this._incrementErrorWarningCount(msg);
this.dispatchEventToListeners(SDK.ConsoleModel.Events.MessageAdded, msg);
}
@@ -167,29 +192,32 @@ SDK.ConsoleModel = class extends Common.Object {
*/
_logEntryAdded(event) {
var consoleMessage = new SDK.ConsoleMessage(
- this.target(), event.entry.source, event.entry.level, event.entry.text, undefined, event.entry.url,
+ event.logModel.target(), event.entry.source, event.entry.level, event.entry.text, undefined, event.entry.url,
event.entry.lineNumber, undefined, event.entry.networkRequestId, undefined, event.entry.stackTrace,
event.entry.timestamp, undefined, undefined, event.entry.workerId);
this.addMessage(consoleMessage);
}
/**
+ * @param {!SDK.RuntimeModel} runtimeModel
caseq 2017/03/16 00:38:55 you only use target, so let's bind to target strai
* @param {!Common.Event} event
*/
- _exceptionThrown(event) {
+ _exceptionThrown(runtimeModel, event) {
var exceptionWithTimestamp = /** @type {!SDK.RuntimeModel.ExceptionWithTimestamp} */ (event.data);
var consoleMessage = SDK.ConsoleMessage.fromException(
- this.target(), exceptionWithTimestamp.details, undefined, exceptionWithTimestamp.timestamp, undefined);
+ runtimeModel.target(), exceptionWithTimestamp.details, undefined, exceptionWithTimestamp.timestamp, undefined);
consoleMessage.setExceptionId(exceptionWithTimestamp.details.exceptionId);
this.addMessage(consoleMessage);
}
/**
+ * @param {!SDK.RuntimeModel} runtimeModel
caseq 2017/03/16 00:38:54 ditto.
* @param {!Common.Event} event
*/
- _exceptionRevoked(event) {
+ _exceptionRevoked(runtimeModel, event) {
var exceptionId = /** @type {number} */ (event.data);
- var exceptionMessage = this._messageByExceptionId.get(exceptionId);
+ var targetMap = this._messageByExceptionId.get(runtimeModel.target());
+ var exceptionMessage = targetMap ? targetMap.get(exceptionId) : null;
if (!exceptionMessage)
return;
this._errors--;
@@ -198,9 +226,10 @@ SDK.ConsoleModel = class extends Common.Object {
}
/**
+ * @param {!SDK.RuntimeModel} runtimeModel
* @param {!Common.Event} event
*/
- _consoleAPICalled(event) {
+ _consoleAPICalled(runtimeModel, event) {
caseq 2017/03/16 00:38:55 ditto.
var call = /** @type {!SDK.RuntimeModel.ConsoleAPICall} */ (event.data);
var level = SDK.ConsoleMessage.MessageLevel.Info;
if (call.type === SDK.ConsoleMessage.MessageType.Debug)
@@ -218,7 +247,7 @@ SDK.ConsoleModel = class extends Common.Object {
message = call.args[0].description;
var callFrame = call.stackTrace && call.stackTrace.callFrames.length ? call.stackTrace.callFrames[0] : null;
var consoleMessage = new SDK.ConsoleMessage(
- this.target(), SDK.ConsoleMessage.MessageSource.ConsoleAPI, level,
+ runtimeModel.target(), SDK.ConsoleMessage.MessageSource.ConsoleAPI, level,
/** @type {string} */ (message), call.type, callFrame ? callFrame.url : undefined,
callFrame ? callFrame.lineNumber : undefined, callFrame ? callFrame.columnNumber : undefined, undefined,
call.args, call.stackTrace, call.timestamp, call.executionContextId, undefined);
@@ -230,7 +259,7 @@ SDK.ConsoleModel = class extends Common.Object {
*/
_mainFrameStartedLoading(event) {
if (!Common.moduleSetting('preserveConsoleLog').get())
- this.clear();
+ this._clear();
}
/**
@@ -242,31 +271,34 @@ SDK.ConsoleModel = class extends Common.Object {
}
/**
+ * @param {!SDK.CPUProfilerModel} cpuProfilerModel
* @param {!Common.Event} event
*/
- _consoleProfileStarted(event) {
+ _consoleProfileStarted(cpuProfilerModel, event) {
var data = /** @type {!SDK.CPUProfilerModel.EventData} */ (event.data);
this._addConsoleProfileMessage(
- SDK.ConsoleMessage.MessageType.Profile, data.scriptLocation,
+ cpuProfilerModel, SDK.ConsoleMessage.MessageType.Profile, data.scriptLocation,
Common.UIString('Profile \'%s\' started.', data.title));
}
/**
+ * @param {!SDK.CPUProfilerModel} cpuProfilerModel
* @param {!Common.Event} event
*/
- _consoleProfileFinished(event) {
+ _consoleProfileFinished(cpuProfilerModel, event) {
var data = /** @type {!SDK.CPUProfilerModel.EventData} */ (event.data);
this._addConsoleProfileMessage(
- SDK.ConsoleMessage.MessageType.ProfileEnd, data.scriptLocation,
+ cpuProfilerModel, SDK.ConsoleMessage.MessageType.ProfileEnd, data.scriptLocation,
Common.UIString('Profile \'%s\' finished.', data.title));
}
/**
+ * @param {!SDK.CPUProfilerModel} cpuProfilerModel
* @param {string} type
* @param {!SDK.DebuggerModel.Location} scriptLocation
* @param {string} messageText
*/
- _addConsoleProfileMessage(type, scriptLocation, messageText) {
+ _addConsoleProfileMessage(cpuProfilerModel, type, scriptLocation, messageText) {
caseq 2017/03/16 00:38:55 let's pass target instead.
var stackTrace = [{
functionName: '',
scriptId: scriptLocation.scriptId,
@@ -275,17 +307,18 @@ SDK.ConsoleModel = class extends Common.Object {
columnNumber: scriptLocation.columnNumber || 0
}];
this.addMessage(new SDK.ConsoleMessage(
- this.target(), SDK.ConsoleMessage.MessageSource.ConsoleAPI, SDK.ConsoleMessage.MessageLevel.Info, messageText,
- type, undefined, undefined, undefined, undefined, stackTrace));
+ cpuProfilerModel.target(), SDK.ConsoleMessage.MessageSource.ConsoleAPI, SDK.ConsoleMessage.MessageLevel.Info,
+ messageText, type, undefined, undefined, undefined, undefined, stackTrace));
}
/**
+ * @param {!SDK.NetworkManager} networkManager
* @param {!Common.Event} event
*/
- _networkWarningGenerated(event) {
+ _networkWarningGenerated(networkManager, event) {
var warning = /** @type {!SDK.NetworkManager.Warning} */ (event.data);
this.addMessage(new SDK.ConsoleMessage(
- this.target(), SDK.ConsoleMessage.MessageSource.Network, SDK.ConsoleMessage.MessageLevel.Warning,
+ networkManager.target(), SDK.ConsoleMessage.MessageSource.Network, SDK.ConsoleMessage.MessageLevel.Warning,
warning.message, undefined, undefined, undefined, undefined, warning.requestId));
}
@@ -313,17 +346,16 @@ SDK.ConsoleModel = class extends Common.Object {
}
requestClearMessages() {
- var logModel = this.target().model(SDK.LogModel);
- if (logModel)
+ for (var logModel of SDK.targetManager.models(SDK.LogModel))
logModel.requestClear();
- this.clear();
- this.target().runtimeModel.discardConsoleEntries();
+ for (var runtimeModel of SDK.targetManager.models(SDK.RuntimeModel))
+ runtimeModel.discardConsoleEntries();
+ this._clear();
}
- clear() {
+ _clear() {
this._messages = [];
this._messageByExceptionId.clear();
- // TODO(dgozman): clear exceptions and console api entries in runtimeModel.
this._errors = 0;
this._warnings = 0;
this.dispatchEventToListeners(SDK.ConsoleModel.Events.ConsoleCleared);
@@ -638,126 +670,9 @@ SDK.ConsoleMessage.MessageLevel.ordinal = function(level) {
return 3;
};
-/**
- * @implements {SDK.TargetManager.Observer}
- * @unrestricted
- */
-SDK.MultitargetConsoleModel = class extends Common.Object {
- constructor() {
- super();
- /** @type {!Map<!SDK.Target, !SDK.ConsoleModel>} */
- this._consoleModels = new Map();
- SDK.targetManager.observeTargets(this);
- }
-
- /**
- * @override
- * @param {!SDK.Target} target
- */
- targetAdded(target) {
- var consoleModel = new SDK.ConsoleModel(target);
- this._consoleModels.set(target, consoleModel);
- consoleModel[SDK.MultitargetConsoleModel._events] = [
- 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;
- consoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this);
- }
- }
-
- /**
- * @override
- * @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;
- consoleModel.removeEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this);
- }
- }
-
- /**
- * @return {!Array.<!SDK.ConsoleMessage>}
- */
- messages() {
- var result = [];
- 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;
- }
-
- _consoleCleared() {
- this.dispatchEventToListeners(SDK.ConsoleModel.Events.ConsoleCleared);
- }
-
- /**
- * @param {!Common.Event} event
- */
- _consoleMessageAdded(event) {
- this.dispatchEventToListeners(SDK.ConsoleModel.Events.MessageAdded, event.data);
- }
-
- /**
- * @param {!Common.Event} event
- */
- _consoleMessageUpdated(event) {
- this.dispatchEventToListeners(SDK.ConsoleModel.Events.MessageUpdated, event.data);
- }
-
- /**
- * @param {!Common.Event} event
- */
- _commandEvaluated(event) {
- this.dispatchEventToListeners(SDK.ConsoleModel.Events.CommandEvaluated, event.data);
- }
-};
-
-SDK.MultitargetConsoleModel._events = Symbol('SDK.MultitargetConsoleModel.events');
+SDK.ConsoleModel._events = Symbol('SDK.ConsoleModel.events');
/**
- * @type {!SDK.MultitargetConsoleModel}
+ * @type {!SDK.ConsoleModel}
*/
-SDK.multitargetConsoleModel;
+SDK.consoleModel;

Powered by Google App Engine
This is Rietveld 408576698