Commit a91e5309 authored by dgozman's avatar dgozman Committed by Commit bot

[DevTools] Turn ConsoleModel into a singleton

This effectively merges ConsoleModel and MultitargetConsoleModel.

This is in preparation to extracting ConsoleModel out of SDK and
turning it into ConsoleView's presentation model.

BUG=none

Review-Url: https://codereview.chromium.org/2751173003
Cr-Commit-Position: refs/heads/master@{#457354}
parent 2b9f74d8
......@@ -24,7 +24,7 @@ function frameLoaded(event) {
function test()
{
for (var message of SDK.multitargetConsoleModel.messages()) {
for (var message of SDK.consoleModel.messages()) {
var args = (message.parameters || []).map((arg) => arg.type);
InspectorTest.addResult("Message: \"" + message.messageText + "\", arguments: [" + args.join(", ") + "]");
}
......
......@@ -31,7 +31,7 @@ function createIFrame()
function test()
{
for (var message of SDK.multitargetConsoleModel.messages()) {
for (var message of SDK.consoleModel.messages()) {
var args = (message.parameters || []).map((arg) => arg.type);
InspectorTest.addResult("Message: \"" + message.messageText + "\", arguments: [" + args.join(", ") + "]");
}
......
......@@ -16,7 +16,7 @@ function test()
var mainTarget = SDK.targetManager.mainTarget();
var debuggerModel = SDK.DebuggerModel.fromTarget(mainTarget);
var message = new SDK.ConsoleMessage(mainTarget, SDK.ConsoleMessage.MessageSource.JS, SDK.ConsoleMessage.MessageLevel.Info, "hello?", null, "http://127.0.0.1:8000/inspector/resources/source2.js");
SDK.multitargetConsoleModel.addMessage(message);
SDK.consoleModel.addMessage(message);
debuggerModel.addEventListener(SDK.DebuggerModel.Events.ParsedScriptSource, onScriptAdded);
InspectorTest.dumpConsoleMessages();
......
......@@ -987,7 +987,7 @@ SDK.targetManager.observeTargets({
InspectorTest.serviceWorkerManager = target.model(SDK.ServiceWorkerManager);
InspectorTest.tracingManager = target.model(SDK.TracingManager);
InspectorTest.mainTarget = target;
Promise.resolve().then(() => { InspectorTest.consoleModel = SDK.multitargetConsoleModel._consoleModels.get(target); });
InspectorTest.consoleModel = SDK.consoleModel;
},
targetRemoved: function(target) { }
......
......@@ -30,13 +30,13 @@ function test()
function waitForConsoleMessage(regex)
{
return new Promise(function(resolve) {
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, sniff);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, sniff);
function sniff(e)
{
if (e.data && regex.test(e.data.messageText)) {
resolve(e.data);
SDK.multitargetConsoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, sniff);
SDK.consoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, sniff);
}
}
});
......
......@@ -5,7 +5,7 @@
<script>
function test()
{
InspectorTest.consoleModel.addMessage(new SDK.ConsoleMessage(InspectorTest.consoleModel.target(), SDK.ConsoleMessage.MessageSource.Other, SDK.ConsoleMessage.MessageLevel.Info, "PASS"));
InspectorTest.consoleModel.addMessage(new SDK.ConsoleMessage(InspectorTest.mainTarget, SDK.ConsoleMessage.MessageSource.Other, SDK.ConsoleMessage.MessageLevel.Info, "PASS"));
Common.settingForTest("preserveConsoleLog").set(true);
InspectorTest.reloadPage(function() {
InspectorTest.dumpConsoleMessages();
......
......@@ -18,8 +18,8 @@ function handlePromiseRejection()
function test()
{
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, InspectorTest.wrapListener(messageAdded));
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.MessageUpdated, InspectorTest.wrapListener(messageUpdated));
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, InspectorTest.wrapListener(messageAdded));
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageUpdated, InspectorTest.wrapListener(messageUpdated));
InspectorTest.addResult("Creating worker with promise");
InspectorTest.evaluateInPageWithTimeout("createPromise()");
......
......@@ -14,7 +14,7 @@ function test()
function addMessageWithFixedTimestamp(messageText, timestamp)
{
var message = new SDK.ConsoleMessage(
InspectorTest.consoleModel.target(),
InspectorTest.mainTarget,
SDK.ConsoleMessage.MessageSource.Other, // source
SDK.ConsoleMessage.MessageLevel.Info, // level
messageText,
......
......@@ -64,11 +64,11 @@ function initialize_extensionsPanelTest()
InspectorTest.disableConsoleViewport();
InspectorTest.evaluateInPage("logMessage()");
var wrappedConsoleMessageAdded = InspectorTest.safeWrap(consoleMessageAdded);
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, wrappedConsoleMessageAdded);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, wrappedConsoleMessageAdded);
function consoleMessageAdded()
{
SDK.multitargetConsoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, wrappedConsoleMessageAdded);
SDK.consoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, wrappedConsoleMessageAdded);
Console.ConsoleView.instance()._viewportThrottler.flush();
InspectorTest.deprecatedRunAfterPendingDispatches(clickOnMessage)
}
......
......@@ -62,7 +62,7 @@ function dispatchEvents()
function test()
{
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, InspectorTest.safeWrap(onConsoleMessage));
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, InspectorTest.safeWrap(onConsoleMessage));
step1();
function step1()
......
......@@ -40,7 +40,7 @@ function test()
function testDumpFunctionDefinition(next)
{
InspectorTest.addSniffer(ObjectUI.ObjectPropertiesSection, "formatObjectAsFunction", onConsoleMessagesReceived);
SDK.ConsoleModel.evaluateCommandInConsole(UI.context.flavor(SDK.ExecutionContext), "jumpToMe");
SDK.consoleModel.evaluateCommandInConsole(UI.context.flavor(SDK.ExecutionContext), "jumpToMe");
function onConsoleMessagesReceived()
{
......
......@@ -514,22 +514,19 @@
TestSuite.prototype.testConsoleOnNavigateBack = function() {
function filteredMessages() {
return SDK.multitargetConsoleModel.messages().filter(
a => a.source !== SDK.ConsoleMessage.MessageSource.Violation);
return SDK.consoleModel.messages().filter(a => a.source !== SDK.ConsoleMessage.MessageSource.Violation);
}
if (filteredMessages().length === 1) {
if (filteredMessages().length === 1)
firstConsoleMessageReceived.call(this, null);
} else {
SDK.multitargetConsoleModel.addEventListener(
SDK.ConsoleModel.Events.MessageAdded, firstConsoleMessageReceived, this);
}
else
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, firstConsoleMessageReceived, this);
function firstConsoleMessageReceived(event) {
if (event && event.data.source === SDK.ConsoleMessage.MessageSource.Violation)
return;
SDK.multitargetConsoleModel.removeEventListener(
SDK.ConsoleModel.Events.MessageAdded, firstConsoleMessageReceived, this);
SDK.consoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, firstConsoleMessageReceived, this);
this.evaluateInConsole_('clickLink();', didClickLink.bind(this));
}
......@@ -685,12 +682,12 @@
messages.splice(index, 1);
if (!messages.length) {
SDK.multitargetConsoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);
SDK.consoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);
next();
}
}
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);
SDK.multitargetNetworkManager.setNetworkConditions(preset);
}
......@@ -835,7 +832,7 @@
};
TestSuite.prototype.testWindowInitializedOnNavigateBack = function() {
var messages = SDK.multitargetConsoleModel.messages();
var messages = SDK.consoleModel.messages();
this.assertEquals(1, messages.length);
var text = messages[0].messageText;
if (text.indexOf('Uncaught') !== -1)
......@@ -870,7 +867,7 @@
};
TestSuite.prototype.waitForTestResultsInConsole = function() {
var messages = SDK.multitargetConsoleModel.messages();
var messages = SDK.consoleModel.messages();
for (var i = 0; i < messages.length; ++i) {
var text = messages[i].messageText;
if (text === 'PASS')
......@@ -887,7 +884,7 @@
this.fail(text);
}
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);
this.takeControl();
};
......@@ -931,12 +928,12 @@
Array.prototype.slice.call(arguments, 1, -1).map(arg => JSON.stringify(arg)).join(',') + ',';
this.evaluateInConsole_(
`${functionName}(${argsString} function() { console.log('${doneMessage}'); });`, function() {});
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage);
function onConsoleMessage(event) {
var text = event.data.messageText;
if (text === doneMessage) {
SDK.multitargetConsoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage);
SDK.consoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage);
callback();
}
}
......
......@@ -44,10 +44,9 @@ Bindings.PresentationConsoleMessageHelper = class {
/** @type {!Array.<!Bindings.PresentationConsoleMessage>} */
this._presentationConsoleMessages = [];
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this);
SDK.multitargetConsoleModel.addEventListener(
SDK.ConsoleModel.Events.MessageAdded, this._onConsoleMessageAdded, this);
SDK.multitargetConsoleModel.messages().forEach(this._consoleMessageAdded, this);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, this._onConsoleMessageAdded, this);
SDK.consoleModel.messages().forEach(this._consoleMessageAdded, this);
// TODO(dgozman): setImmediate because we race with DebuggerWorkspaceBinding on ParsedScriptSource event delivery.
SDK.targetManager.addModelListener(
SDK.DebuggerModel, SDK.DebuggerModel.Events.ParsedScriptSource,
......
......@@ -191,7 +191,7 @@ Console.ConsolePrompt = class extends UI.Widget {
this.setText('');
var currentExecutionContext = UI.context.flavor(SDK.ExecutionContext);
if (currentExecutionContext) {
SDK.ConsoleModel.evaluateCommandInConsole(currentExecutionContext, text, useCommandLineAPI);
SDK.consoleModel.evaluateCommandInConsole(currentExecutionContext, text, useCommandLineAPI);
if (Console.ConsolePanel.instance().isShowing())
Host.userMetrics.actionTaken(Host.UserMetrics.Action.CommandEvaluatedInConsolePanel);
}
......
......@@ -182,7 +182,7 @@ Console.ConsoleView = class extends UI.VBox {
}
static clearConsole() {
SDK.multitargetConsoleModel.requestClearMessages();
SDK.consoleModel.requestClearMessages();
}
/**
......@@ -225,14 +225,11 @@ Console.ConsoleView = class extends UI.VBox {
}
_fetchMultitargetMessages() {
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this);
SDK.multitargetConsoleModel.addEventListener(
SDK.ConsoleModel.Events.MessageAdded, this._onConsoleMessageAdded, this);
SDK.multitargetConsoleModel.addEventListener(
SDK.ConsoleModel.Events.MessageUpdated, this._onConsoleMessageUpdated, this);
SDK.multitargetConsoleModel.addEventListener(
SDK.ConsoleModel.Events.CommandEvaluated, this._commandEvaluated, this);
SDK.multitargetConsoleModel.messages().forEach(this._addConsoleMessage, this);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._consoleCleared, this);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, this._onConsoleMessageAdded, this);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageUpdated, this._onConsoleMessageUpdated, this);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.CommandEvaluated, this._commandEvaluated, this);
SDK.consoleModel.messages().forEach(this._addConsoleMessage, this);
this._viewport.invalidate();
}
......@@ -805,7 +802,7 @@ Console.ConsoleView = class extends UI.VBox {
result.target(), exceptionDetails, SDK.ConsoleMessage.MessageType.Result, undefined, undefined);
}
message.setOriginatingMessage(originatingConsoleMessage);
SDK.multitargetConsoleModel.addMessage(message);
SDK.consoleModel.addMessage(message);
}
/**
......
......@@ -165,7 +165,7 @@ Main.Main = class {
UI.ContextMenu.installHandler(document);
UI.Tooltip.installHandler(document);
Components.dockController = new Components.DockController(canDock);
SDK.multitargetConsoleModel = new SDK.MultitargetConsoleModel();
SDK.consoleModel = new SDK.ConsoleModel();
SDK.multitargetNetworkManager = new SDK.MultitargetNetworkManager();
SDK.targetManager.addEventListener(
SDK.TargetManager.Events.SuspendStateChanged, this._onSuspendStateChanged.bind(this));
......@@ -602,9 +602,9 @@ Main.Main.WarningErrorCounter = class {
this._warnings = this._createItem(shadowRoot, 'smallicon-warning');
this._titles = [];
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._update, this);
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, this._update, this);
SDK.multitargetConsoleModel.addEventListener(SDK.ConsoleModel.Events.MessageUpdated, this._update, this);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared, this._update, this);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, this._update, this);
SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageUpdated, this._update, this);
this._update();
}
......@@ -637,8 +637,8 @@ Main.Main.WarningErrorCounter = class {
}
_update() {
var errors = SDK.multitargetConsoleModel.errors();
var warnings = SDK.multitargetConsoleModel.warnings();
var errors = SDK.consoleModel.errors();
var warnings = SDK.consoleModel.warnings();
this._titles = [];
this._toolbarItem.setVisible(!!(errors || warnings));
......
......@@ -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
* @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
* @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) {
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) {
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;
......@@ -28,7 +28,7 @@ SDK.LogModel = class extends SDK.SDKModel {
* @param {!Protocol.Log.LogEntry} payload
*/
entryAdded(payload) {
this.emit(new SDK.LogModel.EntryAddedEvent(payload));
this.emit(new SDK.LogModel.EntryAddedEvent(this, payload));
}
requestClear() {
......@@ -41,9 +41,11 @@ SDK.SDKModel.register(SDK.LogModel, SDK.Target.Capability.Log);
/** @implements {Common.Emittable} */
SDK.LogModel.EntryAddedEvent = class {
/**
* @param {!SDK.LogModel} logModel
* @param {!Protocol.Log.LogEntry} entry
*/
constructor(entry) {
constructor(logModel, entry) {
this.logModel = logModel;
this.entry = entry;
}
};
......@@ -278,7 +278,7 @@ Snippets.ScriptSnippetModel = class extends Common.Object {
var consoleMessage = new SDK.ConsoleMessage(
target, SDK.ConsoleMessage.MessageSource.JS, SDK.ConsoleMessage.MessageLevel.Info, '', undefined, sourceURL,
undefined, undefined, undefined, [result], undefined, undefined, undefined, scriptId);
SDK.multitargetConsoleModel.addMessage(consoleMessage);
SDK.consoleModel.addMessage(consoleMessage);
}
/**
......@@ -287,7 +287,7 @@ Snippets.ScriptSnippetModel = class extends Common.Object {
* @param {?string=} sourceURL
*/
_printRunOrCompileScriptResultFailure(target, exceptionDetails, sourceURL) {
SDK.multitargetConsoleModel.addMessage(
SDK.consoleModel.addMessage(
SDK.ConsoleMessage.fromException(target, exceptionDetails, undefined, undefined, sourceURL || undefined));
}
......
......@@ -956,7 +956,7 @@ Sources.SourcesPanel = class extends UI.Panel {
if (wasThrown || !result || result.type !== 'string') {
failedToSave(result);
} else {
SDK.ConsoleModel.evaluateCommandInConsole(
SDK.consoleModel.evaluateCommandInConsole(
/** @type {!SDK.ExecutionContext} */ (currentExecutionContext), result.value,
/* useCommandLineAPI */ false);
}
......@@ -1268,7 +1268,7 @@ Sources.SourcesPanel.DebuggingActionDelegate = class {
var text = frame.textEditor.text(frame.textEditor.selection());
var executionContext = UI.context.flavor(SDK.ExecutionContext);
if (executionContext)
SDK.ConsoleModel.evaluateCommandInConsole(executionContext, text, /* useCommandLineAPI */ true);
SDK.consoleModel.evaluateCommandInConsole(executionContext, text, /* useCommandLineAPI */ true);
}
return true;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment