Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(575)

Side by Side Diff: chromecast/browser/metrics/cast_metrics_service_client.cc

Issue 1298473004: [Chromecast] Moves persistent UMA client ID handling to common code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: remove unused definitions Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromecast/browser/metrics/cast_metrics_service_client.h" 5 #include "chromecast/browser/metrics/cast_metrics_service_client.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/guid.h" 8 #include "base/guid.h"
9 #include "base/i18n/rtl.h" 9 #include "base/i18n/rtl.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/prefs/pref_registry_simple.h" 11 #include "base/prefs/pref_registry_simple.h"
12 #include "base/prefs/pref_service.h" 12 #include "base/prefs/pref_service.h"
13 #include "base/strings/string_number_conversions.h" 13 #include "base/strings/string_number_conversions.h"
14 #include "base/thread_task_runner_handle.h" 14 #include "base/thread_task_runner_handle.h"
15 #include "chromecast/base/cast_sys_info_util.h" 15 #include "chromecast/base/cast_sys_info_util.h"
16 #include "chromecast/base/chromecast_switches.h" 16 #include "chromecast/base/chromecast_switches.h"
17 #include "chromecast/base/path_utils.h" 17 #include "chromecast/base/path_utils.h"
18 #include "chromecast/base/version.h" 18 #include "chromecast/base/version.h"
19 #include "chromecast/browser/metrics/cast_stability_metrics_provider.h" 19 #include "chromecast/browser/metrics/cast_stability_metrics_provider.h"
20 #include "chromecast/browser/metrics/platform_metrics_providers.h" 20 #include "chromecast/browser/metrics/platform_metrics_providers.h"
21 #include "chromecast/common/pref_names.h" 21 #include "chromecast/common/pref_names.h"
22 #include "chromecast/public/cast_sys_info.h" 22 #include "chromecast/public/cast_sys_info.h"
23 #include "components/metrics/client_info.h" 23 #include "components/metrics/client_info.h"
24 #include "components/metrics/gpu/gpu_metrics_provider.h" 24 #include "components/metrics/gpu/gpu_metrics_provider.h"
25 #include "components/metrics/metrics_pref_names.h"
25 #include "components/metrics/metrics_provider.h" 26 #include "components/metrics/metrics_provider.h"
26 #include "components/metrics/metrics_service.h" 27 #include "components/metrics/metrics_service.h"
27 #include "components/metrics/metrics_state_manager.h" 28 #include "components/metrics/metrics_state_manager.h"
28 #include "components/metrics/net/net_metrics_log_uploader.h" 29 #include "components/metrics/net/net_metrics_log_uploader.h"
29 #include "components/metrics/net/network_metrics_provider.h" 30 #include "components/metrics/net/network_metrics_provider.h"
30 #include "components/metrics/profiler/profiler_metrics_provider.h" 31 #include "components/metrics/profiler/profiler_metrics_provider.h"
31 #include "components/metrics/url_constants.h" 32 #include "components/metrics/url_constants.h"
32 #include "content/public/common/content_switches.h" 33 #include "content/public/common/content_switches.h"
33 34
34 #if defined(OS_LINUX) 35 #if defined(OS_LINUX)
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } 88 }
88 89
89 void CastMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) { 90 void CastMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) {
90 registry->RegisterStringPref(kMetricsOldClientID, std::string()); 91 registry->RegisterStringPref(kMetricsOldClientID, std::string());
91 } 92 }
92 93
93 void CastMetricsServiceClient::SetMetricsClientId( 94 void CastMetricsServiceClient::SetMetricsClientId(
94 const std::string& client_id) { 95 const std::string& client_id) {
95 client_id_ = client_id; 96 client_id_ = client_id;
96 LOG(INFO) << "Metrics client ID set: " << client_id; 97 LOG(INFO) << "Metrics client ID set: " << client_id;
97 PlatformSetClientID(cast_service_, client_id); 98 // Ensure |pref_service_| always gets new |client_id| value.
99 pref_service_->SetString(::metrics::prefs::kMetricsClientID, client_id);
gfhuang 2015/08/19 15:48:27 why this is needed? we don't want to write to ::m
gunsch 2015/08/19 15:52:50 Sort of a safety mechanism to replace PlatformSetC
98 } 100 }
99 101
100 void CastMetricsServiceClient::OnRecordingDisabled() { 102 void CastMetricsServiceClient::OnRecordingDisabled() {
101 } 103 }
102 104
103 void CastMetricsServiceClient::StoreClientInfo( 105 void CastMetricsServiceClient::StoreClientInfo(
104 const ::metrics::ClientInfo& client_info) { 106 const ::metrics::ClientInfo& client_info) {
105 const std::string& client_id = client_info.client_id; 107 const std::string& client_id = client_info.client_id;
106 DCHECK(client_id.empty() || base::IsValidGUID(client_id)); 108 DCHECK(client_id.empty() || base::IsValidGUID(client_id));
107 // backup client_id or reset to empty. 109 // backup client_id or reset to empty.
108 SetMetricsClientId(client_id); 110 SetMetricsClientId(client_id);
109 } 111 }
110 112
111 scoped_ptr< ::metrics::ClientInfo> CastMetricsServiceClient::LoadClientInfo() { 113 scoped_ptr< ::metrics::ClientInfo> CastMetricsServiceClient::LoadClientInfo() {
112 scoped_ptr< ::metrics::ClientInfo> client_info(new ::metrics::ClientInfo); 114 scoped_ptr< ::metrics::ClientInfo> client_info(new ::metrics::ClientInfo);
115 client_info_loaded_ = true;
113 116
114 // kMetricsIsNewClientID would be missing if either the device was just 117 // kMetricsIsNewClientID would be missing if either the device was just
115 // FDR'ed, or it is on pre-v1.2 build. 118 // FDR'ed, or it is on pre-v1.2 build.
116 if (!pref_service_->GetBoolean(prefs::kMetricsIsNewClientID)) { 119 if (!pref_service_->GetBoolean(prefs::kMetricsIsNewClientID)) {
117 // If the old client id exists, the device must be on pre-v1.2 build, 120 // If the old client id exists, the device must be on pre-v1.2 build,
118 // instead of just being FDR'ed. 121 // instead of just being FDR'ed.
119 if (!pref_service_->GetString(kMetricsOldClientID).empty()) { 122 if (!pref_service_->GetString(kMetricsOldClientID).empty()) {
120 // Force old client id to be regenerated. See b/9487011. 123 // Force old client id to be regenerated. See b/9487011.
121 client_info->client_id = base::GenerateGUID(); 124 client_info->client_id = base::GenerateGUID();
122 pref_service_->SetBoolean(prefs::kMetricsIsNewClientID, true); 125 pref_service_->SetBoolean(prefs::kMetricsIsNewClientID, true);
123 return client_info.Pass(); 126 return client_info.Pass();
124 } 127 }
125 // else the device was just FDR'ed, pass through. 128 // else the device was just FDR'ed, pass through.
126 } 129 }
127 130
128 const std::string client_id(GetPlatformClientID(cast_service_)); 131 if (!platform_client_id_.empty() && base::IsValidGUID(platform_client_id_)) {
129 if (!client_id.empty() && base::IsValidGUID(client_id)) { 132 client_info->client_id = platform_client_id_;
130 client_info->client_id = client_id;
131 return client_info.Pass(); 133 return client_info.Pass();
132 } else { 134 } else {
133 if (client_id.empty()) { 135 if (platform_client_id_.empty()) {
134 LOG(WARNING) << "Empty client id from platform," 136 LOG(WARNING) << "Empty client id from platform,"
135 << " assuming this is the first boot up of a new device."; 137 << " assuming this is the first boot up of a new device.";
136 } else { 138 } else {
137 LOG(ERROR) << "Invalid client id " << client_id << " from platform."; 139 LOG(ERROR) << "Invalid client id from platform: " << platform_client_id_
140 << " from platform.";
138 } 141 }
139 return scoped_ptr< ::metrics::ClientInfo>(); 142 return scoped_ptr< ::metrics::ClientInfo>();
140 } 143 }
141 } 144 }
142 145
143 bool CastMetricsServiceClient::IsOffTheRecordSessionActive() { 146 bool CastMetricsServiceClient::IsOffTheRecordSessionActive() {
144 // Chromecast behaves as "off the record" w/r/t recording browsing state, 147 // Chromecast behaves as "off the record" w/r/t recording browsing state,
145 // but this value is about not disabling metrics because of it. 148 // but this value is about not disabling metrics because of it.
146 return false; 149 return false;
147 } 150 }
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 } 254 }
252 } 255 }
253 256
254 CastMetricsServiceClient::CastMetricsServiceClient( 257 CastMetricsServiceClient::CastMetricsServiceClient(
255 base::TaskRunner* io_task_runner, 258 base::TaskRunner* io_task_runner,
256 PrefService* pref_service, 259 PrefService* pref_service,
257 net::URLRequestContextGetter* request_context) 260 net::URLRequestContextGetter* request_context)
258 : io_task_runner_(io_task_runner), 261 : io_task_runner_(io_task_runner),
259 pref_service_(pref_service), 262 pref_service_(pref_service),
260 cast_service_(nullptr), 263 cast_service_(nullptr),
264 client_info_loaded_(false),
261 #if defined(OS_LINUX) 265 #if defined(OS_LINUX)
262 external_metrics_(nullptr), 266 external_metrics_(nullptr),
263 platform_metrics_(nullptr), 267 platform_metrics_(nullptr),
264 #endif // defined(OS_LINUX) 268 #endif // defined(OS_LINUX)
265 task_runner_(base::ThreadTaskRunnerHandle::Get()), 269 task_runner_(base::ThreadTaskRunnerHandle::Get()),
266 request_context_(request_context) { 270 request_context_(request_context) {
267 } 271 }
268 272
269 CastMetricsServiceClient::~CastMetricsServiceClient() { 273 CastMetricsServiceClient::~CastMetricsServiceClient() {
270 #if defined(OS_LINUX) 274 #if defined(OS_LINUX)
271 DCHECK(!external_metrics_); 275 DCHECK(!external_metrics_);
272 DCHECK(!platform_metrics_); 276 DCHECK(!platform_metrics_);
273 #endif // defined(OS_LINUX) 277 #endif // defined(OS_LINUX)
274 } 278 }
275 279
280 void CastMetricsServiceClient::SetPersistedClientId(
281 const std::string& client_id) {
282 DCHECK(!client_info_loaded_)
283 << "Persisted client ID must be set before client info is loaded.";
284 platform_client_id_ = client_id;
285 }
286
276 void CastMetricsServiceClient::Initialize(CastService* cast_service) { 287 void CastMetricsServiceClient::Initialize(CastService* cast_service) {
277 DCHECK(cast_service); 288 DCHECK(cast_service);
278 DCHECK(!cast_service_); 289 DCHECK(!cast_service_);
279 cast_service_ = cast_service; 290 cast_service_ = cast_service;
280 291
281 metrics_state_manager_ = ::metrics::MetricsStateManager::Create( 292 metrics_state_manager_ = ::metrics::MetricsStateManager::Create(
282 pref_service_, 293 pref_service_,
283 base::Bind(&CastMetricsServiceClient::IsReportingEnabled, 294 base::Bind(&CastMetricsServiceClient::IsReportingEnabled,
284 base::Unretained(this)), 295 base::Unretained(this)),
285 base::Bind(&CastMetricsServiceClient::StoreClientInfo, 296 base::Bind(&CastMetricsServiceClient::StoreClientInfo,
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 #endif // defined(OS_LINUX) 366 #endif // defined(OS_LINUX)
356 metrics_service_->Stop(); 367 metrics_service_->Stop();
357 } 368 }
358 369
359 bool CastMetricsServiceClient::IsReportingEnabled() { 370 bool CastMetricsServiceClient::IsReportingEnabled() {
360 return pref_service_->GetBoolean(prefs::kOptInStats); 371 return pref_service_->GetBoolean(prefs::kOptInStats);
361 } 372 }
362 373
363 } // namespace metrics 374 } // namespace metrics
364 } // namespace chromecast 375 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698