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.
4
5 #include "components/metrics/metrics_logs_event_manager.h"
6
7 namespace metrics {
8
9 // static
10 bool MetricsLogsEventManager::ScopedNotifyLogType::instance_exists_ = false;
11
ScopedNotifyLogType(MetricsLogsEventManager * logs_event_manager,MetricsLog::LogType log_type)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);
20 }
21
~ScopedNotifyLogType()22 MetricsLogsEventManager::ScopedNotifyLogType::~ScopedNotifyLogType() {
23 DCHECK(instance_exists_);
24 if (logs_event_manager_)
25 logs_event_manager_->NotifyLogType(std::nullopt);
26 instance_exists_ = false;
27 }
28
29 MetricsLogsEventManager::MetricsLogsEventManager() = default;
30 MetricsLogsEventManager::~MetricsLogsEventManager() = default;
31
AddObserver(Observer * observer)32 void MetricsLogsEventManager::AddObserver(Observer* observer) {
33 observers_.AddObserver(observer);
34 }
35
RemoveObserver(Observer * observer)36 void MetricsLogsEventManager::RemoveObserver(Observer* observer) {
37 observers_.RemoveObserver(observer);
38 }
39
NotifyLogCreated(base::StringPiece log_hash,base::StringPiece log_data,base::StringPiece log_timestamp,CreateReason reason)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);
46 }
47
NotifyLogEvent(LogEvent event,base::StringPiece log_hash,base::StringPiece message)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);
53 }
54
NotifyLogType(std::optional<MetricsLog::LogType> log_type)55 void MetricsLogsEventManager::NotifyLogType(
56 std::optional<MetricsLog::LogType> log_type) {
57 for (Observer& observer : observers_)
58 observer.OnLogType(log_type);
59 }
60
61 } // namespace metrics
62