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

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

Issue 1958003003: Splitting the concept of UMA consent, and should UMA report. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/thread_task_runner_handle.h" 13 #include "base/thread_task_runner_handle.h"
14 #include "build/build_config.h" 14 #include "build/build_config.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" 20 #include "chromecast/browser/cast_browser_process.h"
21 #include "chromecast/browser/cast_content_browser_client.h" 21 #include "chromecast/browser/cast_content_browser_client.h"
22 #include "chromecast/browser/metrics/cast_stability_metrics_provider.h" 22 #include "chromecast/browser/metrics/cast_stability_metrics_provider.h"
23 #include "chromecast/public/cast_sys_info.h" 23 #include "chromecast/public/cast_sys_info.h"
24 #include "components/metrics/client_info.h" 24 #include "components/metrics/client_info.h"
25 #include "components/metrics/enabled_state_provider.h"
25 #include "components/metrics/gpu/gpu_metrics_provider.h" 26 #include "components/metrics/gpu/gpu_metrics_provider.h"
26 #include "components/metrics/metrics_provider.h" 27 #include "components/metrics/metrics_provider.h"
27 #include "components/metrics/metrics_service.h" 28 #include "components/metrics/metrics_service.h"
28 #include "components/metrics/metrics_state_manager.h" 29 #include "components/metrics/metrics_state_manager.h"
29 #include "components/metrics/net/net_metrics_log_uploader.h" 30 #include "components/metrics/net/net_metrics_log_uploader.h"
30 #include "components/metrics/net/network_metrics_provider.h" 31 #include "components/metrics/net/network_metrics_provider.h"
31 #include "components/metrics/profiler/profiler_metrics_provider.h" 32 #include "components/metrics/profiler/profiler_metrics_provider.h"
32 #include "components/metrics/ui/screen_info_metrics_provider.h" 33 #include "components/metrics/ui/screen_info_metrics_provider.h"
33 #include "components/metrics/url_constants.h" 34 #include "components/metrics/url_constants.h"
34 #include "components/prefs/pref_registry_simple.h" 35 #include "components/prefs/pref_registry_simple.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 return channel_map.chrome_channel; 81 return channel_map.chrome_channel;
81 } 82 }
82 83
83 // Any non-empty channel name is considered beta channel 84 // Any non-empty channel name is considered beta channel
84 return ::metrics::SystemProfileProto::CHANNEL_BETA; 85 return ::metrics::SystemProfileProto::CHANNEL_BETA;
85 } 86 }
86 #endif // !defined(OS_ANDROID) 87 #endif // !defined(OS_ANDROID)
87 88
88 } // namespace 89 } // namespace
89 90
91 class CastMetricsServiceClient::CastEnabledStateProvider
92 : public ::metrics::EnabledStateProvider {
93 public:
94 explicit CastEnabledStateProvider(PrefService* pref_service)
95 : pref_service_(pref_service) {}
96 ~CastEnabledStateProvider() override {}
97
98 bool IsConsentGiven() override {
99 return pref_service_->GetBoolean(prefs::kOptInStats);
100 }
101
102 private:
103 PrefService* const pref_service_;
104
105 DISALLOW_COPY_AND_ASSIGN(CastEnabledStateProvider);
106 };
107
90 // static 108 // static
91 std::unique_ptr<CastMetricsServiceClient> CastMetricsServiceClient::Create( 109 std::unique_ptr<CastMetricsServiceClient> CastMetricsServiceClient::Create(
92 base::TaskRunner* io_task_runner, 110 base::TaskRunner* io_task_runner,
93 PrefService* pref_service, 111 PrefService* pref_service,
94 net::URLRequestContextGetter* request_context) { 112 net::URLRequestContextGetter* request_context) {
95 return base::WrapUnique(new CastMetricsServiceClient( 113 return base::WrapUnique(new CastMetricsServiceClient(
96 io_task_runner, pref_service, request_context)); 114 io_task_runner, pref_service, request_context));
97 } 115 }
98 116
99 void CastMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) { 117 void CastMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) {
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 net::URLRequestContextGetter* request_context) 299 net::URLRequestContextGetter* request_context)
282 : io_task_runner_(io_task_runner), 300 : io_task_runner_(io_task_runner),
283 pref_service_(pref_service), 301 pref_service_(pref_service),
284 cast_service_(nullptr), 302 cast_service_(nullptr),
285 client_info_loaded_(false), 303 client_info_loaded_(false),
286 #if defined(OS_LINUX) 304 #if defined(OS_LINUX)
287 external_metrics_(nullptr), 305 external_metrics_(nullptr),
288 platform_metrics_(nullptr), 306 platform_metrics_(nullptr),
289 #endif // defined(OS_LINUX) 307 #endif // defined(OS_LINUX)
290 task_runner_(base::ThreadTaskRunnerHandle::Get()), 308 task_runner_(base::ThreadTaskRunnerHandle::Get()),
309 enabled_state_provider_(new CastEnabledStateProvider(pref_service)),
291 request_context_(request_context) { 310 request_context_(request_context) {
292 } 311 }
293 312
294 CastMetricsServiceClient::~CastMetricsServiceClient() { 313 CastMetricsServiceClient::~CastMetricsServiceClient() {
295 #if defined(OS_LINUX) 314 #if defined(OS_LINUX)
296 DCHECK(!external_metrics_); 315 DCHECK(!external_metrics_);
297 DCHECK(!platform_metrics_); 316 DCHECK(!platform_metrics_);
298 #endif // defined(OS_LINUX) 317 #endif // defined(OS_LINUX)
299 } 318 }
300 319
(...skipping 18 matching lines...) Expand all
319 << "Force client ID must be set before client info is loaded."; 338 << "Force client ID must be set before client info is loaded.";
320 force_client_id_ = client_id; 339 force_client_id_ = client_id;
321 } 340 }
322 341
323 void CastMetricsServiceClient::Initialize(CastService* cast_service) { 342 void CastMetricsServiceClient::Initialize(CastService* cast_service) {
324 DCHECK(cast_service); 343 DCHECK(cast_service);
325 DCHECK(!cast_service_); 344 DCHECK(!cast_service_);
326 cast_service_ = cast_service; 345 cast_service_ = cast_service;
327 346
328 metrics_state_manager_ = ::metrics::MetricsStateManager::Create( 347 metrics_state_manager_ = ::metrics::MetricsStateManager::Create(
329 pref_service_, 348 pref_service_, enabled_state_provider_.get(),
330 base::Bind(&CastMetricsServiceClient::IsReportingEnabled,
331 base::Unretained(this)),
332 base::Bind(&CastMetricsServiceClient::StoreClientInfo, 349 base::Bind(&CastMetricsServiceClient::StoreClientInfo,
333 base::Unretained(this)), 350 base::Unretained(this)),
334 base::Bind(&CastMetricsServiceClient::LoadClientInfo, 351 base::Bind(&CastMetricsServiceClient::LoadClientInfo,
335 base::Unretained(this))); 352 base::Unretained(this)));
336 metrics_service_.reset(new ::metrics::MetricsService( 353 metrics_service_.reset(new ::metrics::MetricsService(
337 metrics_state_manager_.get(), this, pref_service_)); 354 metrics_state_manager_.get(), this, pref_service_));
338 355
339 // Always create a client id as it may also be used by crash reporting, 356 // Always create a client id as it may also be used by crash reporting,
340 // (indirectly) included in feedback, and can be queried during setup. 357 // (indirectly) included in feedback, and can be queried during setup.
341 // For UMA and crash reporting, associated opt-in settings will control 358 // For UMA and crash reporting, associated opt-in settings will control
(...skipping 28 matching lines...) Expand all
370 new ::metrics::ProfilerMetricsProvider)); 387 new ::metrics::ProfilerMetricsProvider));
371 shell::CastBrowserProcess::GetInstance()->browser_client()-> 388 shell::CastBrowserProcess::GetInstance()->browser_client()->
372 RegisterMetricsProviders(metrics_service_.get()); 389 RegisterMetricsProviders(metrics_service_.get());
373 390
374 metrics_service_->InitializeMetricsRecordingState(); 391 metrics_service_->InitializeMetricsRecordingState();
375 #if !defined(OS_ANDROID) 392 #if !defined(OS_ANDROID)
376 // Reset clean_shutdown bit after InitializeMetricsRecordingState(). 393 // Reset clean_shutdown bit after InitializeMetricsRecordingState().
377 metrics_service_->LogNeedForCleanShutdown(); 394 metrics_service_->LogNeedForCleanShutdown();
378 #endif // !defined(OS_ANDROID) 395 #endif // !defined(OS_ANDROID)
379 396
380 if (IsReportingEnabled()) 397 if (enabled_state_provider_->IsReportingEnabled())
381 metrics_service_->Start(); 398 metrics_service_->Start();
382 399
383 #if defined(OS_LINUX) 400 #if defined(OS_LINUX)
384 // Start external metrics collection, which feeds data from external 401 // Start external metrics collection, which feeds data from external
385 // processes into the main external metrics. 402 // processes into the main external metrics.
386 external_metrics_ = new ExternalMetrics( 403 external_metrics_ = new ExternalMetrics(
387 stability_provider, 404 stability_provider,
388 GetHomePathASCII(kExternalUmaEventsRelativePath).value()); 405 GetHomePathASCII(kExternalUmaEventsRelativePath).value());
389 external_metrics_->Start(); 406 external_metrics_->Start();
390 platform_metrics_ = 407 platform_metrics_ =
(...skipping 12 matching lines...) Expand all
403 // Stop metrics service cleanly before destructing CastMetricsServiceClient. 420 // Stop metrics service cleanly before destructing CastMetricsServiceClient.
404 // The pointer will be deleted in StopAndDestroy(). 421 // The pointer will be deleted in StopAndDestroy().
405 external_metrics_->StopAndDestroy(); 422 external_metrics_->StopAndDestroy();
406 external_metrics_ = nullptr; 423 external_metrics_ = nullptr;
407 platform_metrics_->StopAndDestroy(); 424 platform_metrics_->StopAndDestroy();
408 platform_metrics_ = nullptr; 425 platform_metrics_ = nullptr;
409 #endif // defined(OS_LINUX) 426 #endif // defined(OS_LINUX)
410 metrics_service_->Stop(); 427 metrics_service_->Stop();
411 } 428 }
412 429
413 bool CastMetricsServiceClient::IsReportingEnabled() {
414 return pref_service_->GetBoolean(prefs::kOptInStats);
415 }
416
417 } // namespace metrics 430 } // namespace metrics
418 } // namespace chromecast 431 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698