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_NOTIFICATION_UI_MANAGER_MAC_H_
6 #define CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_UI_MANAGER_MAC_H_
8 #import <AppKit/AppKit.h>
13 #include "base/basictypes.h"
14 #include "base/mac/scoped_nsobject.h"
15 #include "base/memory/scoped_ptr.h"
16 #include "base/strings/string16.h"
17 #include "chrome/browser/notifications/balloon_notification_ui_manager.h"
19 @protocol CrUserNotification
;
21 @
class NotificationCenterDelegate
;
25 // This class is an implementation of BalloonNotificationUIManager that will
26 // send text-only (non-HTML) notifications to Notification Center on 10.8. This
27 // class is only instantiated on 10.8 and above. For HTML notifications,
28 // this class delegates to the base class.
29 class NotificationUIManagerMac
: public BalloonNotificationUIManager
{
31 explicit NotificationUIManagerMac(PrefService
* local_state
);
32 virtual ~NotificationUIManagerMac();
34 // NotificationUIManager:
35 virtual void Add(const Notification
& notification
,
36 Profile
* profile
) OVERRIDE
;
37 virtual std::set
<std::string
> GetAllIdsByProfileAndSourceOrigin(
38 Profile
* profile
, const GURL
& source_origin
) OVERRIDE
;
39 virtual bool CancelById(const std::string
& notification_id
) OVERRIDE
;
40 virtual bool CancelAllBySourceOrigin(const GURL
& source_origin
) OVERRIDE
;
41 virtual bool CancelAllByProfile(Profile
* profile
) OVERRIDE
;
42 virtual void CancelAll() OVERRIDE
;
44 // Returns the corresponding C++ object for the Cocoa notification object,
45 // or NULL if it could not be found.
46 const Notification
* FindNotificationWithCocoaNotification(
47 id
<CrUserNotification
> notification
) const;
50 // A ControllerNotification links the Cocoa (view) notification to the C++
51 // (model) notification. This assumes ownership (i.e. does not retain a_view)
52 // of both objects and will delete them on destruction.
53 struct ControllerNotification
{
54 ControllerNotification(Profile
* a_profile
,
55 id
<CrUserNotification
> a_view
,
56 Notification
* a_model
);
57 ~ControllerNotification();
60 id
<CrUserNotification
> view
;
64 DISALLOW_COPY_AND_ASSIGN(ControllerNotification
);
66 typedef std::map
<std::string
, ControllerNotification
*> NotificationMap
;
68 // Erases a Cocoa notification from both the application and Notification
69 // Center, and deletes the corresponding C++ object.
70 bool RemoveNotification(id
<CrUserNotification
> notification
);
72 // Finds a notification with a given replacement id.
73 id
<CrUserNotification
> FindNotificationWithReplacementId(
74 const base::string16
& replacement_id
) const;
76 // Cocoa class that receives callbacks from the NSUserNotificationCenter.
77 base::scoped_nsobject
<NotificationCenterDelegate
> delegate_
;
79 // Maps notification_ids to ControllerNotifications. The map owns the value,
80 // so it must be deleted when remvoed from the map. This is typically handled
81 // in RemoveNotification.
82 NotificationMap notification_map_
;
84 DISALLOW_COPY_AND_ASSIGN(NotificationUIManagerMac
);
87 #endif // CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_UI_MANAGER_MAC_H_