| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROMEOS_DBUS_MISSIVE_HISTORY_TRACKER_H_ |
| #define CHROMEOS_DBUS_MISSIVE_HISTORY_TRACKER_H_ |
| |
| #include <atomic> |
| |
| #include "base/functional/callback_forward.h" |
| #include "base/observer_list.h" |
| #include "base/sequence_checker.h" |
| #include "base/task/sequenced_task_runner.h" |
| #include "components/reporting/proto/synced/health.pb.h" |
| |
| namespace reporting { |
| |
| // Asynchronous container for health tracking data. |
| // Attached to ReportClient, accessed/modified on certain dBus calls. |
| class HistoryTracker { |
| public: |
| class Observer : public base::CheckedObserver { |
| public: |
| virtual void OnNewData(const ERPHealthData& data) const = 0; |
| }; |
| |
| HistoryTracker(const HistoryTracker&) = delete; |
| HistoryTracker& operator=(const HistoryTracker&) = delete; |
| ~HistoryTracker(); |
| |
| // Singleton. |
| static HistoryTracker* Get(); |
| |
| // Observer handling. Must happen on `sequenced_task_runner_`. |
| // All regustered observers are called on `sequenced_task_runner_` too. |
| void AddObserver(Observer* observer); |
| void RemoveObserver(const Observer* observer); |
| |
| // Accessors. |
| bool debug_state() const; |
| void set_debug_state(bool state); |
| |
| void retrieve_data(base::OnceCallback<void(const ERPHealthData&)> cb); |
| void set_data(ERPHealthData data, base::OnceClosure cb); |
| |
| private: |
| // To be called by singleton accessor only. |
| explicit HistoryTracker( |
| scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner); |
| |
| scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_; |
| SEQUENCE_CHECKER(sequence_checker_); |
| |
| std::atomic<bool> debug_state_{false}; |
| |
| ERPHealthData data_ GUARDED_BY_CONTEXT(sequence_checker_); |
| |
| base::ObserverList<Observer> observer_list_ |
| GUARDED_BY_CONTEXT(sequence_checker_); |
| }; |
| } // namespace reporting |
| |
| #endif // CHROMEOS_DBUS_MISSIVE_HISTORY_TRACKER_H_ |