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 |