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 ae5fc9ad0e1c4e098c128d839817c872c93375c7..23ceecfb7456bf491eb7e7eef55aab8dfe40ad2b 100644 |
| --- a/chrome/browser/notifications/message_center_notification_manager.h |
| +++ b/chrome/browser/notifications/message_center_notification_manager.h |
| @@ -9,6 +9,9 @@ |
| #include <string> |
| #include "base/memory/scoped_ptr.h" |
| +#include "base/memory/weak_ptr.h" |
| +#include "base/prefs/pref_member.h" |
| +#include "base/timer.h" |
| #include "chrome/browser/notifications/notification.h" |
| #include "chrome/browser/notifications/notification_ui_manager.h" |
| #include "chrome/browser/notifications/notification_ui_manager_impl.h" |
| @@ -18,19 +21,26 @@ |
| class MessageCenterSettingsController; |
| class Notification; |
| +class PrefService; |
| class Profile; |
| // This class extends NotificationUIManagerImpl and delegates actual display |
| -// of notifications to MessageCenter, doing necessary conversions. |
| +// of notifications to MessageCenter, doing necessary conversions. Supports |
| +// weak pointers for reliable lifetime in timer callbacks. |
| class MessageCenterNotificationManager |
| : public NotificationUIManagerImpl, |
| public message_center::MessageCenter::Delegate, |
| - public message_center::MessageCenterObserver { |
| + public message_center::MessageCenterObserver, |
| + public base::SupportsWeakPtr<MessageCenterNotificationManager> { |
|
Andrew T Wilson (Slow)
2013/06/19 06:28:57
Unless external classes need to be able to create
dewittj
2013/06/20 02:20:54
Done.
|
| public: |
| explicit MessageCenterNotificationManager( |
| - message_center::MessageCenter* message_center); |
| + message_center::MessageCenter* message_center, |
| + PrefService* local_state); |
| virtual ~MessageCenterNotificationManager(); |
| + // Called when the pref changes for the first run balloon. |
| + void DisplayFirstRunBalloon(); |
| + |
| // NotificationUIManager |
| virtual bool DoesIdExist(const std::string& notification_id) OVERRIDE; |
| virtual bool CancelById(const std::string& notification_id) OVERRIDE; |
| @@ -59,6 +69,8 @@ class MessageCenterNotificationManager |
| virtual void OnNotificationRemoved(const std::string& notification_id, |
| bool by_user) OVERRIDE; |
| virtual void OnNotificationCenterClosed() OVERRIDE; |
| + virtual void OnNotificationUpdated(const std::string& notification_id) |
| + OVERRIDE; |
| private: |
| class ImageDownloadsObserver { |
| @@ -171,6 +183,19 @@ class MessageCenterNotificationManager |
| // notification is found. |
| ProfileNotification* FindProfileNotification(const std::string& id) const; |
| + // This function is run on update to ensure that the notification balloon is |
| + // shown only when there are no popups present. |
| + void CheckFirstRunTimer(); |
| + |
| + // |first_run_pref_| is used to keep track of whether we've ever shown the |
| + // first run balloon before, even across restarts. |
| + BooleanPrefMember first_run_pref_; |
| + |
| + // The timer after which we will show the first run balloon. This timer is |
| + // restarted every time the message center is closed and every time the last |
| + // popup disappears from the screen. |
| + base::OneShotTimer<MessageCenterNotificationManager> first_run_balloon_timer_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(MessageCenterNotificationManager); |
| }; |