OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "android_webview/browser/aw_metrics_service_client.h" | |
6 | |
7 #include "android_webview/common/aw_version_info_values.h" | |
8 #include "base/bind.h" | |
9 #include "base/i18n/rtl.h" | |
10 #include "base/prefs/pref_service.h" | |
11 #include "components/metrics/metrics_service.h" | |
12 #include "components/metrics/metrics_state_manager.h" | |
13 #include "components/metrics/net/net_metrics_log_uploader.h" | |
14 #include "components/metrics/ui/screen_info_metrics_provider.h" | |
15 #include "components/metrics/url_constants.h" | |
16 | |
17 namespace android_webview { | |
18 | |
19 base::LazyInstance<AwMetricsServiceClient>::Leaky g_lazy_instance_; | |
20 | |
21 namespace { | |
22 const int kUploadIntervalMinutes = 30; | |
23 } | |
sgurun-gerrit only
2015/12/21 21:47:25
nit: add // namespace to indicate the end of names
paulmiller
2015/12/22 19:42:04
done
| |
24 | |
25 // static | |
26 AwMetricsServiceClient* AwMetricsServiceClient::GetInstance() { | |
27 return g_lazy_instance_.Pointer(); | |
28 } | |
29 | |
30 // static | |
31 void AwMetricsServiceClient::Initialize( | |
32 PrefService* pref_service, | |
33 net::URLRequestContextGetter* request_context) { | |
34 DCHECK(!is_initialized_); | |
35 | |
36 pref_service_ = pref_service; | |
37 request_context_ = request_context; | |
38 | |
39 metrics_state_manager_ = metrics::MetricsStateManager::Create( | |
40 pref_service_, base::Bind(&AwMetricsServiceClient::IsReportingEnabled, | |
41 base::Unretained(this)), | |
42 base::Bind(&AwMetricsServiceClient::StoreClientInfo, | |
43 base::Unretained(this)), | |
44 base::Bind(&AwMetricsServiceClient::LoadClientInfo, | |
45 base::Unretained(this))); | |
46 metrics_service_.reset(new ::metrics::MetricsService( | |
47 metrics_state_manager_.get(), this, pref_service_)); | |
48 | |
sgurun-gerrit only
2015/12/21 21:47:25
please file a bug that blocks main UMA bug to add
paulmiller
2015/12/22 19:42:04
I'll just copy all the relevant-looking ones from
| |
49 metrics_service_->RegisterMetricsProvider( | |
50 scoped_ptr<metrics::MetricsProvider>( | |
51 new metrics::ScreenInfoMetricsProvider)); | |
52 metrics_service_->InitializeMetricsRecordingState(); | |
53 | |
54 is_initialized_ = true; | |
55 | |
56 if (IsReportingEnabled()) | |
57 metrics_service_->Start(); | |
58 } | |
59 | |
60 void AwMetricsServiceClient::Finalize() { | |
61 DCHECK(is_initialized_); | |
62 metrics_service_->Stop(); | |
63 } | |
64 | |
65 void AwMetricsServiceClient::SetMetricsEnabled(bool enabled) { | |
66 // If the client is already initialized, apply the setting immediately. | |
67 // Otherwise, it will be applied on initialization. | |
68 if (is_initialized_ && is_enabled_ != enabled) { | |
69 if (enabled) { | |
sgurun-gerrit only
2015/12/21 21:47:26
nit: no brackets when if block is oneliner.
paulmiller
2015/12/22 19:42:04
done
| |
70 metrics_service_->Start(); | |
71 } else { | |
72 metrics_service_->Stop(); | |
73 } | |
74 } | |
75 is_enabled_ = enabled; | |
76 } | |
77 | |
78 metrics::MetricsService* AwMetricsServiceClient::GetMetricsService() { | |
79 return metrics_service_.get(); | |
80 } | |
81 | |
82 // In Chrome, UMA and Breakpad are enabled/disabled together by the same | |
83 // checkbox and they share the same client ID (a.k.a. GUID). SetMetricsClientId | |
84 // and OnRecordingDisabled are intended to provide the ID to Breakpad. In | |
85 // WebView, UMA and Breakpad are independent, so these are no-ops. | |
86 | |
87 void AwMetricsServiceClient::SetMetricsClientId(const std::string& client_id) {} | |
88 | |
89 void AwMetricsServiceClient::OnRecordingDisabled() {} | |
90 | |
91 bool AwMetricsServiceClient::IsOffTheRecordSessionActive() { | |
92 // WebView has no incognito mode. | |
93 return false; | |
94 } | |
95 | |
96 int32_t AwMetricsServiceClient::GetProduct() { | |
97 // TODO(paulmiller) Switch this to a WebView product once we have a log source | |
98 // for WebView. | |
sgurun-gerrit only
2015/12/21 21:47:26
this seems to need its own bug (or 564962 is satis
paulmiller
2015/12/22 19:42:04
The purpose of 564962 is to get the log source, so
| |
99 return ::metrics::ChromeUserMetricsExtension::CHROME; | |
100 } | |
101 | |
102 std::string AwMetricsServiceClient::GetApplicationLocale() { | |
103 return base::i18n::GetConfiguredLocale(); | |
104 } | |
105 | |
106 bool AwMetricsServiceClient::GetBrand(std::string* brand_code) { | |
107 // WebView doesn't use brand codes. | |
108 return false; | |
109 } | |
110 | |
111 metrics::SystemProfileProto::Channel AwMetricsServiceClient::GetChannel() { | |
112 // "Channel" means stable, beta, etc. WebView doesn't have channel info yet. | |
113 // TODO(paulmiller) Update this once we have channel info. | |
114 return metrics::SystemProfileProto::CHANNEL_UNKNOWN; | |
115 } | |
116 | |
117 std::string AwMetricsServiceClient::GetVersionString() { | |
118 return PRODUCT_VERSION; | |
119 } | |
120 | |
121 void AwMetricsServiceClient::OnLogUploadComplete() {} | |
122 | |
123 void AwMetricsServiceClient::InitializeSystemProfileMetrics( | |
124 const base::Closure& done_callback) { | |
125 done_callback.Run(); | |
126 } | |
127 | |
128 void AwMetricsServiceClient::CollectFinalMetricsForLog( | |
129 const base::Closure& done_callback) { | |
130 done_callback.Run(); | |
131 } | |
132 | |
133 scoped_ptr<metrics::MetricsLogUploader> AwMetricsServiceClient::CreateUploader( | |
134 const base::Callback<void(int)>& on_upload_complete) { | |
135 return scoped_ptr<::metrics::MetricsLogUploader>( | |
136 new metrics::NetMetricsLogUploader( | |
137 request_context_, | |
138 // TODO(paulmiller): Switch this to metrics::kDefaultMetricsServerUrl | |
139 // once we have a log source for WebView. | |
140 "http://localhost:10000/uma/v2", | |
141 metrics::kDefaultMetricsMimeType, | |
142 on_upload_complete)); | |
143 } | |
144 | |
145 base::TimeDelta AwMetricsServiceClient::GetStandardUploadInterval() { | |
146 return base::TimeDelta::FromMinutes(kUploadIntervalMinutes); | |
147 } | |
148 | |
149 AwMetricsServiceClient::AwMetricsServiceClient() | |
150 : is_initialized_(false), | |
151 is_enabled_(false), | |
152 pref_service_(nullptr), | |
153 request_context_(nullptr) {} | |
154 | |
155 AwMetricsServiceClient::~AwMetricsServiceClient() {} | |
156 | |
157 bool AwMetricsServiceClient::IsReportingEnabled() { | |
158 return is_enabled_; | |
sgurun-gerrit only
2015/12/21 21:47:25
this is called as a callback from metrics service.
paulmiller
2015/12/22 19:42:04
done
| |
159 } | |
160 | |
161 // Store/LoadClientInfo allow Windows Chrome to back up ClientInfo. They're | |
162 // no-ops for WebView. | |
163 | |
164 void AwMetricsServiceClient::StoreClientInfo( | |
165 const metrics::ClientInfo& client_info) {} | |
166 | |
167 scoped_ptr<metrics::ClientInfo> AwMetricsServiceClient::LoadClientInfo() { | |
168 scoped_ptr<metrics::ClientInfo> client_info; | |
169 return client_info.Pass(); | |
170 } | |
171 | |
172 } // namespace android_webview | |
OLD | NEW |