[dwa_service] Add observer pattern to subscribe to public key changes This commit adds observer pattern to listen to changes in encryption public key. The returned key is in its decoded form. Bug: b:445106658 Change-Id: I3557070a7244bf65860bd105adf29bcb8498eed7 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7084035 Reviewed-by: Alexei Svitkine <asvitkine@chromium.org> Commit-Queue: Chirag Arora <heychirag@google.com> Reviewed-by: Jay Zhou <zhouzj@google.com> Cr-Commit-Position: refs/heads/main@{#1538001} NOKEYCHECK=True GitOrigin-RevId: b5ae063cecf88af781bb0887f492301f7d88c3ae
diff --git a/dwa/dwa_service.cc b/dwa/dwa_service.cc index 3db09c9..57b80fd 100644 --- a/dwa/dwa_service.cc +++ b/dwa/dwa_service.cc
@@ -151,6 +151,14 @@ reporting_service_.unsent_log_store()->Purge(); } +void DwaService::AddObserver(Observer* observer) { + observers_.AddObserver(observer); +} + +void DwaService::RemoveObserver(Observer* observer) { + observers_.RemoveObserver(observer); +} + void DwaService::RefreshEncryptionPublicKey() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -208,6 +216,9 @@ } encryption_public_key_ = encryption_public_key; + for (Observer& observer : observers_) { + observer.OnEncryptionPublicKeyChanged(*cwt); + } } }
diff --git a/dwa/dwa_service.h b/dwa/dwa_service.h index 8e6c831..e412a0b 100644 --- a/dwa/dwa_service.h +++ b/dwa/dwa_service.h
@@ -12,6 +12,8 @@ #include <vector> #include "base/memory/weak_ptr.h" +#include "base/observer_list.h" +#include "base/observer_list_types.h" #include "base/sequence_checker.h" #include "components/metrics/dwa/dwa_recorder.h" #include "components/metrics/metrics_rotation_scheduler.h" @@ -32,6 +34,13 @@ // analytics events. class DwaService { public: + class Observer : public base::CheckedObserver { + public: + // Called when the encryption public key is changed. + virtual void OnEncryptionPublicKeyChanged( + const fcp::confidential_compute::OkpCwt& decoded_public_key) = 0; + }; + DwaService(MetricsServiceClient* client, PrefService* pref_service, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory); @@ -49,6 +58,12 @@ // Clears all event and log data. void Purge(); + // Adds an observer to be notified of changes to the encryption public key. + void AddObserver(Observer* observer); + + // Removes an observer to be notified of changes to the encryption public key. + void RemoveObserver(Observer* observer); + // Refresh the public key used to encrypt private metric reports. void RefreshEncryptionPublicKey(); @@ -195,6 +210,9 @@ base::RepeatingCallback<bool(const fcp::confidential_compute::OkpCwt&)> encryption_public_key_verifier_; + // List of observers to be notified of changes to the encryption public key. + base::ObserverList<Observer> observers_; + // Weak pointers factory used to post task on different threads. All weak // pointers managed by this factory have the same lifetime as DwaService. base::WeakPtrFactory<DwaService> self_ptr_factory_{this};