| Index: chrome/browser/metrics/metrics_service.cc
|
| diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc
|
| index fd5f73f9a13c99413556f83c13938a44d6d60aa5..5154ff0309ead133df588a8b811736765d16f986 100644
|
| --- a/chrome/browser/metrics/metrics_service.cc
|
| +++ b/chrome/browser/metrics/metrics_service.cc
|
| @@ -629,6 +629,10 @@ void MetricsService::EnableRecording() {
|
| OpenNewLog();
|
|
|
| SetUpNotifications(®istrar_, this);
|
| + content::RemoveActionCallback(action_callback_);
|
| + action_callback_ = base::Bind(&MetricsService::OnUserAction,
|
| + base::Unretained(this));
|
| + content::AddActionCallback(action_callback_);
|
| }
|
|
|
| void MetricsService::DisableRecording() {
|
| @@ -638,6 +642,7 @@ void MetricsService::DisableRecording() {
|
| return;
|
| recording_active_ = false;
|
|
|
| + content::RemoveActionCallback(action_callback_);
|
| registrar_.RemoveAll();
|
| PushPendingLogsToPersistentStorage();
|
| DCHECK(!log_manager_.has_staged_log());
|
| @@ -661,8 +666,6 @@ void MetricsService::SetUpNotifications(
|
| content::NotificationService::AllBrowserContextsAndSources());
|
| registrar->Add(observer, chrome::NOTIFICATION_BROWSER_CLOSED,
|
| content::NotificationService::AllSources());
|
| - registrar->Add(observer, content::NOTIFICATION_USER_ACTION,
|
| - content::NotificationService::AllSources());
|
| registrar->Add(observer, chrome::NOTIFICATION_TAB_PARENTED,
|
| content::NotificationService::AllSources());
|
| registrar->Add(observer, chrome::NOTIFICATION_TAB_CLOSING,
|
| @@ -693,15 +696,10 @@ void MetricsService::Observe(int type,
|
| DCHECK(log_manager_.current_log());
|
| DCHECK(IsSingleThreaded());
|
|
|
| - if (!CanLogNotification(type, source, details))
|
| + if (!CanLogNotification())
|
| return;
|
|
|
| switch (type) {
|
| - case content::NOTIFICATION_USER_ACTION:
|
| - log_manager_.current_log()->RecordUserAction(
|
| - *content::Details<const char*>(details).ptr());
|
| - break;
|
| -
|
| case chrome::NOTIFICATION_BROWSER_OPENED:
|
| case chrome::NOTIFICATION_BROWSER_CLOSED: {
|
| Browser* browser = content::Source<Browser>(source).ptr();
|
| @@ -1035,6 +1033,14 @@ void MetricsService::OnInitTaskGotGoogleUpdateData(
|
| self_ptr_factory_.GetWeakPtr());
|
| }
|
|
|
| +void MetricsService::OnUserAction(const std::string& action) {
|
| + if (!CanLogNotification())
|
| + return;
|
| +
|
| + log_manager_.current_log()->RecordUserAction(action.c_str());
|
| + HandleIdleSinceLastTransmission(false);
|
| +}
|
| +
|
| void MetricsService::ReceivedProfilerData(
|
| const tracked_objects::ProcessDataSnapshot& process_data,
|
| content::ProcessType process_type) {
|
| @@ -1892,10 +1898,7 @@ void MetricsService::RecordPluginChanges(PrefService* pref) {
|
| child_process_stats_buffer_.clear();
|
| }
|
|
|
| -bool MetricsService::CanLogNotification(
|
| - int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) {
|
| +bool MetricsService::CanLogNotification() {
|
| // We simply don't log anything to UMA if there is a single incognito
|
| // session visible. The problem is that we always notify using the orginal
|
| // profile in order to simplify notification processing.
|
|
|