Index: chrome/browser/metrics/chrome_metrics_service_client.cc |
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc |
index 1dfb2f09c40be76367c003161ac05f2750e2f1d8..d2aa299b7f225966f0a7c11a57fc9ecc301dcce2 100644 |
--- a/chrome/browser/metrics/chrome_metrics_service_client.cc |
+++ b/chrome/browser/metrics/chrome_metrics_service_client.cc |
@@ -6,6 +6,7 @@ |
#include <stddef.h> |
+#include <set> |
#include <utility> |
#include <vector> |
@@ -28,6 +29,7 @@ |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/google/google_brand.h" |
+#include "chrome/browser/history/history_service_factory.h" |
#include "chrome/browser/metrics/chrome_metrics_service_accessor.h" |
#include "chrome/browser/metrics/chrome_stability_metrics_provider.h" |
#include "chrome/browser/metrics/https_engagement_metrics_provider.h" |
@@ -35,6 +37,7 @@ |
#include "chrome/browser/metrics/network_quality_estimator_provider_impl.h" |
#include "chrome/browser/metrics/sampling_metrics_provider.h" |
#include "chrome/browser/metrics/subprocess_metrics_provider.h" |
+#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/browser/safe_browsing/certificate_reporting_metrics_provider.h" |
#include "chrome/browser/sync/chrome_sync_client.h" |
#include "chrome/browser/ui/browser_otr_state.h" |
@@ -47,6 +50,7 @@ |
#include "chrome/common/pref_names.h" |
#include "chrome/installer/util/util_constants.h" |
#include "components/browser_watcher/stability_debugging.h" |
+#include "components/history/core/browser/history_service.h" |
#include "components/metrics/call_stack_profile_metrics_provider.h" |
#include "components/metrics/drive_metrics_provider.h" |
#include "components/metrics/file_metrics_provider.h" |
@@ -70,6 +74,7 @@ |
#include "components/prefs/pref_service.h" |
#include "components/sync/device_info/device_count_metrics_provider.h" |
#include "components/translate/core/browser/translate_ranker_metrics_provider.h" |
+#include "components/ukm/ukm_service.h" |
#include "components/version_info/version_info.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/histogram_fetcher.h" |
@@ -318,6 +323,7 @@ std::unique_ptr<ChromeMetricsServiceClient> ChromeMetricsServiceClient::Create( |
// static |
void ChromeMetricsServiceClient::RegisterPrefs(PrefRegistrySimple* registry) { |
metrics::MetricsService::RegisterPrefs(registry); |
+ ukm::UkmService::RegisterPrefs(registry); |
metrics::StabilityMetricsHelper::RegisterPrefs(registry); |
RegisterFileMetricsPreferences(registry); |
@@ -337,6 +343,10 @@ metrics::MetricsService* ChromeMetricsServiceClient::GetMetricsService() { |
return metrics_service_.get(); |
} |
+ukm::UkmService* ChromeMetricsServiceClient::GetUkmService() { |
+ return ukm_service_.get(); |
+} |
+ |
void ChromeMetricsServiceClient::SetMetricsClientId( |
const std::string& client_id) { |
crash_keys::SetMetricsClientIdFromGUID(client_id); |
@@ -553,6 +563,9 @@ void ChromeMetricsServiceClient::Initialize() { |
metrics_service_.reset( |
new metrics::MetricsService(metrics_state_manager_, this, local_state)); |
+ if (base::FeatureList::IsEnabled(ukm::kUkmFeature)) |
+ ukm_service_.reset(new ukm::UkmService(local_state, this)); |
+ |
// Gets access to persistent metrics shared by sub-processes. |
metrics_service_->RegisterMetricsProvider( |
std::unique_ptr<metrics::MetricsProvider>( |
@@ -864,6 +877,21 @@ void ChromeMetricsServiceClient::RegisterForNotifications() { |
OmniboxEventGlobalTracker::GetInstance()->RegisterCallback( |
base::Bind(&ChromeMetricsServiceClient::OnURLOpenedFromOmnibox, |
base::Unretained(this))); |
+ |
+ // Observe history deletions for all profiles. |
+ registrar_.Add(this, chrome::NOTIFICATION_PROFILE_ADDED, |
+ content::NotificationService::AllBrowserContextsAndSources()); |
+ for (Profile* profile : |
+ g_browser_process->profile_manager()->GetLoadedProfiles()) { |
+ RegisterForHistoryDeletions(profile); |
+ } |
+} |
+ |
+void ChromeMetricsServiceClient::RegisterForHistoryDeletions(Profile* profile) { |
+ history::HistoryService* history_service = |
+ HistoryServiceFactory::GetForProfile(profile, |
+ ServiceAccessType::IMPLICIT_ACCESS); |
+ ObserveServiceForDeletions(history_service); |
} |
void ChromeMetricsServiceClient::Observe( |
@@ -884,6 +912,10 @@ void ChromeMetricsServiceClient::Observe( |
metrics_service_->OnApplicationNotIdle(); |
break; |
+ case chrome::NOTIFICATION_PROFILE_ADDED: |
+ RegisterForHistoryDeletions(content::Source<Profile>(source).ptr()); |
+ break; |
+ |
default: |
NOTREACHED(); |
} |
@@ -896,3 +928,8 @@ void ChromeMetricsServiceClient::OnURLOpenedFromOmnibox(OmniboxLog* log) { |
bool ChromeMetricsServiceClient::IsUMACellularUploadLogicEnabled() { |
return metrics::IsCellularLogicEnabled(); |
} |
+ |
+void ChromeMetricsServiceClient::OnHistoryDeleted() { |
+ if (ukm_service_) |
+ ukm_service_->Purge(); |
+} |