| OLD | NEW |
| 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 "chrome/browser/metrics/chrome_metrics_service_client.h" | 5 #include "chrome/browser/metrics/chrome_metrics_service_client.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <set> |
| 9 #include <utility> | 10 #include <utility> |
| 10 #include <vector> | 11 #include <vector> |
| 11 | 12 |
| 12 #include "base/bind.h" | 13 #include "base/bind.h" |
| 13 #include "base/callback.h" | 14 #include "base/callback.h" |
| 14 #include "base/command_line.h" | 15 #include "base/command_line.h" |
| 15 #include "base/files/file_path.h" | 16 #include "base/files/file_path.h" |
| 16 #include "base/files/file_util.h" | 17 #include "base/files/file_util.h" |
| 17 #include "base/lazy_instance.h" | 18 #include "base/lazy_instance.h" |
| 18 #include "base/logging.h" | 19 #include "base/logging.h" |
| 19 #include "base/memory/ptr_util.h" | 20 #include "base/memory/ptr_util.h" |
| 20 #include "base/metrics/histogram_macros.h" | 21 #include "base/metrics/histogram_macros.h" |
| 21 #include "base/metrics/persistent_histogram_allocator.h" | 22 #include "base/metrics/persistent_histogram_allocator.h" |
| 22 #include "base/path_service.h" | 23 #include "base/path_service.h" |
| 23 #include "base/rand_util.h" | 24 #include "base/rand_util.h" |
| 24 #include "base/strings/string16.h" | 25 #include "base/strings/string16.h" |
| 25 #include "base/threading/platform_thread.h" | 26 #include "base/threading/platform_thread.h" |
| 26 #include "base/threading/thread_task_runner_handle.h" | 27 #include "base/threading/thread_task_runner_handle.h" |
| 27 #include "build/build_config.h" | 28 #include "build/build_config.h" |
| 28 #include "chrome/browser/browser_process.h" | 29 #include "chrome/browser/browser_process.h" |
| 29 #include "chrome/browser/chrome_notification_types.h" | 30 #include "chrome/browser/chrome_notification_types.h" |
| 30 #include "chrome/browser/google/google_brand.h" | 31 #include "chrome/browser/google/google_brand.h" |
| 32 #include "chrome/browser/history/history_service_factory.h" |
| 31 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" | 33 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" |
| 32 #include "chrome/browser/metrics/chrome_stability_metrics_provider.h" | 34 #include "chrome/browser/metrics/chrome_stability_metrics_provider.h" |
| 33 #include "chrome/browser/metrics/https_engagement_metrics_provider.h" | 35 #include "chrome/browser/metrics/https_engagement_metrics_provider.h" |
| 34 #include "chrome/browser/metrics/metrics_reporting_state.h" | 36 #include "chrome/browser/metrics/metrics_reporting_state.h" |
| 35 #include "chrome/browser/metrics/network_quality_estimator_provider_impl.h" | 37 #include "chrome/browser/metrics/network_quality_estimator_provider_impl.h" |
| 36 #include "chrome/browser/metrics/sampling_metrics_provider.h" | 38 #include "chrome/browser/metrics/sampling_metrics_provider.h" |
| 37 #include "chrome/browser/metrics/subprocess_metrics_provider.h" | 39 #include "chrome/browser/metrics/subprocess_metrics_provider.h" |
| 40 #include "chrome/browser/profiles/profile_manager.h" |
| 38 #include "chrome/browser/safe_browsing/certificate_reporting_metrics_provider.h" | 41 #include "chrome/browser/safe_browsing/certificate_reporting_metrics_provider.h" |
| 39 #include "chrome/browser/sync/chrome_sync_client.h" | 42 #include "chrome/browser/sync/chrome_sync_client.h" |
| 40 #include "chrome/browser/ui/browser_otr_state.h" | 43 #include "chrome/browser/ui/browser_otr_state.h" |
| 41 #include "chrome/common/channel_info.h" | 44 #include "chrome/common/channel_info.h" |
| 42 #include "chrome/common/chrome_paths.h" | 45 #include "chrome/common/chrome_paths.h" |
| 43 #include "chrome/common/chrome_paths_internal.h" | 46 #include "chrome/common/chrome_paths_internal.h" |
| 44 #include "chrome/common/chrome_switches.h" | 47 #include "chrome/common/chrome_switches.h" |
| 45 #include "chrome/common/crash_keys.h" | 48 #include "chrome/common/crash_keys.h" |
| 46 #include "chrome/common/features.h" | 49 #include "chrome/common/features.h" |
| 47 #include "chrome/common/pref_names.h" | 50 #include "chrome/common/pref_names.h" |
| 48 #include "chrome/installer/util/util_constants.h" | 51 #include "chrome/installer/util/util_constants.h" |
| 49 #include "components/browser_watcher/stability_debugging.h" | 52 #include "components/browser_watcher/stability_debugging.h" |
| 53 #include "components/history/core/browser/history_service.h" |
| 50 #include "components/metrics/call_stack_profile_metrics_provider.h" | 54 #include "components/metrics/call_stack_profile_metrics_provider.h" |
| 51 #include "components/metrics/drive_metrics_provider.h" | 55 #include "components/metrics/drive_metrics_provider.h" |
| 52 #include "components/metrics/file_metrics_provider.h" | 56 #include "components/metrics/file_metrics_provider.h" |
| 53 #include "components/metrics/gpu/gpu_metrics_provider.h" | 57 #include "components/metrics/gpu/gpu_metrics_provider.h" |
| 54 #include "components/metrics/metrics_pref_names.h" | 58 #include "components/metrics/metrics_pref_names.h" |
| 55 #include "components/metrics/metrics_reporting_default_state.h" | 59 #include "components/metrics/metrics_reporting_default_state.h" |
| 56 #include "components/metrics/metrics_service.h" | 60 #include "components/metrics/metrics_service.h" |
| 57 #include "components/metrics/metrics_service_client.h" | 61 #include "components/metrics/metrics_service_client.h" |
| 58 #include "components/metrics/metrics_state_manager.h" | 62 #include "components/metrics/metrics_state_manager.h" |
| 59 #include "components/metrics/net/cellular_logic_helper.h" | 63 #include "components/metrics/net/cellular_logic_helper.h" |
| 60 #include "components/metrics/net/net_metrics_log_uploader.h" | 64 #include "components/metrics/net/net_metrics_log_uploader.h" |
| 61 #include "components/metrics/net/network_metrics_provider.h" | 65 #include "components/metrics/net/network_metrics_provider.h" |
| 62 #include "components/metrics/net/version_utils.h" | 66 #include "components/metrics/net/version_utils.h" |
| 63 #include "components/metrics/profiler/profiler_metrics_provider.h" | 67 #include "components/metrics/profiler/profiler_metrics_provider.h" |
| 64 #include "components/metrics/profiler/tracking_synchronizer.h" | 68 #include "components/metrics/profiler/tracking_synchronizer.h" |
| 65 #include "components/metrics/stability_metrics_helper.h" | 69 #include "components/metrics/stability_metrics_helper.h" |
| 66 #include "components/metrics/ui/screen_info_metrics_provider.h" | 70 #include "components/metrics/ui/screen_info_metrics_provider.h" |
| 67 #include "components/metrics/url_constants.h" | 71 #include "components/metrics/url_constants.h" |
| 68 #include "components/omnibox/browser/omnibox_metrics_provider.h" | 72 #include "components/omnibox/browser/omnibox_metrics_provider.h" |
| 69 #include "components/prefs/pref_registry_simple.h" | 73 #include "components/prefs/pref_registry_simple.h" |
| 70 #include "components/prefs/pref_service.h" | 74 #include "components/prefs/pref_service.h" |
| 71 #include "components/sync/device_info/device_count_metrics_provider.h" | 75 #include "components/sync/device_info/device_count_metrics_provider.h" |
| 72 #include "components/translate/core/browser/translate_ranker_metrics_provider.h" | 76 #include "components/translate/core/browser/translate_ranker_metrics_provider.h" |
| 77 #include "components/ukm/ukm_service.h" |
| 73 #include "components/version_info/version_info.h" | 78 #include "components/version_info/version_info.h" |
| 74 #include "content/public/browser/browser_thread.h" | 79 #include "content/public/browser/browser_thread.h" |
| 75 #include "content/public/browser/histogram_fetcher.h" | 80 #include "content/public/browser/histogram_fetcher.h" |
| 76 #include "content/public/browser/notification_service.h" | 81 #include "content/public/browser/notification_service.h" |
| 77 #include "extensions/features/features.h" | 82 #include "extensions/features/features.h" |
| 78 #include "ppapi/features/features.h" | 83 #include "ppapi/features/features.h" |
| 79 #include "printing/features/features.h" | 84 #include "printing/features/features.h" |
| 80 | 85 |
| 81 #if defined(OS_ANDROID) | 86 #if defined(OS_ANDROID) |
| 82 #include "chrome/browser/metrics/android_metrics_provider.h" | 87 #include "chrome/browser/metrics/android_metrics_provider.h" |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 std::unique_ptr<ChromeMetricsServiceClient> client( | 316 std::unique_ptr<ChromeMetricsServiceClient> client( |
| 312 new ChromeMetricsServiceClient(state_manager)); | 317 new ChromeMetricsServiceClient(state_manager)); |
| 313 client->Initialize(); | 318 client->Initialize(); |
| 314 | 319 |
| 315 return client; | 320 return client; |
| 316 } | 321 } |
| 317 | 322 |
| 318 // static | 323 // static |
| 319 void ChromeMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) { | 324 void ChromeMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) { |
| 320 metrics::MetricsService::RegisterPrefs(registry); | 325 metrics::MetricsService::RegisterPrefs(registry); |
| 326 ukm::UkmService::RegisterPrefs(registry); |
| 321 metrics::StabilityMetricsHelper::RegisterPrefs(registry); | 327 metrics::StabilityMetricsHelper::RegisterPrefs(registry); |
| 322 | 328 |
| 323 RegisterFileMetricsPreferences(registry); | 329 RegisterFileMetricsPreferences(registry); |
| 324 | 330 |
| 325 metrics::RegisterMetricsReportingStatePrefs(registry); | 331 metrics::RegisterMetricsReportingStatePrefs(registry); |
| 326 | 332 |
| 327 #if defined(OS_ANDROID) | 333 #if defined(OS_ANDROID) |
| 328 AndroidMetricsProvider::RegisterPrefs(registry); | 334 AndroidMetricsProvider::RegisterPrefs(registry); |
| 329 #endif // defined(OS_ANDROID) | 335 #endif // defined(OS_ANDROID) |
| 330 | 336 |
| 331 #if BUILDFLAG(ENABLE_PLUGINS) | 337 #if BUILDFLAG(ENABLE_PLUGINS) |
| 332 PluginMetricsProvider::RegisterPrefs(registry); | 338 PluginMetricsProvider::RegisterPrefs(registry); |
| 333 #endif // BUILDFLAG(ENABLE_PLUGINS) | 339 #endif // BUILDFLAG(ENABLE_PLUGINS) |
| 334 } | 340 } |
| 335 | 341 |
| 336 metrics::MetricsService* ChromeMetricsServiceClient::GetMetricsService() { | 342 metrics::MetricsService* ChromeMetricsServiceClient::GetMetricsService() { |
| 337 return metrics_service_.get(); | 343 return metrics_service_.get(); |
| 338 } | 344 } |
| 339 | 345 |
| 346 ukm::UkmService* ChromeMetricsServiceClient::GetUkmService() { |
| 347 return ukm_service_.get(); |
| 348 } |
| 349 |
| 340 void ChromeMetricsServiceClient::SetMetricsClientId( | 350 void ChromeMetricsServiceClient::SetMetricsClientId( |
| 341 const std::string& client_id) { | 351 const std::string& client_id) { |
| 342 crash_keys::SetMetricsClientIdFromGUID(client_id); | 352 crash_keys::SetMetricsClientIdFromGUID(client_id); |
| 343 } | 353 } |
| 344 | 354 |
| 345 int32_t ChromeMetricsServiceClient::GetProduct() { | 355 int32_t ChromeMetricsServiceClient::GetProduct() { |
| 346 return metrics::ChromeUserMetricsExtension::CHROME; | 356 return metrics::ChromeUserMetricsExtension::CHROME; |
| 347 } | 357 } |
| 348 | 358 |
| 349 std::string ChromeMetricsServiceClient::GetApplicationLocale() { | 359 std::string ChromeMetricsServiceClient::GetApplicationLocale() { |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 // Clear deprecated metrics preference for Android. | 556 // Clear deprecated metrics preference for Android. |
| 547 // TODO(gayane): Cleanup this code after M60 when the pref would be cleared | 557 // TODO(gayane): Cleanup this code after M60 when the pref would be cleared |
| 548 // from clients. | 558 // from clients. |
| 549 #if defined(OS_ANDROID) | 559 #if defined(OS_ANDROID) |
| 550 local_state->ClearPref(prefs::kCrashReportingEnabled); | 560 local_state->ClearPref(prefs::kCrashReportingEnabled); |
| 551 #endif | 561 #endif |
| 552 | 562 |
| 553 metrics_service_.reset( | 563 metrics_service_.reset( |
| 554 new metrics::MetricsService(metrics_state_manager_, this, local_state)); | 564 new metrics::MetricsService(metrics_state_manager_, this, local_state)); |
| 555 | 565 |
| 566 if (base::FeatureList::IsEnabled(ukm::kUkmFeature)) |
| 567 ukm_service_.reset(new ukm::UkmService(local_state, this)); |
| 568 |
| 556 // Gets access to persistent metrics shared by sub-processes. | 569 // Gets access to persistent metrics shared by sub-processes. |
| 557 metrics_service_->RegisterMetricsProvider( | 570 metrics_service_->RegisterMetricsProvider( |
| 558 std::unique_ptr<metrics::MetricsProvider>( | 571 std::unique_ptr<metrics::MetricsProvider>( |
| 559 new SubprocessMetricsProvider())); | 572 new SubprocessMetricsProvider())); |
| 560 | 573 |
| 561 // Register metrics providers. | 574 // Register metrics providers. |
| 562 #if BUILDFLAG(ENABLE_EXTENSIONS) | 575 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 563 metrics_service_->RegisterMetricsProvider( | 576 metrics_service_->RegisterMetricsProvider( |
| 564 std::unique_ptr<metrics::MetricsProvider>( | 577 std::unique_ptr<metrics::MetricsProvider>( |
| 565 new ExtensionsMetricsProvider(metrics_state_manager_))); | 578 new ExtensionsMetricsProvider(metrics_state_manager_))); |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 857 content::NotificationService::AllSources()); | 870 content::NotificationService::AllSources()); |
| 858 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 871 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
| 859 content::NotificationService::AllSources()); | 872 content::NotificationService::AllSources()); |
| 860 registrar_.Add(this, content::NOTIFICATION_RENDER_WIDGET_HOST_HANG, | 873 registrar_.Add(this, content::NOTIFICATION_RENDER_WIDGET_HOST_HANG, |
| 861 content::NotificationService::AllSources()); | 874 content::NotificationService::AllSources()); |
| 862 | 875 |
| 863 omnibox_url_opened_subscription_ = | 876 omnibox_url_opened_subscription_ = |
| 864 OmniboxEventGlobalTracker::GetInstance()->RegisterCallback( | 877 OmniboxEventGlobalTracker::GetInstance()->RegisterCallback( |
| 865 base::Bind(&ChromeMetricsServiceClient::OnURLOpenedFromOmnibox, | 878 base::Bind(&ChromeMetricsServiceClient::OnURLOpenedFromOmnibox, |
| 866 base::Unretained(this))); | 879 base::Unretained(this))); |
| 880 |
| 881 // Observe history deletions for all profiles. |
| 882 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_ADDED, |
| 883 content::NotificationService::AllBrowserContextsAndSources()); |
| 884 for (Profile* profile : |
| 885 g_browser_process->profile_manager()->GetLoadedProfiles()) { |
| 886 RegisterForHistoryDeletions(profile); |
| 887 } |
| 888 } |
| 889 |
| 890 void ChromeMetricsServiceClient::RegisterForHistoryDeletions(Profile* profile) { |
| 891 history::HistoryService* history_service = |
| 892 HistoryServiceFactory::GetForProfile(profile, |
| 893 ServiceAccessType::IMPLICIT_ACCESS); |
| 894 ObserveServiceForDeletions(history_service); |
| 867 } | 895 } |
| 868 | 896 |
| 869 void ChromeMetricsServiceClient::Observe( | 897 void ChromeMetricsServiceClient::Observe( |
| 870 int type, | 898 int type, |
| 871 const content::NotificationSource& source, | 899 const content::NotificationSource& source, |
| 872 const content::NotificationDetails& details) { | 900 const content::NotificationDetails& details) { |
| 873 DCHECK(thread_checker_.CalledOnValidThread()); | 901 DCHECK(thread_checker_.CalledOnValidThread()); |
| 874 | 902 |
| 875 switch (type) { | 903 switch (type) { |
| 876 case chrome::NOTIFICATION_BROWSER_OPENED: | 904 case chrome::NOTIFICATION_BROWSER_OPENED: |
| 877 case chrome::NOTIFICATION_BROWSER_CLOSED: | 905 case chrome::NOTIFICATION_BROWSER_CLOSED: |
| 878 case chrome::NOTIFICATION_TAB_PARENTED: | 906 case chrome::NOTIFICATION_TAB_PARENTED: |
| 879 case chrome::NOTIFICATION_TAB_CLOSING: | 907 case chrome::NOTIFICATION_TAB_CLOSING: |
| 880 case content::NOTIFICATION_LOAD_STOP: | 908 case content::NOTIFICATION_LOAD_STOP: |
| 881 case content::NOTIFICATION_LOAD_START: | 909 case content::NOTIFICATION_LOAD_START: |
| 882 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: | 910 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: |
| 883 case content::NOTIFICATION_RENDER_WIDGET_HOST_HANG: | 911 case content::NOTIFICATION_RENDER_WIDGET_HOST_HANG: |
| 884 metrics_service_->OnApplicationNotIdle(); | 912 metrics_service_->OnApplicationNotIdle(); |
| 885 break; | 913 break; |
| 886 | 914 |
| 915 case chrome::NOTIFICATION_PROFILE_ADDED: |
| 916 RegisterForHistoryDeletions(content::Source<Profile>(source).ptr()); |
| 917 break; |
| 918 |
| 887 default: | 919 default: |
| 888 NOTREACHED(); | 920 NOTREACHED(); |
| 889 } | 921 } |
| 890 } | 922 } |
| 891 | 923 |
| 892 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { | 924 void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { |
| 893 metrics_service_->OnApplicationNotIdle(); | 925 metrics_service_->OnApplicationNotIdle(); |
| 894 } | 926 } |
| 895 | 927 |
| 896 bool ChromeMetricsServiceClient::IsUMACellularUploadLogicEnabled() { | 928 bool ChromeMetricsServiceClient::IsUMACellularUploadLogicEnabled() { |
| 897 return metrics::IsCellularLogicEnabled(); | 929 return metrics::IsCellularLogicEnabled(); |
| 898 } | 930 } |
| 931 |
| 932 void ChromeMetricsServiceClient::OnHistoryDeleted() { |
| 933 if (ukm_service_) |
| 934 ukm_service_->Purge(); |
| 935 } |
| OLD | NEW |