Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / notifications / message_center_stats_collector.h
blob463b7ed07c0c91081ee3f1d700ec2aee9802a92c
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_
8 #include <set>
9 #include <string>
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 {
16 class MessageCenter;
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 {
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
40 explicit MessageCenterStatsCollector(
41 message_center::MessageCenter* message_center);
42 virtual ~MessageCenterStatsCollector();
44 private:
45 // Represents the aggregate stats for each notification.
46 class NotificationStats {
47 public:
48 // Default constructor for map.
49 NotificationStats();
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();
60 private:
61 std::string id_;
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) OVERRIDE;
77 virtual void OnCenterVisibilityChanged(
78 message_center::Visibility visibility) OVERRIDE;
79 virtual void OnQuietModeChanged(bool in_quiet_mode) OVERRIDE;
81 // Weak, global.
82 message_center::MessageCenter* message_center_;
84 typedef std::map<std::string,NotificationStats> StatsCollection;
85 StatsCollection stats_;
87 DISALLOW_COPY_AND_ASSIGN(MessageCenterStatsCollector);
90 #endif // CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_STATS_COLLECTOR_H_