| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include <memory> | |
| 6 #include <string> | |
| 7 #include <vector> | |
| 8 | |
| 9 #include "base/command_line.h" | |
| 10 #include "base/files/file_path.h" | |
| 11 #include "base/path_service.h" | |
| 12 #include "base/strings/utf_string_conversions.h" | |
| 13 #include "base/time/time.h" | |
| 14 #include "chrome/browser/notifications/desktop_notification_profile_util.h" | |
| 15 #include "chrome/browser/notifications/message_center_display_service.h" | |
| 16 #include "chrome/browser/notifications/notification.h" | |
| 17 #include "chrome/browser/notifications/notification_test_util.h" | |
| 18 #include "chrome/browser/notifications/platform_notification_service_impl.h" | |
| 19 #include "chrome/browser/permissions/permission_manager.h" | |
| 20 #include "chrome/browser/ui/browser.h" | |
| 21 #include "chrome/browser/ui/tabs/tab_strip_model.h" | |
| 22 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" | |
| 23 #include "chrome/grit/generated_resources.h" | |
| 24 #include "chrome/test/base/in_process_browser_test.h" | |
| 25 #include "chrome/test/base/ui_test_utils.h" | |
| 26 #include "content/public/browser/permission_type.h" | |
| 27 #include "content/public/common/content_switches.h" | |
| 28 #include "content/public/test/browser_test_utils.h" | |
| 29 #include "net/base/filename_util.h" | |
| 30 #include "net/test/embedded_test_server/embedded_test_server.h" | |
| 31 #include "testing/gmock/include/gmock/gmock.h" | |
| 32 #include "third_party/WebKit/public/platform/modules/permissions/permission_stat
us.mojom.h" | |
| 33 #include "ui/base/l10n/l10n_util.h" | |
| 34 | |
| 35 // ----------------------------------------------------------------------------- | |
| 36 | |
| 37 // Dimensions of the icon.png resource in the notification test data directory. | |
| 38 const int kIconWidth = 100; | |
| 39 const int kIconHeight = 100; | |
| 40 | |
| 41 // The maximum width and height of badges. Oversized images are scaled down to | |
| 42 // these values. | |
| 43 const int kMaxBadgeSize = 96; | |
| 44 | |
| 45 const int kNotificationVibrationPattern[] = { 100, 200, 300 }; | |
| 46 const double kNotificationTimestamp = 621046800000.; | |
| 47 | |
| 48 class PlatformNotificationServiceBrowserTest : public InProcessBrowserTest { | |
| 49 public: | |
| 50 PlatformNotificationServiceBrowserTest(); | |
| 51 ~PlatformNotificationServiceBrowserTest() override {} | |
| 52 | |
| 53 // InProcessBrowserTest overrides. | |
| 54 void SetUpCommandLine(base::CommandLine* command_line) override; | |
| 55 void SetUp() override; | |
| 56 void SetUpOnMainThread() override; | |
| 57 void TearDown() override; | |
| 58 | |
| 59 protected: | |
| 60 // Returns the Platform Notification Service these unit tests are for. | |
| 61 PlatformNotificationServiceImpl* service() const { | |
| 62 return PlatformNotificationServiceImpl::GetInstance(); | |
| 63 } | |
| 64 | |
| 65 // Grants permission to display Web Notifications for origin of the test | |
| 66 // page that's being used in this browser test. | |
| 67 void GrantNotificationPermissionForTest() const; | |
| 68 | |
| 69 bool RequestAndAcceptPermission(); | |
| 70 bool RequestAndDenyPermission(); | |
| 71 | |
| 72 // Returns the UI Manager on which notifications will be displayed. | |
| 73 StubNotificationUIManager* ui_manager() const { return ui_manager_.get(); } | |
| 74 | |
| 75 const base::FilePath& server_root() const { return server_root_; } | |
| 76 | |
| 77 // Navigates the browser to the test page indicated by |path|. | |
| 78 void NavigateToTestPage(const std::string& path) const; | |
| 79 | |
| 80 // Executes |script| and stores the result as a string in |result|. A boolean | |
| 81 // will be returned, indicating whether the script was executed successfully. | |
| 82 bool RunScript(const std::string& script, std::string* result) const; | |
| 83 | |
| 84 net::HostPortPair ServerHostPort() const; | |
| 85 GURL TestPageUrl() const; | |
| 86 | |
| 87 private: | |
| 88 std::string RequestAndRespondToPermission( | |
| 89 PermissionBubbleManager::AutoResponseType bubble_response); | |
| 90 | |
| 91 content::WebContents* GetActiveWebContents(Browser* browser) { | |
| 92 return browser->tab_strip_model()->GetActiveWebContents(); | |
| 93 } | |
| 94 | |
| 95 const base::FilePath server_root_; | |
| 96 const std::string test_page_url_; | |
| 97 std::unique_ptr<StubNotificationUIManager> ui_manager_; | |
| 98 std::unique_ptr<MessageCenterDisplayService> display_service_; | |
| 99 std::unique_ptr<net::EmbeddedTestServer> https_server_; | |
| 100 }; | |
| 101 | |
| 102 // ----------------------------------------------------------------------------- | |
| 103 | |
| 104 namespace { | |
| 105 const char kTestFileName[] = "notifications/platform_notification_service.html"; | |
| 106 } | |
| 107 | |
| 108 PlatformNotificationServiceBrowserTest::PlatformNotificationServiceBrowserTest() | |
| 109 : server_root_(FILE_PATH_LITERAL("chrome/test/data")), | |
| 110 // The test server has a base directory that doesn't exist in the | |
| 111 // filesystem. | |
| 112 test_page_url_(std::string("/") + kTestFileName) {} | |
| 113 | |
| 114 void PlatformNotificationServiceBrowserTest::SetUpCommandLine( | |
| 115 base::CommandLine* command_line) { | |
| 116 command_line->AppendSwitch(switches::kEnableExperimentalWebPlatformFeatures); | |
| 117 | |
| 118 InProcessBrowserTest::SetUpCommandLine(command_line); | |
| 119 } | |
| 120 | |
| 121 void PlatformNotificationServiceBrowserTest::SetUp() { | |
| 122 ui_manager_.reset(new StubNotificationUIManager); | |
| 123 https_server_.reset( | |
| 124 new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS)); | |
| 125 https_server_->ServeFilesFromSourceDirectory(server_root_); | |
| 126 ASSERT_TRUE(https_server_->Start()); | |
| 127 InProcessBrowserTest::SetUp(); | |
| 128 } | |
| 129 | |
| 130 void PlatformNotificationServiceBrowserTest::SetUpOnMainThread() { | |
| 131 NavigateToTestPage(test_page_url_); | |
| 132 display_service_.reset( | |
| 133 new MessageCenterDisplayService(browser()->profile(), ui_manager_.get())); | |
| 134 service()->SetNotificationDisplayServiceForTesting(display_service_.get()); | |
| 135 InProcessBrowserTest::SetUpOnMainThread(); | |
| 136 } | |
| 137 | |
| 138 void PlatformNotificationServiceBrowserTest::TearDown() { | |
| 139 service()->SetNotificationDisplayServiceForTesting(nullptr); | |
| 140 } | |
| 141 | |
| 142 void PlatformNotificationServiceBrowserTest:: | |
| 143 GrantNotificationPermissionForTest() const { | |
| 144 GURL origin = TestPageUrl().GetOrigin(); | |
| 145 | |
| 146 DesktopNotificationProfileUtil::GrantPermission(browser()->profile(), origin); | |
| 147 ASSERT_EQ(CONTENT_SETTING_ALLOW, | |
| 148 DesktopNotificationProfileUtil::GetContentSetting( | |
| 149 browser()->profile(), origin)); | |
| 150 } | |
| 151 | |
| 152 void PlatformNotificationServiceBrowserTest::NavigateToTestPage( | |
| 153 const std::string& path) const { | |
| 154 ui_test_utils::NavigateToURL(browser(), https_server_->GetURL(path)); | |
| 155 } | |
| 156 | |
| 157 bool PlatformNotificationServiceBrowserTest::RunScript( | |
| 158 const std::string& script, std::string* result) const { | |
| 159 return content::ExecuteScriptAndExtractString( | |
| 160 browser()->tab_strip_model()->GetActiveWebContents()->GetMainFrame(), | |
| 161 script, | |
| 162 result); | |
| 163 } | |
| 164 | |
| 165 net::HostPortPair PlatformNotificationServiceBrowserTest::ServerHostPort() | |
| 166 const { | |
| 167 return https_server_->host_port_pair(); | |
| 168 } | |
| 169 | |
| 170 GURL PlatformNotificationServiceBrowserTest::TestPageUrl() const { | |
| 171 return https_server_->GetURL(test_page_url_); | |
| 172 } | |
| 173 | |
| 174 std::string | |
| 175 PlatformNotificationServiceBrowserTest::RequestAndRespondToPermission( | |
| 176 PermissionBubbleManager::AutoResponseType bubble_response) { | |
| 177 std::string result; | |
| 178 content::WebContents* web_contents = GetActiveWebContents(browser()); | |
| 179 PermissionBubbleManager::FromWebContents(web_contents) | |
| 180 ->set_auto_response_for_test(bubble_response); | |
| 181 EXPECT_TRUE(RunScript("RequestPermission();", &result)); | |
| 182 return result; | |
| 183 } | |
| 184 | |
| 185 bool PlatformNotificationServiceBrowserTest::RequestAndAcceptPermission() { | |
| 186 std::string result = | |
| 187 RequestAndRespondToPermission(PermissionBubbleManager::ACCEPT_ALL); | |
| 188 return "granted" == result; | |
| 189 } | |
| 190 | |
| 191 bool PlatformNotificationServiceBrowserTest::RequestAndDenyPermission() { | |
| 192 std::string result = | |
| 193 RequestAndRespondToPermission(PermissionBubbleManager::DENY_ALL); | |
| 194 return "denied" == result; | |
| 195 } | |
| 196 | |
| 197 // ----------------------------------------------------------------------------- | |
| 198 | |
| 199 // TODO(peter): Move PlatformNotificationService-related tests over from | |
| 200 // notification_browsertest.cc to this file. | |
| 201 | |
| 202 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, | |
| 203 DisplayPersistentNotificationWithoutPermission) { | |
| 204 RequestAndDenyPermission(); | |
| 205 | |
| 206 std::string script_result; | |
| 207 ASSERT_TRUE(RunScript("DisplayPersistentNotification()", &script_result)); | |
| 208 EXPECT_EQ( | |
| 209 "TypeError: No notification permission has been granted for this origin.", | |
| 210 script_result); | |
| 211 | |
| 212 ASSERT_EQ(0u, ui_manager()->GetNotificationCount()); | |
| 213 } | |
| 214 | |
| 215 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, | |
| 216 DisplayPersistentNotificationWithPermission) { | |
| 217 RequestAndAcceptPermission(); | |
| 218 | |
| 219 std::string script_result; | |
| 220 ASSERT_TRUE(RunScript("DisplayPersistentNotification('action_none')", | |
| 221 &script_result)); | |
| 222 EXPECT_EQ("ok", script_result); | |
| 223 | |
| 224 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); | |
| 225 | |
| 226 const Notification& notification = ui_manager()->GetNotificationAt(0); | |
| 227 notification.delegate()->Click(); | |
| 228 | |
| 229 ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); | |
| 230 EXPECT_EQ("action_none", script_result); | |
| 231 | |
| 232 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); | |
| 233 } | |
| 234 | |
| 235 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, | |
| 236 WebNotificationOptionsReflection) { | |
| 237 ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); | |
| 238 | |
| 239 // First, test the default values. | |
| 240 | |
| 241 std::string script_result; | |
| 242 ASSERT_TRUE(RunScript("DisplayPersistentNotification('Some title', {})", | |
| 243 &script_result)); | |
| 244 EXPECT_EQ("ok", script_result); | |
| 245 | |
| 246 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); | |
| 247 | |
| 248 // We don't use or check the notification's direction and language. | |
| 249 const Notification& default_notification = ui_manager()->GetNotificationAt(0); | |
| 250 EXPECT_EQ("Some title", base::UTF16ToUTF8(default_notification.title())); | |
| 251 EXPECT_EQ("", base::UTF16ToUTF8(default_notification.message())); | |
| 252 EXPECT_EQ("", default_notification.tag()); | |
| 253 EXPECT_TRUE(default_notification.icon().IsEmpty()); | |
| 254 EXPECT_TRUE(default_notification.small_image().IsEmpty()); | |
| 255 EXPECT_FALSE(default_notification.renotify()); | |
| 256 EXPECT_FALSE(default_notification.silent()); | |
| 257 EXPECT_FALSE(default_notification.never_timeout()); | |
| 258 EXPECT_EQ(0u, default_notification.buttons().size()); | |
| 259 | |
| 260 // Verifies that the notification's default timestamp is set in the last 30 | |
| 261 // seconds. This number has no significance, but it needs to be significantly | |
| 262 // high to avoid flakiness in the test. | |
| 263 EXPECT_NEAR(default_notification.timestamp().ToJsTime(), | |
| 264 base::Time::Now().ToJsTime(), 30 * 1000); | |
| 265 | |
| 266 // Now, test the non-default values. | |
| 267 | |
| 268 ASSERT_TRUE(RunScript("DisplayPersistentAllOptionsNotification()", | |
| 269 &script_result)); | |
| 270 EXPECT_EQ("ok", script_result); | |
| 271 | |
| 272 ASSERT_EQ(2u, ui_manager()->GetNotificationCount()); | |
| 273 | |
| 274 // We don't use or check the notification's direction and language. | |
| 275 const Notification& all_options_notification = | |
| 276 ui_manager()->GetNotificationAt(1); | |
| 277 EXPECT_EQ("Title", base::UTF16ToUTF8(all_options_notification.title())); | |
| 278 EXPECT_EQ("Contents", base::UTF16ToUTF8(all_options_notification.message())); | |
| 279 EXPECT_EQ("replace-id", all_options_notification.tag()); | |
| 280 EXPECT_FALSE(all_options_notification.icon().IsEmpty()); | |
| 281 EXPECT_EQ(kIconWidth, all_options_notification.icon().Width()); | |
| 282 EXPECT_EQ(kIconHeight, all_options_notification.icon().Height()); | |
| 283 EXPECT_FALSE(all_options_notification.small_image().IsEmpty()); | |
| 284 EXPECT_EQ(kMaxBadgeSize, all_options_notification.small_image().Width()); | |
| 285 EXPECT_EQ(kMaxBadgeSize, all_options_notification.small_image().Height()); | |
| 286 EXPECT_TRUE(all_options_notification.renotify()); | |
| 287 EXPECT_TRUE(all_options_notification.silent()); | |
| 288 EXPECT_TRUE(all_options_notification.never_timeout()); | |
| 289 EXPECT_DOUBLE_EQ(kNotificationTimestamp, | |
| 290 all_options_notification.timestamp().ToJsTime()); | |
| 291 EXPECT_EQ(1u, all_options_notification.buttons().size()); | |
| 292 EXPECT_EQ("actionTitle", | |
| 293 base::UTF16ToUTF8(all_options_notification.buttons()[0].title)); | |
| 294 EXPECT_FALSE(all_options_notification.buttons()[0].icon.IsEmpty()); | |
| 295 EXPECT_EQ(kIconWidth, all_options_notification.buttons()[0].icon.Width()); | |
| 296 EXPECT_EQ(kIconHeight, all_options_notification.buttons()[0].icon.Height()); | |
| 297 } | |
| 298 | |
| 299 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, | |
| 300 WebNotificationSiteSettingsButton) { | |
| 301 ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); | |
| 302 | |
| 303 std::string script_result; | |
| 304 ASSERT_TRUE(RunScript("DisplayPersistentNotification('Some title', {})", | |
| 305 &script_result)); | |
| 306 EXPECT_EQ("ok", script_result); | |
| 307 | |
| 308 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); | |
| 309 | |
| 310 const Notification& notification = ui_manager()->GetNotificationAt(0); | |
| 311 const std::vector<message_center::ButtonInfo>& buttons = | |
| 312 notification.buttons(); | |
| 313 EXPECT_EQ(0u, buttons.size()); | |
| 314 | |
| 315 notification.delegate()->SettingsClick(); | |
| 316 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); | |
| 317 content::WebContents* web_contents = | |
| 318 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 319 ASSERT_TRUE(content::WaitForLoadStop(web_contents)); | |
| 320 ASSERT_EQ("chrome://settings/contentExceptions#notifications", | |
| 321 web_contents->GetLastCommittedURL().spec()); | |
| 322 } | |
| 323 | |
| 324 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, | |
| 325 WebNotificationOptionsVibrationPattern) { | |
| 326 ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); | |
| 327 | |
| 328 std::string script_result; | |
| 329 ASSERT_TRUE(RunScript("DisplayPersistentNotificationVibrate()", | |
| 330 &script_result)); | |
| 331 EXPECT_EQ("ok", script_result); | |
| 332 | |
| 333 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); | |
| 334 | |
| 335 const Notification& notification = ui_manager()->GetNotificationAt(0); | |
| 336 EXPECT_EQ("Title", base::UTF16ToUTF8(notification.title())); | |
| 337 EXPECT_EQ("Contents", base::UTF16ToUTF8(notification.message())); | |
| 338 | |
| 339 EXPECT_THAT(notification.vibration_pattern(), | |
| 340 testing::ElementsAreArray(kNotificationVibrationPattern)); | |
| 341 } | |
| 342 | |
| 343 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, | |
| 344 CloseDisplayedPersistentNotification) { | |
| 345 ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); | |
| 346 | |
| 347 std::string script_result; | |
| 348 ASSERT_TRUE(RunScript("DisplayPersistentNotification('action_close')", | |
| 349 &script_result)); | |
| 350 EXPECT_EQ("ok", script_result); | |
| 351 | |
| 352 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); | |
| 353 | |
| 354 const Notification& notification = ui_manager()->GetNotificationAt(0); | |
| 355 notification.delegate()->Click(); | |
| 356 | |
| 357 ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); | |
| 358 EXPECT_EQ("action_close", script_result); | |
| 359 | |
| 360 ASSERT_EQ(0u, ui_manager()->GetNotificationCount()); | |
| 361 } | |
| 362 | |
| 363 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, | |
| 364 UserClosesPersistentNotification) { | |
| 365 ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); | |
| 366 | |
| 367 std::string script_result; | |
| 368 ASSERT_TRUE( | |
| 369 RunScript("DisplayPersistentNotification('close_test')", &script_result)); | |
| 370 EXPECT_EQ("ok", script_result); | |
| 371 | |
| 372 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); | |
| 373 const Notification& notification = ui_manager()->GetNotificationAt(0); | |
| 374 notification.delegate()->Close(true /* by_user */); | |
| 375 | |
| 376 ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); | |
| 377 EXPECT_EQ("closing notification: close_test", script_result); | |
| 378 } | |
| 379 | |
| 380 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, | |
| 381 TestDisplayOriginContextMessage) { | |
| 382 RequestAndAcceptPermission(); | |
| 383 | |
| 384 // Creates a simple notification. | |
| 385 std::string script_result; | |
| 386 ASSERT_TRUE(RunScript("DisplayPersistentNotification()", &script_result)); | |
| 387 | |
| 388 net::HostPortPair host_port = ServerHostPort(); | |
| 389 | |
| 390 const Notification& notification = ui_manager()->GetNotificationAt(0); | |
| 391 | |
| 392 EXPECT_TRUE(notification.context_message().empty()); | |
| 393 EXPECT_EQ("https://" + host_port.ToString() + "/", | |
| 394 notification.origin_url().spec()); | |
| 395 } | |
| 396 | |
| 397 // TODO(felt): This DCHECKs when bubbles are enabled, when the file_url is | |
| 398 // persisted. crbug.com/502057 | |
| 399 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, | |
| 400 DISABLED_CheckFilePermissionNotGranted) { | |
| 401 // This case should succeed because a normal page URL is used. | |
| 402 std::string script_result; | |
| 403 | |
| 404 PermissionManager* permission_manager = | |
| 405 PermissionManager::Get(browser()->profile()); | |
| 406 | |
| 407 EXPECT_EQ(blink::mojom::PermissionStatus::ASK, | |
| 408 permission_manager->GetPermissionStatus( | |
| 409 content::PermissionType::NOTIFICATIONS, TestPageUrl(), | |
| 410 TestPageUrl())); | |
| 411 | |
| 412 RequestAndAcceptPermission(); | |
| 413 EXPECT_EQ(blink::mojom::PermissionStatus::GRANTED, | |
| 414 permission_manager->GetPermissionStatus( | |
| 415 content::PermissionType::NOTIFICATIONS, TestPageUrl(), | |
| 416 TestPageUrl())); | |
| 417 | |
| 418 // This case should fail because a file URL is used. | |
| 419 base::FilePath dir_source_root; | |
| 420 EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &dir_source_root)); | |
| 421 base::FilePath full_file_path = | |
| 422 dir_source_root.Append(server_root()).AppendASCII(kTestFileName); | |
| 423 GURL file_url(net::FilePathToFileURL(full_file_path)); | |
| 424 | |
| 425 ui_test_utils::NavigateToURL(browser(), file_url); | |
| 426 | |
| 427 EXPECT_EQ(blink::mojom::PermissionStatus::ASK, | |
| 428 permission_manager->GetPermissionStatus( | |
| 429 content::PermissionType::NOTIFICATIONS, file_url, file_url)); | |
| 430 | |
| 431 RequestAndAcceptPermission(); | |
| 432 EXPECT_EQ(blink::mojom::PermissionStatus::ASK, | |
| 433 permission_manager->GetPermissionStatus( | |
| 434 content::PermissionType::NOTIFICATIONS, file_url, file_url)) | |
| 435 << "If this test fails, you may have fixed a bug preventing file origins " | |
| 436 << "from sending their origin from Blink; if so you need to update the " | |
| 437 << "display function for notification origins to show the file path."; | |
| 438 } | |
| 439 | |
| 440 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, | |
| 441 DataUrlAsNotificationImage) { | |
| 442 ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); | |
| 443 | |
| 444 std::string script_result; | |
| 445 ASSERT_TRUE(RunScript("DisplayPersistentNotificationDataUrlImage()", | |
| 446 &script_result)); | |
| 447 EXPECT_EQ("ok", script_result); | |
| 448 | |
| 449 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); | |
| 450 | |
| 451 const Notification& notification = ui_manager()->GetNotificationAt(0); | |
| 452 EXPECT_FALSE(notification.icon().IsEmpty()); | |
| 453 | |
| 454 EXPECT_EQ("Data URL Title", base::UTF16ToUTF8(notification.title())); | |
| 455 EXPECT_EQ(kIconWidth, notification.icon().Width()); | |
| 456 EXPECT_EQ(kIconHeight, notification.icon().Height()); | |
| 457 } | |
| 458 | |
| 459 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, | |
| 460 BlobAsNotificationImage) { | |
| 461 ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); | |
| 462 | |
| 463 std::string script_result; | |
| 464 ASSERT_TRUE(RunScript("DisplayPersistentNotificationBlobImage()", | |
| 465 &script_result)); | |
| 466 EXPECT_EQ("ok", script_result); | |
| 467 | |
| 468 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); | |
| 469 | |
| 470 const Notification& notification = ui_manager()->GetNotificationAt(0); | |
| 471 EXPECT_FALSE(notification.icon().IsEmpty()); | |
| 472 | |
| 473 EXPECT_EQ("Blob Title", base::UTF16ToUTF8(notification.title())); | |
| 474 EXPECT_EQ(kIconWidth, notification.icon().Width()); | |
| 475 EXPECT_EQ(kIconHeight, notification.icon().Height()); | |
| 476 } | |
| 477 | |
| 478 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, | |
| 479 DisplayPersistentNotificationWithActionButtons) { | |
| 480 ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); | |
| 481 | |
| 482 std::string script_result; | |
| 483 ASSERT_TRUE(RunScript("DisplayPersistentNotificationWithActionButtons()", | |
| 484 &script_result)); | |
| 485 EXPECT_EQ("ok", script_result); | |
| 486 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); | |
| 487 | |
| 488 const Notification& notification = ui_manager()->GetNotificationAt(0); | |
| 489 ASSERT_EQ(2u, notification.buttons().size()); | |
| 490 EXPECT_EQ("actionTitle1", base::UTF16ToUTF8(notification.buttons()[0].title)); | |
| 491 EXPECT_EQ("actionTitle2", base::UTF16ToUTF8(notification.buttons()[1].title)); | |
| 492 | |
| 493 notification.delegate()->ButtonClick(0); | |
| 494 ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); | |
| 495 EXPECT_EQ("action_button_click actionId1", script_result); | |
| 496 | |
| 497 notification.delegate()->ButtonClick(1); | |
| 498 ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); | |
| 499 EXPECT_EQ("action_button_click actionId2", script_result); | |
| 500 } | |
| OLD | NEW |