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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
// Copyright 2014 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_METRICS_SERVICES_MANAGER_METRICS_SERVICES_MANAGER_H_
#define COMPONENTS_METRICS_SERVICES_MANAGER_METRICS_SERVICES_MANAGER_H_
#include <memory>
#include "base/metrics/field_trial.h"
#include "base/threading/thread_checker.h"
namespace metrics {
class MetricsService;
class MetricsServiceClient;
} // namespace metrics
namespace metrics::structured {
class StructuredMetricsService;
}
namespace ukm {
class UkmService;
}
namespace variations {
class EntropyProviders;
class VariationsService;
} // namespace variations
namespace metrics_services_manager {
class MetricsServicesManagerClient;
// MetricsServicesManager is a helper class for embedders that use the various
// metrics-related services in a Chrome-like fashion: MetricsService (via its
// client) and VariationsService.
class MetricsServicesManager {
public:
// Creates the MetricsServicesManager with the given client.
explicit MetricsServicesManager(
std::unique_ptr<MetricsServicesManagerClient> client);
MetricsServicesManager(const MetricsServicesManager&) = delete;
MetricsServicesManager& operator=(const MetricsServicesManager&) = delete;
virtual ~MetricsServicesManager();
// Instantiates the FieldTrialList using Chrome's default entropy provider.
//
// Side effect: Initializes the CleanExitBeacon.
void InstantiateFieldTrialList() const;
// Returns the MetricsService, creating it if it hasn't been created yet (and
// additionally creating the MetricsServiceClient in that case).
metrics::MetricsService* GetMetricsService();
// Returns the UkmService, creating it if it hasn't been created yet.
ukm::UkmService* GetUkmService();
// Returns the StructuredMetricsService associated with the
// |metrics_service_client_|.
metrics::structured::StructuredMetricsService* GetStructuredMetricsService();
// Returns the VariationsService, creating it if it hasn't been created yet.
variations::VariationsService* GetVariationsService();
// Called when loading state changed.
void LoadingStateChanged(bool is_loading);
// Updates the managed services when permissions for uploading metrics change.
void UpdateUploadPermissions(bool may_upload);
// Gets the current state of metric reporting.
bool IsMetricsReportingEnabled() const;
// Gets the current state of metrics consent.
bool IsMetricsConsentGiven() const;
// Returns true iff UKM is allowed for all profiles.
bool IsUkmAllowedForAllProfiles();
// Returns a low entropy provider.
std::unique_ptr<const variations::EntropyProviders>
CreateEntropyProvidersForTesting();
private:
// Returns the MetricsServiceClient, creating it if it hasn't been
// created yet (and additionally creating the MetricsService in that case).
metrics::MetricsServiceClient* GetMetricsServiceClient();
// Updates which services are running to match current permissions.
void UpdateRunningServices();
// Updates the state of UkmService to match current permissions.
void UpdateUkmService();
// Updates the state of StructuredMetricsService to match current permissions.
void UpdateStructuredMetricsService();
// Updates the managed services when permissions for recording/uploading
// metrics change.
void UpdatePermissions(bool current_may_record,
bool current_consent_given,
bool current_may_upload);
// The client passed in from the embedder.
const std::unique_ptr<MetricsServicesManagerClient> client_;
// Ensures that all functions are called from the same thread.
base::ThreadChecker thread_checker_;
// The current metrics reporting setting.
bool may_upload_;
// The current metrics recording setting.
bool may_record_;
// The current metrics setting reflecting if consent was given.
bool consent_given_;
// The MetricsServiceClient. Owns the MetricsService.
std::unique_ptr<metrics::MetricsServiceClient> metrics_service_client_;
// The VariationsService, for server-side experiments infrastructure.
std::unique_ptr<variations::VariationsService> variations_service_;
};
} // namespace metrics_services_manager
#endif // COMPONENTS_METRICS_SERVICES_MANAGER_METRICS_SERVICES_MANAGER_H_
|