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.
5 #ifndef CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_STATS_COLLECTOR_H_
6 #define CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_STATS_COLLECTOR_H_
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"
15 namespace message_center
{
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.
22 class MessageCenterStatsCollector
23 : public message_center::MessageCenterObserver
{
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
40 explicit MessageCenterStatsCollector(
41 message_center::MessageCenter
* message_center
);
42 virtual ~MessageCenterStatsCollector();
45 // Represents the aggregate stats for each notification.
46 class NotificationStats
{
48 // Default constructor for map.
51 explicit NotificationStats(const std::string
& id
);
52 virtual ~NotificationStats();
54 // Called when we get an action from the message center.
55 void CollectAction(NotificationActionType type
);
57 // Sends aggregate data to UMA.
58 void RecordAggregateStats();
62 bool actions_
[NOTIFICATION_ACTION_COUNT
];
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
;
83 message_center::MessageCenter
* message_center_
;
85 typedef std::map
<std::string
,NotificationStats
> StatsCollection
;
86 StatsCollection stats_
;
88 DISALLOW_COPY_AND_ASSIGN(MessageCenterStatsCollector
);
91 #endif // CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_STATS_COLLECTOR_H_