1 // Copyright (c) 2012 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_BALLOON_NOTIFICATION_UI_MANAGER_H_
6 #define CHROME_BROWSER_NOTIFICATIONS_BALLOON_NOTIFICATION_UI_MANAGER_H_
11 #include "base/memory/linked_ptr.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/prefs/pref_member.h"
14 #include "chrome/browser/notifications/balloon.h"
15 #include "chrome/browser/notifications/balloon_collection.h"
16 #include "chrome/browser/notifications/fullscreen_notification_blocker.h"
17 #include "chrome/browser/notifications/notification_prefs_manager.h"
18 #include "chrome/browser/notifications/notification_system_observer.h"
19 #include "chrome/browser/notifications/notification_ui_manager.h"
20 #include "chrome/browser/notifications/screen_lock_notification_blocker.h"
25 class QueuedNotification
;
27 // The notification manager manages use of the desktop for notifications.
28 // It maintains a queue of pending notifications when space becomes constrained.
29 class BalloonNotificationUIManager
30 : public NotificationUIManager
,
31 public NotificationPrefsManager
,
32 public BalloonCollection::BalloonSpaceChangeListener
,
33 public message_center::NotificationBlocker::Observer
{
35 explicit BalloonNotificationUIManager(PrefService
* local_state
);
36 virtual ~BalloonNotificationUIManager();
38 // Initializes the UI manager with a balloon collection; this object
39 // takes ownership of the balloon collection.
40 void SetBalloonCollection(BalloonCollection
* balloon_collection
);
42 // NotificationUIManager overrides:
43 virtual void Add(const Notification
& notification
,
44 Profile
* profile
) OVERRIDE
;
45 virtual bool Update(const Notification
& notification
,
46 Profile
* profile
) OVERRIDE
;
47 virtual const Notification
* FindById(
48 const std::string
& notification_id
) const OVERRIDE
;
49 virtual bool CancelById(const std::string
& notification_id
) OVERRIDE
;
50 virtual std::set
<std::string
> GetAllIdsByProfileAndSourceOrigin(
52 const GURL
& source
) OVERRIDE
;
53 virtual bool CancelAllBySourceOrigin(const GURL
& source_origin
) OVERRIDE
;
54 virtual bool CancelAllByProfile(Profile
* profile
) OVERRIDE
;
55 virtual void CancelAll() OVERRIDE
;
57 // NotificationPrefsManager overrides:
58 virtual BalloonCollection::PositionPreference
59 GetPositionPreference() const OVERRIDE
;
60 virtual void SetPositionPreference(
61 BalloonCollection::PositionPreference preference
) OVERRIDE
;
63 BalloonCollection
* balloon_collection();
64 NotificationPrefsManager
* prefs_manager();
66 // Helper used to pull the static instance for testing.
67 // In tests, use this instead of g_browser_process->notification_ui_manager().
68 static BalloonNotificationUIManager
* GetInstanceForTesting();
70 void GetQueuedNotificationsForTesting(
71 std::vector
<const Notification
*>* notifications
);
74 bool ShowNotification(const Notification
& notification
, Profile
* profile
);
75 bool UpdateNotification(const Notification
& notification
, Profile
* profile
);
77 // Attempts to display notifications from the show_queue. Invoked if they
78 // previously returned 'false' from ShowNotifications, which may happen when
79 // there is no room to show another notification or notifications are blocked.
80 void CheckAndShowNotifications();
82 void ShowNotifications();
84 void OnDesktopNotificationPositionChanged();
86 // BalloonCollectionObserver overrides:
87 virtual void OnBalloonSpaceChanged() OVERRIDE
;
89 // NotificationBlocker::Observer overrides:
90 virtual void OnBlockingStateChanged(
91 message_center::NotificationBlocker
* blocker
) OVERRIDE
;
93 // A queue of notifications which are waiting to be shown.
94 typedef std::deque
<linked_ptr
<QueuedNotification
> > NotificationDeque
;
95 NotificationDeque show_queue_
;
97 // An owned pointer to the collection of active balloons.
98 scoped_ptr
<BalloonCollection
> balloon_collection_
;
100 ScreenLockNotificationBlocker screen_lock_blocker_
;
101 FullscreenNotificationBlocker fullscreen_blocker_
;
103 // Prefs listener for the position preference.
104 IntegerPrefMember position_pref_
;
106 NotificationSystemObserver system_observer_
;
108 DISALLOW_COPY_AND_ASSIGN(BalloonNotificationUIManager
);
111 #endif // CHROME_BROWSER_NOTIFICATIONS_BALLOON_NOTIFICATION_UI_MANAGER_H_