| // 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(); |