Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1375)

Unified Diff: chrome/browser/notifications/message_center_stats_collector.cc

Issue 23902057: Stats collector for message center. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Re add second histogram Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/notifications/message_center_stats_collector.cc
diff --git a/chrome/browser/notifications/message_center_stats_collector.cc b/chrome/browser/notifications/message_center_stats_collector.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f0c0ad64f7bc0f6ad2a0d1c7e2b72722819f4508
--- /dev/null
+++ b/chrome/browser/notifications/message_center_stats_collector.cc
@@ -0,0 +1,138 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/notifications/message_center_stats_collector.h"
+
+#include <string>
+
+#include "base/metrics/histogram.h"
+#include "content/public/browser/user_metrics.h"
+#include "ui/message_center/message_center.h"
+
+MessageCenterStatsCollector::NotificationStats::NotificationStats() {}
+
+MessageCenterStatsCollector::NotificationStats::NotificationStats(
+ const std::string& id) : id_(id) {
+ for (size_t i = 0; i < NOTIFICATION_ACTION_COUNT; i++) {
+ actions_[i] = false;
+ }
+}
+
+MessageCenterStatsCollector::NotificationStats::~NotificationStats() {}
+
+void MessageCenterStatsCollector::NotificationStats::CollectAction(
+ NotificationActionType type) {
+ DCHECK(!id_.empty());
+
+ UMA_HISTOGRAM_ENUMERATION("Notifications.Actions",
+ type,
+ NOTIFICATION_ACTION_COUNT);
+ actions_[type] = true;
+}
+
+void MessageCenterStatsCollector::NotificationStats::RecordAggregateStats() {
+ DCHECK(!id_.empty());
+
+ for (size_t i = 0; i < NOTIFICATION_ACTION_COUNT; i++) {
+ if (!actions_[i])
+ continue;
+ UMA_HISTOGRAM_ENUMERATION("Notifications.PerNotificationActions",
+ i,
+ NOTIFICATION_ACTION_COUNT);
+ }
+}
+
+MessageCenterStatsCollector::MessageCenterStatsCollector(
+ message_center::MessageCenter* message_center)
+ : message_center_(message_center) {
+ message_center_->AddObserver(this);
+}
+
+MessageCenterStatsCollector::~MessageCenterStatsCollector() {
+ message_center_->RemoveObserver(this);
+}
+
+void MessageCenterStatsCollector::OnNotificationAdded(
+ const std::string& notification_id) {
+ stats_[notification_id] = NotificationStats(notification_id);
+
+ StatsCollection::iterator iter = stats_.find(notification_id);
+ DCHECK(iter != stats_.end());
+
+ stats_[notification_id].CollectAction(NOTIFICATION_ACTION_ADD);
+}
+
+void MessageCenterStatsCollector::OnNotificationRemoved(
+ const std::string& notification_id, bool by_user) {
+ StatsCollection::iterator iter = stats_.find(notification_id);
+ if (iter == stats_.end())
+ return;
+ NotificationStats& notification_stat = iter->second;
+ notification_stat.CollectAction(by_user ?
+ NOTIFICATION_ACTION_CLOSE_BY_USER :
+ NOTIFICATION_ACTION_CLOSE_BY_SYSTEM);
+ notification_stat.RecordAggregateStats();
+ stats_.erase(notification_id);
+}
+
+void MessageCenterStatsCollector::OnNotificationUpdated(
+ const std::string& notification_id) {
+ StatsCollection::iterator iter = stats_.find(notification_id);
+ if (iter == stats_.end())
+ return;
+ NotificationStats& notification_stat = iter->second;
+
+ notification_stat.CollectAction(NOTIFICATION_ACTION_UPDATE);
+}
+
+void MessageCenterStatsCollector::OnNotificationClicked(
+ const std::string& notification_id) {
+ StatsCollection::iterator iter = stats_.find(notification_id);
+ if (iter == stats_.end())
+ return;
+ NotificationStats& notification_stat = iter->second;
+
+ notification_stat.CollectAction(NOTIFICATION_ACTION_CLICK);
+}
+
+void MessageCenterStatsCollector::OnNotificationButtonClicked(
+ const std::string& notification_id,
+ int button_index) {
+ StatsCollection::iterator iter = stats_.find(notification_id);
+ if (iter == stats_.end())
+ return;
+ NotificationStats& notification_stat = iter->second;
+
+ notification_stat.CollectAction(NOTIFICATION_ACTION_BUTTON_CLICK);
+}
+
+void MessageCenterStatsCollector::OnNotificationDisplayed(
+ const std::string& notification_id) {
+ StatsCollection::iterator iter = stats_.find(notification_id);
+ if (iter == stats_.end())
+ return;
+ NotificationStats& notification_stat = iter->second;
+
+ notification_stat.CollectAction(NOTIFICATION_ACTION_DISPLAY);
+}
+
+void MessageCenterStatsCollector::OnCenterVisibilityChanged(
+ message_center::Visibility visibility) {
+ switch (visibility) {
+ case message_center::VISIBILITY_TRANSIENT:
+ break;
+ case message_center::VISIBILITY_MESSAGE_CENTER:
+ content::RecordAction(
+ content::UserMetricsAction("Notifications.ShowMessageCenter"));
+ break;
+ case message_center::VISIBILITY_SETTINGS:
+ content::RecordAction(
+ content::UserMetricsAction("Notifications.ShowSettings"));
+ break;
+ }
+}
+
+void MessageCenterStatsCollector::OnQuietModeChanged(bool in_quiet_mode) {
+}
+

Powered by Google App Engine
This is Rietveld 408576698