blob: 21285ee899367854fb9f2e2917ff399d95ebd037 [file] [log] [blame]
// 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> banners_;
}
- (instancetype)init {
if ((self = [super init])) {
banners_.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 {
[banners_ addObject:notification];
}
- (NSArray*)deliveredNotifications {
return [[banners_ 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 banners_.get()) {
NSString* toastId =
[toast.userInfo objectForKey:notification_constants::kNotificationId];
NSString* persistentProfileId = [toast.userInfo
objectForKey:notification_constants::kNotificationProfileId];
if ([toastId isEqualToString:notificationId] &&
[persistentProfileId isEqualToString:profileId]) {
[banners_ removeObject:toast];
break;
}
}
}
- (void)removeAllDeliveredNotifications {
[banners_ 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