 Chromium Code Reviews
 Chromium Code Reviews Issue 2300093002:
  Make //content responsible for generating notification Ids  (Closed)
    
  
    Issue 2300093002:
  Make //content responsible for generating notification Ids  (Closed) 
  | OLD | NEW | 
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include <stdint.h> | 5 #include <stdint.h> | 
| 6 | 6 | 
| 7 #include <utility> | 7 #include <utility> | 
| 8 | 8 | 
| 9 #include "base/macros.h" | 9 #include "base/macros.h" | 
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" | 
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 47 #include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h" | 47 #include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h" | 
| 48 #include "chrome/browser/chromeos/settings/cros_settings.h" | 48 #include "chrome/browser/chromeos/settings/cros_settings.h" | 
| 49 #include "chrome/browser/chromeos/settings/device_settings_service.h" | 49 #include "chrome/browser/chromeos/settings/device_settings_service.h" | 
| 50 #endif | 50 #endif | 
| 51 | 51 | 
| 52 using content::NotificationResources; | 52 using content::NotificationResources; | 
| 53 using content::PlatformNotificationData; | 53 using content::PlatformNotificationData; | 
| 54 | 54 | 
| 55 namespace { | 55 namespace { | 
| 56 | 56 | 
| 57 const char kNotificationId[] = "my-notification-id"; | |
| 57 const int kNotificationVibrationPattern[] = { 100, 200, 300 }; | 58 const int kNotificationVibrationPattern[] = { 100, 200, 300 }; | 
| 58 | 59 | 
| 59 #if !defined(OS_ANDROID) | |
| 60 const int64_t kPersistentNotificationId = 42; | |
| 61 #endif | |
| 62 | |
| 63 class MockDesktopNotificationDelegate | 60 class MockDesktopNotificationDelegate | 
| 64 : public content::DesktopNotificationDelegate { | 61 : public content::DesktopNotificationDelegate { | 
| 65 public: | 62 public: | 
| 66 MockDesktopNotificationDelegate() | 63 MockDesktopNotificationDelegate() | 
| 67 : displayed_(false), | 64 : displayed_(false), | 
| 68 clicked_(false) {} | 65 clicked_(false) {} | 
| 69 | 66 | 
| 70 ~MockDesktopNotificationDelegate() override {} | 67 ~MockDesktopNotificationDelegate() override {} | 
| 71 | 68 | 
| 72 // content::DesktopNotificationDelegate implementation. | 69 // content::DesktopNotificationDelegate implementation. | 
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 119 // The close closure may be specified if so desired. | 116 // The close closure may be specified if so desired. | 
| 120 MockDesktopNotificationDelegate* CreateSimplePageNotificationWithCloseClosure( | 117 MockDesktopNotificationDelegate* CreateSimplePageNotificationWithCloseClosure( | 
| 121 base::Closure* close_closure) const { | 118 base::Closure* close_closure) const { | 
| 122 PlatformNotificationData notification_data; | 119 PlatformNotificationData notification_data; | 
| 123 notification_data.title = base::ASCIIToUTF16("My Notification"); | 120 notification_data.title = base::ASCIIToUTF16("My Notification"); | 
| 124 notification_data.body = base::ASCIIToUTF16("Hello, world!"); | 121 notification_data.body = base::ASCIIToUTF16("Hello, world!"); | 
| 125 | 122 | 
| 126 MockDesktopNotificationDelegate* delegate = | 123 MockDesktopNotificationDelegate* delegate = | 
| 127 new MockDesktopNotificationDelegate(); | 124 new MockDesktopNotificationDelegate(); | 
| 128 | 125 | 
| 129 service()->DisplayNotification(profile(), GURL("https://chrome.com/"), | 126 service()->DisplayNotification(profile(), kNotificationId, | 
| 127 GURL("https://chrome.com/"), | |
| 130 notification_data, NotificationResources(), | 128 notification_data, NotificationResources(), | 
| 131 base::WrapUnique(delegate), close_closure); | 129 base::WrapUnique(delegate), close_closure); | 
| 132 | 130 | 
| 133 return delegate; | 131 return delegate; | 
| 134 } | 132 } | 
| 135 | 133 | 
| 136 // Returns the Platform Notification Service these unit tests are for. | 134 // Returns the Platform Notification Service these unit tests are for. | 
| 137 PlatformNotificationServiceImpl* service() const { | 135 PlatformNotificationServiceImpl* service() const { | 
| 138 return PlatformNotificationServiceImpl::GetInstance(); | 136 return PlatformNotificationServiceImpl::GetInstance(); | 
| 139 } | 137 } | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 183 EXPECT_EQ(1u, GetNotificationCount()); | 181 EXPECT_EQ(1u, GetNotificationCount()); | 
| 184 | 182 | 
| 185 ASSERT_FALSE(close_closure.is_null()); | 183 ASSERT_FALSE(close_closure.is_null()); | 
| 186 close_closure.Run(); | 184 close_closure.Run(); | 
| 187 | 185 | 
| 188 EXPECT_EQ(0u, GetNotificationCount()); | 186 EXPECT_EQ(0u, GetNotificationCount()); | 
| 189 // Note that we cannot verify whether the closed event was called on the | 187 // Note that we cannot verify whether the closed event was called on the | 
| 190 // delegate given that it'd result in a use-after-free. | 188 // delegate given that it'd result in a use-after-free. | 
| 191 } | 189 } | 
| 192 | 190 | 
| 193 // TODO(peter): Re-enable this test when //content is responsible for creating | 191 // TODO(peter): Re-enable this test when //content is responsible for creating | 
| 
johnme
2016/09/02 15:07:44
Can you re-enable this test now?
 
Peter Beverloo
2016/09/05 15:11:01
I have no idea. Let's try!
 | |
| 194 // the notification delegate ids. | 192 // the notification delegate ids. | 
| 195 #if !defined(OS_ANDROID) | 193 #if !defined(OS_ANDROID) | 
| 196 TEST_F(PlatformNotificationServiceTest, PersistentNotificationDisplay) { | 194 TEST_F(PlatformNotificationServiceTest, PersistentNotificationDisplay) { | 
| 197 PlatformNotificationData notification_data; | 195 PlatformNotificationData notification_data; | 
| 198 notification_data.title = base::ASCIIToUTF16("My notification's title"); | 196 notification_data.title = base::ASCIIToUTF16("My notification's title"); | 
| 199 notification_data.body = base::ASCIIToUTF16("Hello, world!"); | 197 notification_data.body = base::ASCIIToUTF16("Hello, world!"); | 
| 200 | 198 | 
| 201 service()->DisplayPersistentNotification( | 199 service()->DisplayPersistentNotification( | 
| 202 profile(), kPersistentNotificationId, GURL() /* service_worker_scope */, | 200 profile(), kNotificationId, GURL() /* service_worker_scope */, | 
| 203 GURL("https://chrome.com/"), notification_data, NotificationResources()); | 201 GURL("https://chrome.com/"), notification_data, NotificationResources()); | 
| 204 | 202 | 
| 205 ASSERT_EQ(1u, GetNotificationCount()); | 203 ASSERT_EQ(1u, GetNotificationCount()); | 
| 206 | 204 | 
| 207 Notification notification = GetDisplayedNotification(); | 205 Notification notification = GetDisplayedNotification(); | 
| 208 EXPECT_EQ("https://chrome.com/", notification.origin_url().spec()); | 206 EXPECT_EQ("https://chrome.com/", notification.origin_url().spec()); | 
| 209 EXPECT_EQ("My notification's title", | 207 EXPECT_EQ("My notification's title", | 
| 210 base::UTF16ToUTF8(notification.title())); | 208 base::UTF16ToUTF8(notification.title())); | 
| 211 EXPECT_EQ("Hello, world!", | 209 EXPECT_EQ("Hello, world!", | 
| 212 base::UTF16ToUTF8(notification.message())); | 210 base::UTF16ToUTF8(notification.message())); | 
| 213 | 211 | 
| 214 service()->ClosePersistentNotification(profile(), kPersistentNotificationId); | 212 service()->ClosePersistentNotification(profile(), kNotificationId); | 
| 215 EXPECT_EQ(0u, GetNotificationCount()); | 213 EXPECT_EQ(0u, GetNotificationCount()); | 
| 216 } | 214 } | 
| 217 #endif // !defined(OS_ANDROID) | 215 #endif // !defined(OS_ANDROID) | 
| 218 | 216 | 
| 219 TEST_F(PlatformNotificationServiceTest, DisplayPageNotificationMatches) { | 217 TEST_F(PlatformNotificationServiceTest, DisplayPageNotificationMatches) { | 
| 220 std::vector<int> vibration_pattern( | 218 std::vector<int> vibration_pattern( | 
| 221 kNotificationVibrationPattern, | 219 kNotificationVibrationPattern, | 
| 222 kNotificationVibrationPattern + arraysize(kNotificationVibrationPattern)); | 220 kNotificationVibrationPattern + arraysize(kNotificationVibrationPattern)); | 
| 223 | 221 | 
| 224 PlatformNotificationData notification_data; | 222 PlatformNotificationData notification_data; | 
| 225 notification_data.title = base::ASCIIToUTF16("My notification's title"); | 223 notification_data.title = base::ASCIIToUTF16("My notification's title"); | 
| 226 notification_data.body = base::ASCIIToUTF16("Hello, world!"); | 224 notification_data.body = base::ASCIIToUTF16("Hello, world!"); | 
| 227 notification_data.vibration_pattern = vibration_pattern; | 225 notification_data.vibration_pattern = vibration_pattern; | 
| 228 notification_data.silent = true; | 226 notification_data.silent = true; | 
| 229 | 227 | 
| 230 MockDesktopNotificationDelegate* delegate | 228 MockDesktopNotificationDelegate* delegate | 
| 231 = new MockDesktopNotificationDelegate(); | 229 = new MockDesktopNotificationDelegate(); | 
| 232 service()->DisplayNotification(profile(), GURL("https://chrome.com/"), | 230 service()->DisplayNotification(profile(), kNotificationId, | 
| 233 notification_data, NotificationResources(), | 231 GURL("https://chrome.com/"), notification_data, | 
| 232 NotificationResources(), | |
| 234 base::WrapUnique(delegate), nullptr); | 233 base::WrapUnique(delegate), nullptr); | 
| 235 | 234 | 
| 236 ASSERT_EQ(1u, GetNotificationCount()); | 235 ASSERT_EQ(1u, GetNotificationCount()); | 
| 237 | 236 | 
| 238 Notification notification = GetDisplayedNotification(); | 237 Notification notification = GetDisplayedNotification(); | 
| 239 EXPECT_EQ("https://chrome.com/", notification.origin_url().spec()); | 238 EXPECT_EQ("https://chrome.com/", notification.origin_url().spec()); | 
| 240 EXPECT_EQ("My notification's title", | 239 EXPECT_EQ("My notification's title", | 
| 241 base::UTF16ToUTF8(notification.title())); | 240 base::UTF16ToUTF8(notification.title())); | 
| 242 EXPECT_EQ("Hello, world!", | 241 EXPECT_EQ("Hello, world!", | 
| 243 base::UTF16ToUTF8(notification.message())); | 242 base::UTF16ToUTF8(notification.message())); | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 298 | 297 | 
| 299 base::Time after_page_notification = | 298 base::Time after_page_notification = | 
| 300 HostContentSettingsMapFactory::GetForProfile(profile())->GetLastUsage( | 299 HostContentSettingsMapFactory::GetForProfile(profile())->GetLastUsage( | 
| 301 origin, origin, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | 300 origin, origin, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | 
| 302 EXPECT_GT(after_page_notification, begin_time); | 301 EXPECT_GT(after_page_notification, begin_time); | 
| 303 | 302 | 
| 304 // Ensure that there is at least some time between the two calls. | 303 // Ensure that there is at least some time between the two calls. | 
| 305 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1)); | 304 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1)); | 
| 306 | 305 | 
| 307 service()->DisplayPersistentNotification( | 306 service()->DisplayPersistentNotification( | 
| 308 profile(), 42 /* sw_registration_id */, GURL() /* service_worker_scope */, | 307 profile(), kNotificationId, GURL() /* service_worker_scope */, origin, | 
| 309 origin, PlatformNotificationData(), NotificationResources()); | 308 PlatformNotificationData(), NotificationResources()); | 
| 310 | 309 | 
| 311 base::Time after_persistent_notification = | 310 base::Time after_persistent_notification = | 
| 312 HostContentSettingsMapFactory::GetForProfile(profile())->GetLastUsage( | 311 HostContentSettingsMapFactory::GetForProfile(profile())->GetLastUsage( | 
| 313 origin, origin, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | 312 origin, origin, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | 
| 314 EXPECT_GT(after_persistent_notification, after_page_notification); | 313 EXPECT_GT(after_persistent_notification, after_page_notification); | 
| 315 } | 314 } | 
| 316 | 315 | 
| 317 #if defined(ENABLE_EXTENSIONS) | 316 #if defined(ENABLE_EXTENSIONS) | 
| 318 | 317 | 
| 319 TEST_F(PlatformNotificationServiceTest, DisplayNameForContextMessage) { | 318 TEST_F(PlatformNotificationServiceTest, DisplayNameForContextMessage) { | 
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 433 profile(), | 432 profile(), | 
| 434 GURL() /* service_worker_scope */, | 433 GURL() /* service_worker_scope */, | 
| 435 GURL("chrome-extension://honijodknafkokifofgiaalefdiedpko/main.html"), | 434 GURL("chrome-extension://honijodknafkokifofgiaalefdiedpko/main.html"), | 
| 436 notification_data, NotificationResources(), | 435 notification_data, NotificationResources(), | 
| 437 new MockNotificationDelegate("hello")); | 436 new MockNotificationDelegate("hello")); | 
| 438 EXPECT_EQ("NotificationTest", | 437 EXPECT_EQ("NotificationTest", | 
| 439 base::UTF16ToUTF8(notification.context_message())); | 438 base::UTF16ToUTF8(notification.context_message())); | 
| 440 } | 439 } | 
| 441 | 440 | 
| 442 #endif // defined(ENABLE_EXTENSIONS) | 441 #endif // defined(ENABLE_EXTENSIONS) | 
| OLD | NEW |