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

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: persistedclientid --> forceclientid, review comments 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/cast_browser_process.h"
20 #include "chromecast/browser/cast_content_browser_client.h"
19 #include "chromecast/browser/metrics/cast_stability_metrics_provider.h" 21 #include "chromecast/browser/metrics/cast_stability_metrics_provider.h"
20 #include "chromecast/browser/metrics/platform_metrics_providers.h"
21 #include "chromecast/common/pref_names.h" 22 #include "chromecast/common/pref_names.h"
22 #include "chromecast/public/cast_sys_info.h" 23 #include "chromecast/public/cast_sys_info.h"
23 #include "components/metrics/client_info.h" 24 #include "components/metrics/client_info.h"
24 #include "components/metrics/gpu/gpu_metrics_provider.h" 25 #include "components/metrics/gpu/gpu_metrics_provider.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"
(...skipping 56 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 shell::CastBrowserProcess::GetInstance()->browser_client()->
99 SetMetricsClientId(client_id);
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 // Use "forced" client ID if available.
129 if (!client_id.empty() && base::IsValidGUID(client_id)) { 132 if (!force_client_id_.empty() && base::IsValidGUID(force_client_id_)) {
130 client_info->client_id = client_id; 133 client_info->client_id = force_client_id_;
131 return client_info.Pass(); 134 return client_info.Pass();
135 }
136
137 if (force_client_id_.empty()) {
138 LOG(WARNING) << "Empty client id from platform,"
139 << " assuming this is the first boot up of a new device.";
132 } else { 140 } else {
133 if (client_id.empty()) { 141 LOG(ERROR) << "Invalid client id from platform: " << force_client_id_
134 LOG(WARNING) << "Empty client id from platform," 142 << " from platform.";
135 << " assuming this is the first boot up of a new device.";
136 } else {
137 LOG(ERROR) << "Invalid client id " << client_id << " from platform.";
138 }
139 return scoped_ptr< ::metrics::ClientInfo>();
140 } 143 }
144 return scoped_ptr< ::metrics::ClientInfo>();
141 } 145 }
142 146
143 bool CastMetricsServiceClient::IsOffTheRecordSessionActive() { 147 bool CastMetricsServiceClient::IsOffTheRecordSessionActive() {
144 // Chromecast behaves as "off the record" w/r/t recording browsing state, 148 // Chromecast behaves as "off the record" w/r/t recording browsing state,
145 // but this value is about not disabling metrics because of it. 149 // but this value is about not disabling metrics because of it.
146 return false; 150 return false;
147 } 151 }
148 152
149 int32_t CastMetricsServiceClient::GetProduct() { 153 int32_t CastMetricsServiceClient::GetProduct() {
150 // Chromecast currently uses the same product identifier as Chrome. 154 // Chromecast currently uses the same product identifier as Chrome.
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 } 255 }
252 } 256 }
253 257
254 CastMetricsServiceClient::CastMetricsServiceClient( 258 CastMetricsServiceClient::CastMetricsServiceClient(
255 base::TaskRunner* io_task_runner, 259 base::TaskRunner* io_task_runner,
256 PrefService* pref_service, 260 PrefService* pref_service,
257 net::URLRequestContextGetter* request_context) 261 net::URLRequestContextGetter* request_context)
258 : io_task_runner_(io_task_runner), 262 : io_task_runner_(io_task_runner),
259 pref_service_(pref_service), 263 pref_service_(pref_service),
260 cast_service_(nullptr), 264 cast_service_(nullptr),
265 client_info_loaded_(false),
261 #if defined(OS_LINUX) 266 #if defined(OS_LINUX)
262 external_metrics_(nullptr), 267 external_metrics_(nullptr),
263 platform_metrics_(nullptr), 268 platform_metrics_(nullptr),
264 #endif // defined(OS_LINUX) 269 #endif // defined(OS_LINUX)
265 task_runner_(base::ThreadTaskRunnerHandle::Get()), 270 task_runner_(base::ThreadTaskRunnerHandle::Get()),
266 request_context_(request_context) { 271 request_context_(request_context) {
267 } 272 }
268 273
269 CastMetricsServiceClient::~CastMetricsServiceClient() { 274 CastMetricsServiceClient::~CastMetricsServiceClient() {
270 #if defined(OS_LINUX) 275 #if defined(OS_LINUX)
271 DCHECK(!external_metrics_); 276 DCHECK(!external_metrics_);
272 DCHECK(!platform_metrics_); 277 DCHECK(!platform_metrics_);
273 #endif // defined(OS_LINUX) 278 #endif // defined(OS_LINUX)
274 } 279 }
275 280
281 void CastMetricsServiceClient::SetForceClientId(
282 const std::string& client_id) {
283 DCHECK(force_client_id_.empty());
284 DCHECK(!client_info_loaded_)
285 << "Force client ID must be set before client info is loaded.";
286 force_client_id_ = client_id;
287 }
288
276 void CastMetricsServiceClient::Initialize(CastService* cast_service) { 289 void CastMetricsServiceClient::Initialize(CastService* cast_service) {
277 DCHECK(cast_service); 290 DCHECK(cast_service);
278 DCHECK(!cast_service_); 291 DCHECK(!cast_service_);
279 cast_service_ = cast_service; 292 cast_service_ = cast_service;
280 293
281 metrics_state_manager_ = ::metrics::MetricsStateManager::Create( 294 metrics_state_manager_ = ::metrics::MetricsStateManager::Create(
282 pref_service_, 295 pref_service_,
283 base::Bind(&CastMetricsServiceClient::IsReportingEnabled, 296 base::Bind(&CastMetricsServiceClient::IsReportingEnabled,
284 base::Unretained(this)), 297 base::Unretained(this)),
285 base::Bind(&CastMetricsServiceClient::StoreClientInfo, 298 base::Bind(&CastMetricsServiceClient::StoreClientInfo,
(...skipping 22 matching lines...) Expand all
308 metrics_service_->RegisterMetricsProvider( 321 metrics_service_->RegisterMetricsProvider(
309 scoped_ptr< ::metrics::MetricsProvider>( 322 scoped_ptr< ::metrics::MetricsProvider>(
310 new ::metrics::GPUMetricsProvider)); 323 new ::metrics::GPUMetricsProvider));
311 } 324 }
312 metrics_service_->RegisterMetricsProvider( 325 metrics_service_->RegisterMetricsProvider(
313 scoped_ptr< ::metrics::MetricsProvider>( 326 scoped_ptr< ::metrics::MetricsProvider>(
314 new ::metrics::NetworkMetricsProvider(io_task_runner_))); 327 new ::metrics::NetworkMetricsProvider(io_task_runner_)));
315 metrics_service_->RegisterMetricsProvider( 328 metrics_service_->RegisterMetricsProvider(
316 scoped_ptr< ::metrics::MetricsProvider>( 329 scoped_ptr< ::metrics::MetricsProvider>(
317 new ::metrics::ProfilerMetricsProvider)); 330 new ::metrics::ProfilerMetricsProvider));
318 RegisterPlatformMetricsProviders(metrics_service_.get(), cast_service_); 331 shell::CastBrowserProcess::GetInstance()->browser_client()->
332 RegisterMetricsProviders(metrics_service_.get());
319 333
320 metrics_service_->InitializeMetricsRecordingState(); 334 metrics_service_->InitializeMetricsRecordingState();
321 #if !defined(OS_ANDROID) 335 #if !defined(OS_ANDROID)
322 // Reset clean_shutdown bit after InitializeMetricsRecordingState(). 336 // Reset clean_shutdown bit after InitializeMetricsRecordingState().
323 metrics_service_->LogNeedForCleanShutdown(); 337 metrics_service_->LogNeedForCleanShutdown();
324 #endif // !defined(OS_ANDROID) 338 #endif // !defined(OS_ANDROID)
325 339
326 if (IsReportingEnabled()) 340 if (IsReportingEnabled())
327 metrics_service_->Start(); 341 metrics_service_->Start();
328 342
(...skipping 26 matching lines...) Expand all
355 #endif // defined(OS_LINUX) 369 #endif // defined(OS_LINUX)
356 metrics_service_->Stop(); 370 metrics_service_->Stop();
357 } 371 }
358 372
359 bool CastMetricsServiceClient::IsReportingEnabled() { 373 bool CastMetricsServiceClient::IsReportingEnabled() {
360 return pref_service_->GetBoolean(prefs::kOptInStats); 374 return pref_service_->GetBoolean(prefs::kOptInStats);
361 } 375 }
362 376
363 } // namespace metrics 377 } // namespace metrics
364 } // namespace chromecast 378 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698