forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
metrics_services_manager.h
135 lines (99 loc) · 4.44 KB
/
metrics_services_manager.h
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
132
133
134
135
// Copyright 2014 The Chromium Authors. All rights reserved.
// 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/macros.h"
#include "base/metrics/field_trial.h"
#include "base/threading/thread_checker.h"
namespace base {
class FilePath;
}
namespace metrics {
class MetricsService;
class MetricsServiceClient;
class MetricsStateManager;
}
namespace rappor {
class RapporServiceImpl;
}
namespace ukm {
class UkmService;
}
namespace variations {
class VariationsService;
}
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), RapporServiceImpl and VariationsService.
class MetricsServicesManager {
public:
// Creates the MetricsServicesManager with the given client.
explicit MetricsServicesManager(
std::unique_ptr<MetricsServicesManagerClient> client);
virtual ~MetricsServicesManager();
// Returns the preferred entropy provider used to seed persistent activities
// based on whether or not metrics reporting is permitted on this client.
//
// If there's consent to report metrics, this method returns an entropy
// provider that has a high source of entropy, partially based on the client
// ID. Otherwise, it returns an entropy provider that is based on a low
// entropy source.
std::unique_ptr<const base::FieldTrial::EntropyProvider>
CreateEntropyProvider();
// 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 RapporServiceImpl, creating it if it hasn't been created yet.
rappor::RapporServiceImpl* GetRapporServiceImpl();
// Returns the UkmService, creating it if it hasn't been created yet.
ukm::UkmService* GetUkmService();
// Returns the VariationsService, creating it if it hasn't been created yet.
variations::VariationsService* GetVariationsService();
// Should be called when a plugin loading error occurs.
void OnPluginLoadingError(const base::FilePath& plugin_path);
// Some embedders use this method to notify the metrics system when a
// renderer process exits unexpectedly.
void OnRendererProcessCrash();
// Update the managed services when permissions for uploading metrics change.
void UpdateUploadPermissions(bool may_upload);
private:
// Update the managed services when permissions for recording/uploading
// metrics change.
void UpdateRapporServiceImpl();
// Returns the MetricsServiceClient, creating it if it hasn't been
// created yet (and additionally creating the MetricsService in that case).
metrics::MetricsServiceClient* GetMetricsServiceClient();
metrics::MetricsStateManager* GetMetricsStateManager();
// Update which services are running to match current permissions.
void UpdateRunningServices();
// Update the state of UkmService to match current permissions.
void UpdateUkmService();
// Update 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.
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 RapporServiceImpl, for RAPPOR metric uploads.
std::unique_ptr<rappor::RapporServiceImpl> rappor_service_;
// The VariationsService, for server-side experiments infrastructure.
std::unique_ptr<variations::VariationsService> variations_service_;
DISALLOW_COPY_AND_ASSIGN(MetricsServicesManager);
};
} // namespace metrics_services_manager
#endif // COMPONENTS_METRICS_SERVICES_MANAGER_METRICS_SERVICES_MANAGER_H_