Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2693)

Unified Diff: chrome/browser/notifications/stub_notification_center_mac.mm

Issue 2480203002: ui: Cleanup class/struct forward declarations (Closed)
Patch Set: Sync CL to position 430550 Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698