Chromium Code Reviews| Index: components/metrics_services_manager/metrics_services_manager.cc |
| diff --git a/components/metrics_services_manager/metrics_services_manager.cc b/components/metrics_services_manager/metrics_services_manager.cc |
| index e1ec65096b3e21b946d8fdb24bb489d1c3b6fc71..09184ad4cf1b67dd24eb5216a5a45ce9f6b4c352 100644 |
| --- a/components/metrics_services_manager/metrics_services_manager.cc |
| +++ b/components/metrics_services_manager/metrics_services_manager.cc |
| @@ -68,27 +68,40 @@ void MetricsServicesManager::OnRendererProcessCrash() { |
| metrics::MetricsServiceClient* |
| MetricsServicesManager::GetMetricsServiceClient() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| - if (!metrics_service_client_) |
| + if (!metrics_service_client_) { |
| metrics_service_client_ = client_->CreateMetricsServiceClient(); |
| + // base::Unretained is safe since |this| owns the metrics_service_client_. |
| + metrics_service_client_->SetUpdateRunningServicesCallback( |
| + base::Bind(&MetricsServicesManager::UpdateRunningServices, |
| + base::Unretained(this))); |
| + } |
| return metrics_service_client_.get(); |
| } |
| -void MetricsServicesManager::UpdatePermissions(bool may_record, |
| - bool may_upload) { |
| +void MetricsServicesManager::UpdatePermissions(bool current_may_record, |
| + bool current_may_upload) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| + // If the user has opted out of metrics, delete local UKM state. |
| + if (may_record_ && !current_may_record) { |
| + ukm::UkmService* ukm = GetUkmService(); |
| + if (ukm) { |
| + ukm->Purge(); |
| + ukm->ResetClientId(); |
| + } |
| + } |
| + |
| // Stash the current permissions so that we can update the RapporServiceImpl |
| // correctly when the Rappor preference changes. The metrics recording |
| // preference partially determines the initial rappor setting, and also |
| // controls whether FINE metrics are sent. |
| - may_record_ = may_record; |
| - may_upload_ = may_upload; |
| + may_record_ = current_may_record; |
| + may_upload_ = current_may_upload; |
| UpdateRunningServices(); |
| } |
| void MetricsServicesManager::UpdateRunningServices() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| metrics::MetricsService* metrics = GetMetricsService(); |
| - ukm::UkmService* ukm = GetUkmService(); |
| if (client_->OnlyDoMetricsRecording()) { |
| metrics->StartRecordingForTests(); |
| @@ -102,23 +115,29 @@ void MetricsServicesManager::UpdateRunningServices() { |
| if (may_record_) { |
| if (!metrics->recording_active()) |
| metrics->Start(); |
| - |
| - if (may_upload_) { |
| + if (may_upload_) |
| metrics->EnableReporting(); |
| -#if !defined(OFFICIAL_BUILD) |
| - // TODO(holte): Make UKM check sync state instead of official build. |
| - if (ukm) |
| - ukm->EnableReporting(); |
| -#endif |
| - } else { |
| + else |
| metrics->DisableReporting(); |
| - if (ukm) |
| - ukm->DisableReporting(); |
| - } |
| } else { |
| metrics->Stop(); |
| } |
| + ukm::UkmService* ukm = GetUkmService(); |
|
Alexei Svitkine (slow)
2017/02/04 00:52:23
Nit: Make a helper function to update ukm state an
Steven Holte
2017/02/06 21:57:54
Done.
|
| + if (ukm) { |
| + if (may_record_ && |
| + metrics_service_client_->IsHistorySyncEnabledOnAllProfiles()) { |
| + ukm->EnableRecording(); |
| + if (may_upload_) |
| + ukm->EnableReporting(); |
| + else |
| + ukm->DisableReporting(); |
| + } else { |
| + ukm->DisableRecording(); |
| + ukm->DisableReporting(); |
| + } |
| + } |
| + |
| int recording_groups = 0; |
| #if defined(GOOGLE_CHROME_BUILD) |
| if (may_record_) |