1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
// 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,
bool in_memory) = 0;
virtual void StartObservation(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 to check if Ukm database exist. Ukm database might be null if
// initialized within tests.
virtual bool HasUkmDatabase() = 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_
|