Chromium Code Reviews| Index: chrome/browser/notifications/message_center_notification_manager.h |
| diff --git a/chrome/browser/notifications/message_center_notification_manager.h b/chrome/browser/notifications/message_center_notification_manager.h |
| index d4b2651e2b7bdf3e6c2d72e2469fecb9ddc6790a..8d357bf94e960b5a23d7d9546d3e87164d65ddcb 100644 |
| --- a/chrome/browser/notifications/message_center_notification_manager.h |
| +++ b/chrome/browser/notifications/message_center_notification_manager.h |
| @@ -5,34 +5,88 @@ |
| #ifndef CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_NOTIFICATION_MANAGER_H_ |
| #define CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_NOTIFICATION_MANAGER_H_ |
| +#include <map> |
| #include <string> |
| #include "base/memory/scoped_ptr.h" |
| +#include "chrome/browser/notifications/notification.h" |
| #include "chrome/browser/notifications/notification_ui_manager.h" |
| #include "chrome/browser/notifications/notification_ui_manager_impl.h" |
| +#include "ui/message_center/message_center.h" |
| class Notification; |
| class Profile; |
| // This class extends NotificationUIManagerImpl and delegates actual display |
| // of notifications to MessageCenter, doing necessary conversions. |
| -class MessageCenterNotificationManager : public NotificationUIManagerImpl { |
| +class MessageCenterNotificationManager |
| + : public NotificationUIManagerImpl, |
| + public message_center::MessageCenter::Delegate { |
| public: |
| MessageCenterNotificationManager(); |
| virtual ~MessageCenterNotificationManager(); |
| - // NotificationUIManager: |
| + // NotificationUIManager |
| virtual bool CancelById(const std::string& notification_id) OVERRIDE; |
| virtual bool CancelAllBySourceOrigin(const GURL& source_origin) OVERRIDE; |
| virtual bool CancelAllByProfile(Profile* profile) OVERRIDE; |
| virtual void CancelAll() OVERRIDE; |
| - // NotificationUIManagerImpl: |
| + // NotificationUIManagerImpl |
| virtual bool ShowNotification(const Notification& notification, |
| Profile* profile) OVERRIDE; |
| - virtual bool UpdateNotification(const Notification& notification) OVERRIDE; |
| + virtual bool UpdateNotification(const Notification& notification, |
| + Profile* profile) OVERRIDE; |
| + |
| + // MessageCenter::Delegate. |
| + virtual void NotificationRemoved(const std::string& notification_id) OVERRIDE; |
| + virtual void DisableExtension(const std::string& notification_id) OVERRIDE; |
| + virtual void DisableNotificationsFromSource( |
| + const std::string& notification_id) OVERRIDE; |
| + virtual void ShowSettings(const std::string& notification_id) OVERRIDE; |
| + virtual void OnClicked(const std::string& notification_id) OVERRIDE; |
| + virtual void OnButtonClicked(const std::string& notification_id, |
| + int button_index) OVERRIDE; |
| private: |
| + message_center::MessageCenter* message_center_; // Weak, global. |
| + |
| +// This class keeps a set of original Notificaiton objects and corresponding |
| +// Profiles, so when MessageCenter calls back with a notificaiton_id, this |
| +// class has necessary mapping to other source info - for example, it calls |
| +// NotificationDelegate supplied by client when someone clicks on a Notificaiton |
| +// in MessageCenter. Likewise, if a Profile or Extension is being removed, the |
| +// map makes it possible to revoke the notifications from MessageCenter. |
| +// To keep that set, we use the private ProfileNotification class that stores |
| +// a superset of all information about a notification. |
| + |
| +// TODO(dimich): Consider merging all 4 types (Notification, QueuedNotification, |
| +// ProfileNotification and NotificaitonList::Notification) into a single class. |
|
dewittj
2013/01/18 00:45:44
nit: There are still 4 more misspellings of Notifi
|
| + class ProfileNotification { |
| + public: |
| + ProfileNotification(Profile* profile, const Notification& notification); |
| + |
| + Profile* profile() const { return profile_; } |
| + const Notification& notification() const { return notification_; } |
| + |
| + // Returns extension_id if the notification originates from an extension, |
| + // empty string otherwise. |
| + std::string GetExtensionId(); |
| + private: |
| + // Weak, guaranteed not to be used after profile removal by parent class. |
| + Profile* profile_; |
| + Notification notification_; |
| + }; |
| + |
| + // Use a map by notification_id since this mapping is the most often used. |
| + typedef std::map<std::string, ProfileNotification*> NotificationMap; |
| + NotificationMap profile_notifications_; |
| + |
| + // Helpers that add/remove the notification from local map and MessageCenter. |
| + // They take ownership of profile_notificaiton object. |
|
dewittj
2013/01/18 00:45:44
nit: profile_notification
|
| + void AddProfileNotification(ProfileNotification* profile_notification); |
| + void RemoveProfileNotification(ProfileNotification* profile_notification); |
| + |
| DISALLOW_COPY_AND_ASSIGN(MessageCenterNotificationManager); |
| }; |