Chromium Code Reviews| Index: chrome/browser/notifications/notification_platform_bridge_mac.mm |
| diff --git a/chrome/browser/notifications/notification_platform_bridge_mac.mm b/chrome/browser/notifications/notification_platform_bridge_mac.mm |
| index e8f9f1cbc6e15ca045b0a9ba15fd7c33a7436917..ae95032b3a2148951d7f74e3617f4993fe74f57b 100644 |
| --- a/chrome/browser/notifications/notification_platform_bridge_mac.mm |
| +++ b/chrome/browser/notifications/notification_platform_bridge_mac.mm |
| @@ -16,6 +16,7 @@ |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/sys_string_conversions.h" |
| #include "chrome/browser/browser_process.h" |
| +#include "chrome/browser/notifications/alert_dispatcher.h" |
| #include "chrome/browser/notifications/native_notification_display_service.h" |
| #include "chrome/browser/notifications/notification.h" |
| #include "chrome/browser/notifications/notification_common.h" |
| @@ -100,12 +101,6 @@ void DoProcessNotificationResponse(NotificationCommon::Operation operation, |
| } // namespace |
| -// static |
| -NotificationPlatformBridge* NotificationPlatformBridge::Create() { |
| - return new NotificationPlatformBridgeMac( |
| - [NSUserNotificationCenter defaultUserNotificationCenter]); |
| -} |
| - |
| // A Cocoa class that represents the delegate of NSUserNotificationCenter and |
| // can forward commands to C++. |
| @interface NotificationCenterDelegate |
| @@ -114,7 +109,9 @@ NotificationPlatformBridge* NotificationPlatformBridge::Create() { |
| @end |
| // Interface to communicate with the Alert XPC service. |
| -@interface NotificationRemoteDispatcher : NSObject |
| +@interface AlertDispatcherImpl : NSObject<AlertDispatcher> |
| + |
| +- (instancetype)init; |
|
Robert Sesek
2016/11/21 16:28:17
No need to redeclare this.
Miguel Garcia
2016/11/21 17:21:44
Done.
|
| // Deliver a notification to the XPC service to be displayed as an alert. |
| - (void)dispatchNotification:(NSDictionary*)data; |
| @@ -129,18 +126,12 @@ NotificationPlatformBridge* NotificationPlatformBridge::Create() { |
| @end |
| // ///////////////////////////////////////////////////////////////////////////// |
| - |
| NotificationPlatformBridgeMac::NotificationPlatformBridgeMac( |
| - NSUserNotificationCenter* notification_center) |
| + NSUserNotificationCenter* notification_center, |
| + id<AlertDispatcher> alert_dispatcher) |
| : delegate_([NotificationCenterDelegate alloc]), |
| - notification_center_(notification_center), |
| -#if BUILDFLAG(ENABLE_XPC_NOTIFICATIONS) |
| - notification_remote_dispatcher_( |
| - [[NotificationRemoteDispatcher alloc] init]) |
| -#else |
| - notification_remote_dispatcher_(nullptr) |
| -#endif // ENABLE_XPC_NOTIFICATIONS |
| -{ |
| + notification_center_([notification_center retain]), |
| + alert_dispatcher_([alert_dispatcher retain]) { |
| [notification_center_ setDelegate:delegate_.get()]; |
| } |
| @@ -150,10 +141,22 @@ NotificationPlatformBridgeMac::~NotificationPlatformBridgeMac() { |
| // TODO(miguelg) do not remove banners if possible. |
| [notification_center_ removeAllDeliveredNotifications]; |
| #if BUILDFLAG(ENABLE_XPC_NOTIFICATIONS) |
| - [notification_remote_dispatcher_ closeAllNotifications]; |
| + [alert_dispatcher_ closeAllNotifications]; |
| #endif // BUILDFLAG(ENABLE_XPC_NOTIFICATIONS) |
| } |
| +// static |
| +NotificationPlatformBridge* NotificationPlatformBridge::Create() { |
| +#if BUILDFLAG(ENABLE_XPC_NOTIFICATIONS) |
| + return new NotificationPlatformBridgeMac( |
| + [NSUserNotificationCenter defaultUserNotificationCenter], |
| + [[AlertDispatcherImpl alloc] init]); |
|
Robert Sesek
2016/11/21 16:28:17
This is leaked here since the Bridge now takes its
Miguel Garcia
2016/11/21 17:21:44
Of course yes, thanks for pointing it out.
|
| +#else |
| + return new NotificationPlatformBridgeMac( |
| + [NSUserNotificationCenter defaultUserNotificationCenter], nil); |
| +#endif // ENABLE_XPC_NOTIFICATIONS |
| +} |
| + |
| void NotificationPlatformBridgeMac::Display( |
| NotificationCommon::Type notification_type, |
| const std::string& notification_id, |
| @@ -229,7 +232,7 @@ void NotificationPlatformBridgeMac::Display( |
| // banners. |
| if (notification.never_timeout()) { |
| NSDictionary* dict = [builder buildDictionary]; |
| - [notification_remote_dispatcher_ dispatchNotification:dict]; |
| + [alert_dispatcher_ dispatchNotification:dict]; |
| } else { |
| NSUserNotification* toast = [builder buildUserNotification]; |
| [notification_center_ deliverNotification:toast]; |
| @@ -265,9 +268,8 @@ void NotificationPlatformBridgeMac::Close(const std::string& profile_id, |
| // If no banner existed with that ID try to see if there is an alert |
| // in the xpc server. |
| if (!notification_removed) { |
| - [notification_remote_dispatcher_ |
| - closeNotificationWithId:candidate_id |
| - withProfileId:current_profile_id]; |
| + [alert_dispatcher_ closeNotificationWithId:candidate_id |
| + withProfileId:current_profile_id]; |
| } |
| #endif // ENABLE_XPC_NOTIFICATIONS |
| } |
| @@ -424,7 +426,7 @@ bool NotificationPlatformBridgeMac::VerifyNotificationData( |
| @end |
| -@implementation NotificationRemoteDispatcher { |
| +@implementation AlertDispatcherImpl { |
| // The connection to the XPC server in charge of delivering alerts. |
| base::scoped_nsobject<NSXPCConnection> xpcConnection_; |
| } |