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 24b6d61a24f0d5314acf16c837393f61c6204c4f..6307e758f562935a5642ac1c7b47c4c4d11a0147 100644 |
--- a/chrome/browser/notifications/message_center_notification_manager.h |
+++ b/chrome/browser/notifications/message_center_notification_manager.h |
@@ -9,6 +9,10 @@ |
#include <string> |
#include "base/memory/scoped_ptr.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/prefs/pref_member.h" |
+#include "base/time.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,6 +22,7 @@ |
class MessageCenterSettingsController; |
class Notification; |
+class PrefService; |
class Profile; |
// This class extends NotificationUIManagerImpl and delegates actual display |
@@ -28,7 +33,8 @@ class MessageCenterNotificationManager |
public message_center::MessageCenterObserver { |
public: |
explicit MessageCenterNotificationManager( |
- message_center::MessageCenter* message_center); |
+ message_center::MessageCenter* message_center, |
+ PrefService* local_state); |
virtual ~MessageCenterNotificationManager(); |
// NotificationUIManager |
@@ -57,6 +63,22 @@ 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; |
+ |
+#if defined(OS_WIN) |
+ // Called when the pref changes for the first run balloon. The first run |
+ // balloon is only displayed on Windows, since the visibility of the tray |
+ // icon is limited. |
+ void DisplayFirstRunBalloon(); |
+ |
+ void SetFirstRunTimeoutForTest(base::TimeDelta timeout); |
+ bool FirstRunTimerIsActive() const; |
+#endif |
+ |
+ // Takes ownership of |delegate|. |
+ void SetMessageCenterTrayDelegateForTest( |
+ message_center::MessageCenterTrayDelegate* delegate); |
private: |
class ImageDownloadsObserver { |
@@ -157,8 +179,6 @@ class MessageCenterNotificationManager |
typedef std::map<std::string, ProfileNotification*> NotificationMap; |
NotificationMap profile_notifications_; |
- scoped_ptr<MessageCenterSettingsController> settings_controller_; |
- |
// Helpers that add/remove the notification from local map and MessageCenter. |
// They take ownership of profile_notification object. |
void AddProfileNotification(ProfileNotification* profile_notification); |
@@ -169,6 +189,30 @@ class MessageCenterNotificationManager |
// notification is found. |
ProfileNotification* FindProfileNotification(const std::string& id) const; |
+#if defined(OS_WIN) |
+ // 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_; |
+ |
+ // The first-run balloon will be shown |first_run_idle_timeout_| after all |
+ // popups go away and the user has notifications in the message center. |
+ base::TimeDelta first_run_idle_timeout_; |
+ |
+ // Provides weak pointers for the purpose of the first run timer. |
+ base::WeakPtrFactory<MessageCenterNotificationManager> weak_factory_; |
+#endif |
+ |
+ scoped_ptr<MessageCenterSettingsController> settings_controller_; |
+ |
DISALLOW_COPY_AND_ASSIGN(MessageCenterNotificationManager); |
}; |