| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import <AppKit/AppKit.h> | 5 #import <AppKit/AppKit.h> |
| 6 | 6 |
| 7 #import "chrome/browser/ui/cocoa/notifications/notification_service_delegate.h" | 7 #import "chrome/browser/ui/cocoa/notifications/notification_service_delegate.h" |
| 8 | 8 |
| 9 #include "base/mac/scoped_nsobject.h" | 9 #include "base/mac/scoped_nsobject.h" |
| 10 #import "chrome/browser/ui/cocoa/notifications/alert_notification_service.h" | 10 #import "chrome/browser/ui/cocoa/notifications/alert_notification_service.h" |
| 11 #import "chrome/browser/ui/cocoa/notifications/notification_delivery.h" | 11 #import "chrome/browser/ui/cocoa/notifications/notification_delivery.h" |
| 12 #import "chrome/browser/ui/cocoa/notifications/notification_response_builder_mac
.h" | 12 #import "chrome/browser/ui/cocoa/notifications/notification_response_builder_mac
.h" |
| 13 #import "chrome/browser/ui/cocoa/notifications/xpc_transaction_handler.h" |
| 13 | 14 |
| 14 @class NSUserNotificationCenter; | 15 @class NSUserNotificationCenter; |
| 15 | 16 |
| 16 @implementation ServiceDelegate | 17 @implementation ServiceDelegate { |
| 18 base::scoped_nsobject<XPCTransactionHandler> transactionHandler_; |
| 19 } |
| 17 | 20 |
| 18 @synthesize connection = connection_; | 21 @synthesize connection = connection_; |
| 19 | 22 |
| 20 - (instancetype)init { | 23 - (instancetype)init { |
| 21 if ((self = [super init])) { | 24 if ((self = [super init])) { |
| 22 [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self]; | 25 [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self]; |
| 26 transactionHandler_.reset([[XPCTransactionHandler alloc] init]); |
| 23 } | 27 } |
| 24 return self; | 28 return self; |
| 25 } | 29 } |
| 26 | 30 |
| 27 - (void)dealloc { | 31 - (void)dealloc { |
| 28 [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:nil]; | 32 [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:nil]; |
| 29 [super dealloc]; | 33 [super dealloc]; |
| 30 } | 34 } |
| 31 | 35 |
| 32 - (BOOL)listener:(NSXPCListener*)listener | 36 - (BOOL)listener:(NSXPCListener*)listener |
| 33 shouldAcceptNewConnection:(NSXPCConnection*)newConnection { | 37 shouldAcceptNewConnection:(NSXPCConnection*)newConnection { |
| 34 newConnection.exportedInterface = | 38 newConnection.exportedInterface = |
| 35 [NSXPCInterface interfaceWithProtocol:@protocol(NotificationDelivery)]; | 39 [NSXPCInterface interfaceWithProtocol:@protocol(NotificationDelivery)]; |
| 36 [newConnection.exportedInterface | 40 [newConnection.exportedInterface |
| 37 setClasses:[NSSet setWithObjects:[NSDictionary class], [NSImage class], | 41 setClasses:[NSSet setWithObjects:[NSDictionary class], [NSImage class], |
| 38 [NSNumber class], [NSString class], | 42 [NSNumber class], [NSString class], |
| 39 nil] | 43 nil] |
| 40 forSelector:@selector(deliverNotification:) | 44 forSelector:@selector(deliverNotification:) |
| 41 argumentIndex:0 | 45 argumentIndex:0 |
| 42 ofReply:NO]; | 46 ofReply:NO]; |
| 43 | 47 |
| 44 base::scoped_nsobject<AlertNotificationService> object( | 48 base::scoped_nsobject<AlertNotificationService> object( |
| 45 [[AlertNotificationService alloc] init]); | 49 [[AlertNotificationService alloc] |
| 50 initWithTransactionHandler:transactionHandler_]); |
| 46 newConnection.exportedObject = object.get(); | 51 newConnection.exportedObject = object.get(); |
| 47 newConnection.remoteObjectInterface = | 52 newConnection.remoteObjectInterface = |
| 48 [NSXPCInterface interfaceWithProtocol:@protocol(NotificationReply)]; | 53 [NSXPCInterface interfaceWithProtocol:@protocol(NotificationReply)]; |
| 49 connection_ = newConnection; | 54 connection_ = newConnection; |
| 50 [newConnection resume]; | 55 [newConnection resume]; |
| 51 | 56 |
| 52 return YES; | 57 return YES; |
| 53 } | 58 } |
| 54 | 59 |
| 55 // NSUserNotification center delegate | 60 // NSUserNotification center delegate |
| 56 - (void)userNotificationCenter:(NSUserNotificationCenter*)center | 61 - (void)userNotificationCenter:(NSUserNotificationCenter*)center |
| 57 didActivateNotification:(NSUserNotification*)notification { | 62 didActivateNotification:(NSUserNotification*)notification { |
| 58 NSDictionary* response = | 63 NSDictionary* response = |
| 59 [NotificationResponseBuilder buildDictionary:notification]; | 64 [NotificationResponseBuilder buildDictionary:notification]; |
| 60 [[connection_ remoteObjectProxy] notificationClick:response]; | 65 [[connection_ remoteObjectProxy] notificationClick:response]; |
| 61 } | 66 } |
| 62 | 67 |
| 63 // _NSUserNotificationCenterDelegatePrivate | 68 // _NSUserNotificationCenterDelegatePrivate |
| 64 - (void)userNotificationCenter:(NSUserNotificationCenter*)center | 69 - (void)userNotificationCenter:(NSUserNotificationCenter*)center |
| 65 didDismissAlert:(NSUserNotification*)notification { | 70 didDismissAlert:(NSUserNotification*)notification { |
| 66 NSDictionary* response = | 71 NSDictionary* response = |
| 67 [NotificationResponseBuilder buildDictionary:notification]; | 72 [NotificationResponseBuilder buildDictionary:notification]; |
| 68 [[connection_ remoteObjectProxy] notificationClick:response]; | 73 [[connection_ remoteObjectProxy] notificationClick:response]; |
| 74 [transactionHandler_ closeTransactionIfNeeded]; |
| 69 } | 75 } |
| 70 | 76 |
| 71 @end | 77 @end |
| OLD | NEW |