| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_UKM_DATA_MANAGER_H_ |
| #define COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_UKM_DATA_MANAGER_H_ |
| |
| #include "services/metrics/public/cpp/ukm_source_id.h" |
| #include "services/metrics/public/mojom/ukm_interface.mojom.h" |
| #include "url/gurl.h" |
| |
| namespace base { |
| class FilePath; |
| } |
| |
| namespace segmentation_platform { |
| |
| class UkmDatabase; |
| class UrlSignalHandler; |
| class UkmConfig; |
| class UkmObserver; |
| |
| // Manages ownership and lifetime of all UKM related classes, like database and |
| // observer. There is only one manager per browser process. Created before |
| // profile initialization and destroyed after all profiles are destroyed. The |
| // database, observer and signal handler can have different lifetimes, see |
| // comments below. |
| class UkmDataManager { |
| public: |
| UkmDataManager() = default; |
| virtual ~UkmDataManager() = default; |
| |
| UkmDataManager(const UkmDataManager&) = delete; |
| UkmDataManager& operator=(const UkmDataManager&) = delete; |
| |
| // Initializes UKM database and the observer of all UKM events. |
| virtual void Initialize(const base::FilePath& database_path, |
| UkmObserver* ukm_observer) = 0; |
| |
| // Returns true when UKM engine is usable. If false, then UKM based engine is |
| // disabled and this class is a no-op. UkmObserver, UrlSignalHandler and |
| // UkmDatabase are not created and are unusable when this method returns |
| // false. |
| virtual bool IsUkmEngineEnabled() = 0; |
| |
| // Can be called at any time, starts observing UKM with the given config. This |
| // must be called after the Initialize() call. |
| virtual void StartObservingUkm(const UkmConfig& config) = 0; |
| |
| // Pauses or resumes observation of UKM, can be called any time, irrespective |
| // of UKM observer's lifetime, similar to StartObservingUkm(). |
| virtual void PauseOrResumeObservation(bool pause) = 0; |
| |
| // Get URL signal handler. The signal handler is safe to use as long as data |
| // manager is alive, so until after all profiles are destroyed. |
| virtual UrlSignalHandler* GetOrCreateUrlHandler() = 0; |
| |
| // Get UKM database. The database is safe to use as long as data manager is |
| // alive, so until after all profiles are destroyed. |
| virtual UkmDatabase* GetUkmDatabase() = 0; |
| |
| // Called when a new UKM entry is added. |
| virtual void OnEntryAdded(ukm::mojom::UkmEntryPtr entry) = 0; |
| |
| // Called when UKM source URL is updated. |
| virtual void OnUkmSourceUpdated(ukm::SourceId source_id, |
| const std::vector<GURL>& urls) = 0; |
| |
| // Keep track of all the segmentation services that hold reference to this |
| // object. |
| virtual void AddRef() = 0; |
| virtual void RemoveRef() = 0; |
| }; |
| |
| } // namespace segmentation_platform |
| |
| #endif // COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_UKM_DATA_MANAGER_H_ |