Index: chrome/browser/notifications/stub_notification_center_mac.mm |
diff --git a/chrome/browser/notifications/stub_notification_center_mac.mm b/chrome/browser/notifications/stub_notification_center_mac.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e2f7c2992e384302b4ff0015f091a235e182c298 |
--- /dev/null |
+++ b/chrome/browser/notifications/stub_notification_center_mac.mm |
@@ -0,0 +1,68 @@ |
+// 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 "chrome/browser/notifications/stub_notification_center_mac.h" |
+ |
+#include "base/logging.h" |
+#include "base/mac/scoped_nsobject.h" |
+#include "chrome/browser/ui/cocoa/notifications/notification_constants_mac.h" |
+ |
+@implementation StubNotificationCenter { |
+ base::scoped_nsobject<NSMutableArray> alerts_; |
+} |
+ |
+- (instancetype)init { |
+ if ((self = [super init])) { |
+ alerts_.reset([[NSMutableArray alloc] init]); |
+ } |
+ return self; |
+} |
+ |
+// The default implementation adds some extra checks on what constructors can |
+// be used. isKindOfClass bypasses all of that. |
+- (BOOL)isKindOfClass:(Class)cls { |
+ if ([cls isEqual:NSClassFromString(@"_NSConcreteUserNotificationCenter")]) { |
+ return YES; |
+ } |
+ return [super isKindOfClass:cls]; |
+} |
+ |
+- (void)deliverNotification:(NSUserNotification*)notification { |
+ [alerts_ addObject:notification]; |
+} |
+ |
+- (NSArray*)deliveredNotifications { |
+ return [[alerts_ copy] autorelease]; |
+} |
+ |
+- (void)removeDeliveredNotification:(NSUserNotification*)notification { |
+ NSString* notificationId = [notification.userInfo |
+ objectForKey:notification_constants::kNotificationId]; |
+ NSString* profileId = [notification.userInfo |
+ objectForKey:notification_constants::kNotificationProfileId]; |
+ DCHECK(profileId); |
+ DCHECK(notificationId); |
+ for (NSUserNotification* toast in alerts_.get()) { |
+ NSString* toastId = |
+ [toast.userInfo objectForKey:notification_constants::kNotificationId]; |
+ NSString* persistentProfileId = [toast.userInfo |
+ objectForKey:notification_constants::kNotificationProfileId]; |
+ if ([toastId isEqualToString:notificationId] && |
+ [persistentProfileId isEqualToString:profileId]) { |
+ [alerts_ removeObject:toast]; |
+ break; |
+ } |
+ } |
+} |
+ |
+- (void)removeAllDeliveredNotifications { |
+ [alerts_ removeAllObjects]; |
+} |
+ |
+// Need to provide a nop implementation of setDelegate as it is |
+// used during the setup of the bridge. |
+- (void)setDelegate:(id<NSUserNotificationCenterDelegate>)delegate { |
+} |
+ |
+@end |