1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_STATS_COLLECTOR_H_ 6#define CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_STATS_COLLECTOR_H_ 7 8#include <set> 9#include <string> 10 11#include "ui/message_center/message_center.h" 12#include "ui/message_center/message_center_observer.h" 13#include "ui/message_center/message_center_types.h" 14 15namespace message_center { 16class MessageCenter; 17} 18 19// MessageCenterStatsCollector sends both raw and per-notification statistics 20// to the UMA servers, if the user has opted in. It observes the message center 21// to gather its data. 22class MessageCenterStatsCollector 23 : public message_center::MessageCenterObserver { 24 public: 25 enum NotificationActionType { 26 NOTIFICATION_ACTION_UNKNOWN, 27 NOTIFICATION_ACTION_ADD, 28 NOTIFICATION_ACTION_UPDATE, 29 NOTIFICATION_ACTION_CLICK, 30 NOTIFICATION_ACTION_BUTTON_CLICK, 31 NOTIFICATION_ACTION_DISPLAY, 32 NOTIFICATION_ACTION_CLOSE_BY_USER, 33 NOTIFICATION_ACTION_CLOSE_BY_SYSTEM, 34 // NOTE: Add new action types only immediately above this line. Also, 35 // make sure the enum list in tools/histogram/histograms.xml is 36 // updated with any change in here. 37 NOTIFICATION_ACTION_COUNT 38 }; 39 40 explicit MessageCenterStatsCollector( 41 message_center::MessageCenter* message_center); 42 virtual ~MessageCenterStatsCollector(); 43 44 private: 45 // Represents the aggregate stats for each notification. 46 class NotificationStats { 47 public: 48 // Default constructor for map. 49 NotificationStats(); 50 51 explicit NotificationStats(const std::string& id); 52 virtual ~NotificationStats(); 53 54 // Called when we get an action from the message center. 55 void CollectAction(NotificationActionType type); 56 57 // Sends aggregate data to UMA. 58 void RecordAggregateStats(); 59 60 private: 61 std::string id_; 62 bool actions_[NOTIFICATION_ACTION_COUNT]; 63 }; 64 65 // MessageCenterObserver 66 virtual void OnNotificationAdded(const std::string& notification_id) OVERRIDE; 67 virtual void OnNotificationRemoved(const std::string& notification_id, 68 bool by_user) OVERRIDE; 69 virtual void OnNotificationUpdated( 70 const std::string& notification_id) OVERRIDE; 71 virtual void OnNotificationClicked( 72 const std::string& notification_id) OVERRIDE; 73 virtual void OnNotificationButtonClicked(const std::string& notification_id, 74 int button_index) OVERRIDE; 75 virtual void OnNotificationDisplayed( 76 const std::string& notification_id, 77 const message_center::DisplaySource source) OVERRIDE; 78 virtual void OnCenterVisibilityChanged( 79 message_center::Visibility visibility) OVERRIDE; 80 virtual void OnQuietModeChanged(bool in_quiet_mode) OVERRIDE; 81 82 // Weak, global. 83 message_center::MessageCenter* message_center_; 84 85 typedef std::map<std::string,NotificationStats> StatsCollection; 86 StatsCollection stats_; 87 88 DISALLOW_COPY_AND_ASSIGN(MessageCenterStatsCollector); 89}; 90 91#endif // CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_STATS_COLLECTOR_H_ 92