| // Copyright 2018 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| /** | |
| * @implements {SDK.SDKModelObserver<!SDK.LogModel>} | |
| */ | |
| export default class LogManager { | |
| constructor() { | |
| SDK.targetManager.observeModels(SDK.LogModel, this); | |
| } | |
| /** | |
| * @override | |
| * @param {!SDK.LogModel} logModel | |
| */ | |
| modelAdded(logModel) { | |
| const eventListeners = []; | |
| eventListeners.push(logModel.addEventListener(SDK.LogModel.Events.EntryAdded, this._logEntryAdded, this)); | |
| logModel[_eventSymbol] = eventListeners; | |
| } | |
| /** | |
| * @override | |
| * @param {!SDK.LogModel} logModel | |
| */ | |
| modelRemoved(logModel) { | |
| Common.EventTarget.removeEventListeners(logModel[_eventSymbol]); | |
| } | |
| /** | |
| * @param {!Common.Event} event | |
| */ | |
| _logEntryAdded(event) { | |
| const data = /** @type {{logModel: !SDK.LogModel, entry: !Protocol.Log.LogEntry}} */ (event.data); | |
| const target = data.logModel.target(); | |
| const consoleMessage = new SDK.ConsoleMessage( | |
| target.model(SDK.RuntimeModel), data.entry.source, data.entry.level, data.entry.text, undefined, data.entry.url, | |
| data.entry.lineNumber, undefined, [data.entry.text, ...(data.entry.args || [])], data.entry.stackTrace, | |
| data.entry.timestamp, undefined, undefined, data.entry.workerId); | |
| if (data.entry.networkRequestId) { | |
| SDK.networkLog.associateConsoleMessageWithRequest(consoleMessage, data.entry.networkRequestId); | |
| } | |
| if (consoleMessage.source === SDK.ConsoleMessage.MessageSource.Worker) { | |
| const workerId = consoleMessage.workerId || ''; | |
| // We have a copy of worker messages reported through the page, so that | |
| // user can see messages from the worker which has been already destroyed. | |
| // When opening DevTools, give us some time to connect to the worker and | |
| // not report the message twice if the worker is still alive. | |
| if (SDK.targetManager.targetById(workerId)) { | |
| return; | |
| } | |
| setTimeout(() => { | |
| if (!SDK.targetManager.targetById(workerId)) { | |
| SDK.consoleModel.addMessage(consoleMessage); | |
| } | |
| }, 1000); | |
| } else { | |
| SDK.consoleModel.addMessage(consoleMessage); | |
| } | |
| } | |
| } | |
| const _eventSymbol = Symbol('_events'); | |
| /* Legacy exported object */ | |
| self.BrowserSDK = self.BrowserSDK || {}; | |
| /* Legacy exported object */ | |
| BrowserSDK = BrowserSDK || {}; | |
| /** @constructor */ | |
| BrowserSDK.LogManager = LogManager; | |
| // TODO(crbug.com/1006759): Move out of this module | |
| new LogManager(); |