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

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: GN updates, initialize pointer to nullptr 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/pref_names.h" 18 #include "chromecast/base/pref_names.h"
19 #include "chromecast/base/version.h" 19 #include "chromecast/base/version.h"
20 #include "chromecast/browser/cast_browser_process.h"
21 #include "chromecast/browser/cast_content_browser_client.h"
20 #include "chromecast/browser/metrics/cast_stability_metrics_provider.h" 22 #include "chromecast/browser/metrics/cast_stability_metrics_provider.h"
21 #include "chromecast/browser/metrics/platform_metrics_providers.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"
31 #include "components/metrics/url_constants.h" 32 #include "components/metrics/url_constants.h"
(...skipping 55 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
276 void CastMetricsServiceClient::OnApplicationNotIdle() { 281 void CastMetricsServiceClient::OnApplicationNotIdle() {
277 metrics_service_->OnApplicationNotIdle(); 282 metrics_service_->OnApplicationNotIdle();
278 } 283 }
279 284
285 void CastMetricsServiceClient::SetForceClientId(
286 const std::string& client_id) {
287 DCHECK(force_client_id_.empty());
288 DCHECK(!client_info_loaded_)
289 << "Force client ID must be set before client info is loaded.";
290 force_client_id_ = client_id;
291 }
292
280 void CastMetricsServiceClient::Initialize(CastService* cast_service) { 293 void CastMetricsServiceClient::Initialize(CastService* cast_service) {
281 DCHECK(cast_service); 294 DCHECK(cast_service);
282 DCHECK(!cast_service_); 295 DCHECK(!cast_service_);
283 cast_service_ = cast_service; 296 cast_service_ = cast_service;
284 297
285 metrics_state_manager_ = ::metrics::MetricsStateManager::Create( 298 metrics_state_manager_ = ::metrics::MetricsStateManager::Create(
286 pref_service_, 299 pref_service_,
287 base::Bind(&CastMetricsServiceClient::IsReportingEnabled, 300 base::Bind(&CastMetricsServiceClient::IsReportingEnabled,
288 base::Unretained(this)), 301 base::Unretained(this)),
289 base::Bind(&CastMetricsServiceClient::StoreClientInfo, 302 base::Bind(&CastMetricsServiceClient::StoreClientInfo,
(...skipping 22 matching lines...) Expand all
312 metrics_service_->RegisterMetricsProvider( 325 metrics_service_->RegisterMetricsProvider(
313 scoped_ptr< ::metrics::MetricsProvider>( 326 scoped_ptr< ::metrics::MetricsProvider>(
314 new ::metrics::GPUMetricsProvider)); 327 new ::metrics::GPUMetricsProvider));
315 } 328 }
316 metrics_service_->RegisterMetricsProvider( 329 metrics_service_->RegisterMetricsProvider(
317 scoped_ptr< ::metrics::MetricsProvider>( 330 scoped_ptr< ::metrics::MetricsProvider>(
318 new ::metrics::NetworkMetricsProvider(io_task_runner_))); 331 new ::metrics::NetworkMetricsProvider(io_task_runner_)));
319 metrics_service_->RegisterMetricsProvider( 332 metrics_service_->RegisterMetricsProvider(
320 scoped_ptr< ::metrics::MetricsProvider>( 333 scoped_ptr< ::metrics::MetricsProvider>(
321 new ::metrics::ProfilerMetricsProvider)); 334 new ::metrics::ProfilerMetricsProvider));
322 RegisterPlatformMetricsProviders(metrics_service_.get(), cast_service_); 335 shell::CastBrowserProcess::GetInstance()->browser_client()->
336 RegisterMetricsProviders(metrics_service_.get());
323 337
324 metrics_service_->InitializeMetricsRecordingState(); 338 metrics_service_->InitializeMetricsRecordingState();
325 #if !defined(OS_ANDROID) 339 #if !defined(OS_ANDROID)
326 // Reset clean_shutdown bit after InitializeMetricsRecordingState(). 340 // Reset clean_shutdown bit after InitializeMetricsRecordingState().
327 metrics_service_->LogNeedForCleanShutdown(); 341 metrics_service_->LogNeedForCleanShutdown();
328 #endif // !defined(OS_ANDROID) 342 #endif // !defined(OS_ANDROID)
329 343
330 if (IsReportingEnabled()) 344 if (IsReportingEnabled())
331 metrics_service_->Start(); 345 metrics_service_->Start();
332 346
(...skipping 26 matching lines...) Expand all
359 #endif // defined(OS_LINUX) 373 #endif // defined(OS_LINUX)
360 metrics_service_->Stop(); 374 metrics_service_->Stop();
361 } 375 }
362 376
363 bool CastMetricsServiceClient::IsReportingEnabled() { 377 bool CastMetricsServiceClient::IsReportingEnabled() {
364 return pref_service_->GetBoolean(prefs::kOptInStats); 378 return pref_service_->GetBoolean(prefs::kOptInStats);
365 } 379 }
366 380
367 } // namespace metrics 381 } // namespace metrics
368 } // namespace chromecast 382 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/browser/metrics/cast_metrics_service_client.h ('k') | chromecast/browser/metrics/platform_metrics_providers.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698