1 // Copyright 2022 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "components/metrics/metrics_logs_event_manager.h"
10 bool MetricsLogsEventManager::ScopedNotifyLogType::instance_exists_ = false;
12 MetricsLogsEventManager::ScopedNotifyLogType::ScopedNotifyLogType(
13 MetricsLogsEventManager* logs_event_manager,
14 MetricsLog::LogType log_type)
15 : logs_event_manager_(logs_event_manager) {
16 DCHECK(!instance_exists_);
17 instance_exists_ = true;
18 if (logs_event_manager_)
19 logs_event_manager_->NotifyLogType(log_type);
22 MetricsLogsEventManager::ScopedNotifyLogType::~ScopedNotifyLogType() {
23 DCHECK(instance_exists_);
24 if (logs_event_manager_)
25 logs_event_manager_->NotifyLogType(absl::nullopt);
26 instance_exists_ = false;
29 MetricsLogsEventManager::MetricsLogsEventManager() = default;
30 MetricsLogsEventManager::~MetricsLogsEventManager() = default;
32 void MetricsLogsEventManager::AddObserver(Observer* observer) {
33 observers_.AddObserver(observer);
36 void MetricsLogsEventManager::RemoveObserver(Observer* observer) {
37 observers_.RemoveObserver(observer);
40 void MetricsLogsEventManager::NotifyLogCreated(base::StringPiece log_hash,
41 base::StringPiece log_data,
42 base::StringPiece log_timestamp,
43 CreateReason reason) {
44 for (Observer& observer : observers_)
45 observer.OnLogCreated(log_hash, log_data, log_timestamp, reason);
48 void MetricsLogsEventManager::NotifyLogEvent(LogEvent event,
49 base::StringPiece log_hash,
50 base::StringPiece message) {
51 for (Observer& observer : observers_)
52 observer.OnLogEvent(event, log_hash, message);
55 void MetricsLogsEventManager::NotifyLogType(
56 absl::optional<MetricsLog::LogType> log_type) {
57 for (Observer& observer : observers_)
58 observer.OnLogType(log_type);
61 } // namespace metrics