| 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 #import <objc/runtime.h> | 6 #import <objc/runtime.h> |
| 7 | 7 |
| 8 #include "base/bind.h" |
| 8 #include "base/mac/scoped_nsobject.h" | 9 #include "base/mac/scoped_nsobject.h" |
| 10 #include "base/run_loop.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
| 10 #include "chrome/browser/notifications/notification.h" | 12 #include "chrome/browser/notifications/notification.h" |
| 11 #include "chrome/browser/notifications/notification_platform_bridge_mac.h" | 13 #include "chrome/browser/notifications/notification_platform_bridge_mac.h" |
| 12 #include "chrome/browser/notifications/notification_test_util.h" | 14 #include "chrome/browser/notifications/notification_test_util.h" |
| 13 #include "chrome/browser/notifications/stub_alert_dispatcher_mac.h" | 15 #include "chrome/browser/notifications/stub_alert_dispatcher_mac.h" |
| 14 #include "chrome/browser/notifications/stub_notification_center_mac.h" | 16 #include "chrome/browser/notifications/stub_notification_center_mac.h" |
| 15 #include "chrome/browser/ui/cocoa/notifications/notification_builder_mac.h" | 17 #include "chrome/browser/ui/cocoa/notifications/notification_builder_mac.h" |
| 16 #include "chrome/browser/ui/cocoa/notifications/notification_constants_mac.h" | 18 #include "chrome/browser/ui/cocoa/notifications/notification_constants_mac.h" |
| 17 #include "chrome/browser/ui/cocoa/notifications/notification_response_builder_ma
c.h" | 19 #include "chrome/browser/ui/cocoa/notifications/notification_response_builder_ma
c.h" |
| 18 #include "chrome/common/features.h" | 20 #include "chrome/common/features.h" |
| 21 #include "content/public/test/test_browser_thread_bundle.h" |
| 19 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 20 #include "testing/gtest_mac.h" | 23 #include "testing/gtest_mac.h" |
| 21 #include "url/gurl.h" | 24 #include "url/gurl.h" |
| 22 | 25 |
| 23 class NotificationPlatformBridgeMacTest : public testing::Test { | 26 class NotificationPlatformBridgeMacTest : public testing::Test { |
| 24 public: | 27 public: |
| 28 NotificationPlatformBridgeMacTest() |
| 29 : thread_bundle_(content::TestBrowserThreadBundle::DEFAULT) {} |
| 25 void SetUp() override { | 30 void SetUp() override { |
| 26 notification_center_.reset([[StubNotificationCenter alloc] init]); | 31 notification_center_.reset([[StubNotificationCenter alloc] init]); |
| 27 alert_dispatcher_.reset([[StubAlertDispatcher alloc] init]); | 32 alert_dispatcher_.reset([[StubAlertDispatcher alloc] init]); |
| 28 } | 33 } |
| 29 | 34 |
| 30 void TearDown() override { | 35 void TearDown() override { |
| 31 [notification_center_ removeAllDeliveredNotifications]; | 36 [notification_center_ removeAllDeliveredNotifications]; |
| 32 [alert_dispatcher_ closeAllNotifications]; | 37 [alert_dispatcher_ closeAllNotifications]; |
| 33 } | 38 } |
| 34 | 39 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 46 [builder setTag:@"tag1"]; | 51 [builder setTag:@"tag1"]; |
| 47 [builder setIcon:[NSImage imageNamed:@"NSApplicationIcon"]]; | 52 [builder setIcon:[NSImage imageNamed:@"NSApplicationIcon"]]; |
| 48 [builder setNotificationId:@"notification_id"]; | 53 [builder setNotificationId:@"notification_id"]; |
| 49 [builder setProfileId:@"profile_id"]; | 54 [builder setProfileId:@"profile_id"]; |
| 50 [builder setIncognito:false]; | 55 [builder setIncognito:false]; |
| 51 [builder setNotificationType:@(NotificationCommon::PERSISTENT)]; | 56 [builder setNotificationType:@(NotificationCommon::PERSISTENT)]; |
| 52 | 57 |
| 53 return [builder buildUserNotification]; | 58 return [builder buildUserNotification]; |
| 54 } | 59 } |
| 55 | 60 |
| 61 static void StoreNotificationCount( |
| 62 int* out_notification_count, |
| 63 std::unique_ptr<std::set<std::string>> notifications, |
| 64 bool supports_synchronization) { |
| 65 DCHECK(out_notification_count); |
| 66 DCHECK(notifications); |
| 67 *out_notification_count = notifications->size(); |
| 68 } |
| 69 |
| 56 std::unique_ptr<Notification> CreateBanner(const char* title, | 70 std::unique_ptr<Notification> CreateBanner(const char* title, |
| 57 const char* subtitle, | 71 const char* subtitle, |
| 58 const char* origin, | 72 const char* origin, |
| 59 const char* button1, | 73 const char* button1, |
| 60 const char* button2) { | 74 const char* button2) { |
| 61 return CreateNotification(title, subtitle, origin, button1, button2, | 75 return CreateNotification(title, subtitle, origin, button1, button2, |
| 62 false /* require_interaction */); | 76 false /* require_interaction */); |
| 63 } | 77 } |
| 64 | 78 |
| 65 std::unique_ptr<Notification> CreateAlert(const char* title, | 79 std::unique_ptr<Notification> CreateAlert(const char* title, |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 | 123 |
| 110 NSUserNotificationCenter* notification_center() { | 124 NSUserNotificationCenter* notification_center() { |
| 111 return notification_center_.get(); | 125 return notification_center_.get(); |
| 112 } | 126 } |
| 113 | 127 |
| 114 StubAlertDispatcher* alert_dispatcher() { return alert_dispatcher_.get(); } | 128 StubAlertDispatcher* alert_dispatcher() { return alert_dispatcher_.get(); } |
| 115 | 129 |
| 116 private: | 130 private: |
| 117 base::scoped_nsobject<StubNotificationCenter> notification_center_; | 131 base::scoped_nsobject<StubNotificationCenter> notification_center_; |
| 118 base::scoped_nsobject<StubAlertDispatcher> alert_dispatcher_; | 132 base::scoped_nsobject<StubAlertDispatcher> alert_dispatcher_; |
| 133 content::TestBrowserThreadBundle thread_bundle_; |
| 119 }; | 134 }; |
| 120 | 135 |
| 121 TEST_F(NotificationPlatformBridgeMacTest, TestNotificationVerifyValidResponse) { | 136 TEST_F(NotificationPlatformBridgeMacTest, TestNotificationVerifyValidResponse) { |
| 122 NSDictionary* response = BuildDefaultNotificationResponse(); | 137 NSDictionary* response = BuildDefaultNotificationResponse(); |
| 123 EXPECT_TRUE(NotificationPlatformBridgeMac::VerifyNotificationData(response)); | 138 EXPECT_TRUE(NotificationPlatformBridgeMac::VerifyNotificationData(response)); |
| 124 } | 139 } |
| 125 | 140 |
| 126 TEST_F(NotificationPlatformBridgeMacTest, TestNotificationUnknownType) { | 141 TEST_F(NotificationPlatformBridgeMacTest, TestNotificationUnknownType) { |
| 127 NSMutableDictionary* response = BuildDefaultNotificationResponse(); | 142 NSMutableDictionary* response = BuildDefaultNotificationResponse(); |
| 128 [response setValue:[NSNumber numberWithInt:210581] | 143 [response setValue:[NSNumber numberWithInt:210581] |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 TEST_F(NotificationPlatformBridgeMacTest, TestGetDisplayed) { | 271 TEST_F(NotificationPlatformBridgeMacTest, TestGetDisplayed) { |
| 257 std::unique_ptr<Notification> notification = CreateBanner( | 272 std::unique_ptr<Notification> notification = CreateBanner( |
| 258 "Title", "Context", "https://gmail.com", "Button 1", nullptr); | 273 "Title", "Context", "https://gmail.com", "Button 1", nullptr); |
| 259 std::unique_ptr<NotificationPlatformBridgeMac> bridge( | 274 std::unique_ptr<NotificationPlatformBridgeMac> bridge( |
| 260 new NotificationPlatformBridgeMac(notification_center(), nil)); | 275 new NotificationPlatformBridgeMac(notification_center(), nil)); |
| 261 EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]); | 276 EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]); |
| 262 bridge->Display(NotificationCommon::PERSISTENT, "notification_id", | 277 bridge->Display(NotificationCommon::PERSISTENT, "notification_id", |
| 263 "profile_id", false, *notification); | 278 "profile_id", false, *notification); |
| 264 EXPECT_EQ(1u, [[notification_center() deliveredNotifications] count]); | 279 EXPECT_EQ(1u, [[notification_center() deliveredNotifications] count]); |
| 265 | 280 |
| 266 std::set<std::string> notifications; | 281 int notification_count = -1; |
| 267 EXPECT_TRUE(bridge->GetDisplayed("profile_id", false, ¬ifications)); | 282 bridge->GetDisplayed( |
| 268 EXPECT_EQ(1u, notifications.size()); | 283 "profile_id", false /* incognito */, |
| 284 base::Bind(&StoreNotificationCount, ¬ification_count)); |
| 285 base::RunLoop().RunUntilIdle(); |
| 286 EXPECT_EQ(1, notification_count); |
| 269 } | 287 } |
| 270 | 288 |
| 271 TEST_F(NotificationPlatformBridgeMacTest, TestGetDisplayedUnknownProfile) { | 289 TEST_F(NotificationPlatformBridgeMacTest, TestGetDisplayedUnknownProfile) { |
| 272 std::unique_ptr<Notification> notification = CreateBanner( | 290 std::unique_ptr<Notification> notification = CreateBanner( |
| 273 "Title", "Context", "https://gmail.com", "Button 1", nullptr); | 291 "Title", "Context", "https://gmail.com", "Button 1", nullptr); |
| 274 std::unique_ptr<NotificationPlatformBridgeMac> bridge( | 292 std::unique_ptr<NotificationPlatformBridgeMac> bridge( |
| 275 new NotificationPlatformBridgeMac(notification_center(), nil)); | 293 new NotificationPlatformBridgeMac(notification_center(), nil)); |
| 276 EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]); | 294 EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]); |
| 277 bridge->Display(NotificationCommon::PERSISTENT, "notification_id", | 295 bridge->Display(NotificationCommon::PERSISTENT, "notification_id", |
| 278 "profile_id", false, *notification); | 296 "profile_id", false, *notification); |
| 279 EXPECT_EQ(1u, [[notification_center() deliveredNotifications] count]); | 297 EXPECT_EQ(1u, [[notification_center() deliveredNotifications] count]); |
| 280 | 298 int notification_count = -1; |
| 281 std::set<std::string> notifications; | 299 bridge->GetDisplayed( |
| 282 EXPECT_TRUE( | 300 "unknown_profile_id", false /* incognito */, |
| 283 bridge->GetDisplayed("unknown_profile_id", false, ¬ifications)); | 301 base::Bind(&StoreNotificationCount, ¬ification_count)); |
| 284 EXPECT_EQ(0u, notifications.size()); | 302 base::RunLoop().RunUntilIdle(); |
| 303 EXPECT_EQ(0, notification_count); |
| 285 } | 304 } |
| 286 | 305 |
| 287 TEST_F(NotificationPlatformBridgeMacTest, TestQuitRemovesNotifications) { | 306 TEST_F(NotificationPlatformBridgeMacTest, TestQuitRemovesNotifications) { |
| 288 std::unique_ptr<Notification> notification = CreateBanner( | 307 std::unique_ptr<Notification> notification = CreateBanner( |
| 289 "Title", "Context", "https://gmail.com", "Button 1", nullptr); | 308 "Title", "Context", "https://gmail.com", "Button 1", nullptr); |
| 290 { | 309 { |
| 291 std::unique_ptr<NotificationPlatformBridgeMac> bridge( | 310 std::unique_ptr<NotificationPlatformBridgeMac> bridge( |
| 292 new NotificationPlatformBridgeMac(notification_center(), nil)); | 311 new NotificationPlatformBridgeMac(notification_center(), nil)); |
| 293 EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]); | 312 EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]); |
| 294 bridge->Display(NotificationCommon::PERSISTENT, "notification_id", | 313 bridge->Display(NotificationCommon::PERSISTENT, "notification_id", |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 EXPECT_EQ(1u, [[notification_center() deliveredNotifications] count]); | 383 EXPECT_EQ(1u, [[notification_center() deliveredNotifications] count]); |
| 365 EXPECT_EQ(1u, [[alert_dispatcher() alerts] count]); | 384 EXPECT_EQ(1u, [[alert_dispatcher() alerts] count]); |
| 366 } | 385 } |
| 367 | 386 |
| 368 // The destructor of the bridge should close all notifications. | 387 // The destructor of the bridge should close all notifications. |
| 369 EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]); | 388 EXPECT_EQ(0u, [[notification_center() deliveredNotifications] count]); |
| 370 EXPECT_EQ(0u, [[alert_dispatcher() alerts] count]); | 389 EXPECT_EQ(0u, [[alert_dispatcher() alerts] count]); |
| 371 } | 390 } |
| 372 | 391 |
| 373 #endif | 392 #endif |
| OLD | NEW |