Chromium Code Reviews| Index: chrome/browser/ui/cocoa/notifications/notification_service_delegate.mm |
| diff --git a/chrome/browser/ui/cocoa/notifications/notification_service_delegate.mm b/chrome/browser/ui/cocoa/notifications/notification_service_delegate.mm |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5940a65527bb4d92b71077b432d3dd74c9fcd4de |
| --- /dev/null |
| +++ b/chrome/browser/ui/cocoa/notifications/notification_service_delegate.mm |
| @@ -0,0 +1,63 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#import <AppKit/AppKit.h> |
| + |
| +#import "chrome/browser/ui/cocoa/notifications/notification_service_delegate.h" |
| + |
| +#include "base/mac/scoped_nsobject.h" |
| +#import "chrome/browser/ui/cocoa/notifications/alert_notification_service.h" |
| +#import "chrome/browser/ui/cocoa/notifications/notification_delivery.h" |
| +#import "chrome/browser/ui/cocoa/notifications/notification_response_builder_mac.h" |
| + |
| +@class NSUserNotificationCenter; |
| + |
| +@implementation ServiceDelegate |
| + |
| +@synthesize connection = connection_; |
| + |
| +- (instancetype)init { |
| + if (self = [super init]) { |
|
Robert Sesek
2016/10/04 16:04:25
nit: two sets of parens is convention to silence a
|
| + [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self]; |
| + } |
| + return self; |
| +} |
| + |
| +- (void)dealloc { |
| + [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:nil]; |
| + [super dealloc]; |
| +} |
| + |
| +- (BOOL)listener:(NSXPCListener*)listener |
| + shouldAcceptNewConnection:(NSXPCConnection*)newConnection { |
| + newConnection.exportedInterface = |
| + [NSXPCInterface interfaceWithProtocol:@protocol(NotificationDelivery)]; |
| + [newConnection.exportedInterface |
| + setClasses:[NSSet setWithObjects:[NSDictionary class], [NSImage class], |
| + [NSNumber class], [NSString class], |
| + nil] |
| + forSelector:@selector(deliverNotification:) |
| + argumentIndex:0 |
| + ofReply:NO]; |
| + |
| + base::scoped_nsobject<AlertNotificationService> object( |
| + [[AlertNotificationService alloc] init]); |
| + newConnection.exportedObject = object.get(); |
| + newConnection.remoteObjectInterface = |
| + [NSXPCInterface interfaceWithProtocol:@protocol(NotificationReply)]; |
| + connection_ = newConnection; |
| + [newConnection resume]; |
| + |
| + return YES; |
| +} |
| + |
| +// NSUserNotification center delegate |
| +- (void)userNotificationCenter:(NSUserNotificationCenter*)center |
| + didActivateNotification:(NSUserNotification*)notification { |
| + NSDictionary* response = |
| + [NotificationResponseBuilder buildDictionary:notification]; |
| + [[connection_ remoteObjectProxy] notificationClick:response]; |
| +} |
| + |
| +@end |