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

Side by Side Diff: chrome/browser/push_messaging/push_messaging_browsertest.cc

Issue 1062913005: Push API: Deflake PushEventEnforcesUserVisibleNotification (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bindcurrent
Patch Set: Created 5 years, 8 months 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 unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/push_messaging/push_messaging_service_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <map> 5 #include <map>
6 #include <string> 6 #include <string>
7 7
8 #include "base/barrier_closure.h" 8 #include "base/barrier_closure.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 script, 192 script,
193 result); 193 result);
194 } 194 }
195 195
196 void TryToRegisterSuccessfully( 196 void TryToRegisterSuccessfully(
197 const std::string& expected_push_registration_id); 197 const std::string& expected_push_registration_id);
198 198
199 PushMessagingApplicationId GetServiceWorkerAppId( 199 PushMessagingApplicationId GetServiceWorkerAppId(
200 int64 service_worker_registration_id); 200 int64 service_worker_registration_id);
201 201
202 void SendMessageAndWaitUntilHandled(
203 const PushMessagingApplicationId& app_id,
204 const gcm::GCMClient::IncomingMessage& message);
205
202 net::SpawnedTestServer* https_server() const { return https_server_.get(); } 206 net::SpawnedTestServer* https_server() const { return https_server_.get(); }
203 207
204 gcm::FakeGCMProfileService* gcm_service() const { return gcm_service_; } 208 gcm::FakeGCMProfileService* gcm_service() const { return gcm_service_; }
205 209
206 #if defined(ENABLE_NOTIFICATIONS) 210 #if defined(ENABLE_NOTIFICATIONS)
207 StubNotificationUIManager* notification_manager() const { 211 StubNotificationUIManager* notification_manager() const {
208 return notification_manager_.get(); 212 return notification_manager_.get();
209 } 213 }
210 214
211 PlatformNotificationServiceImpl* notification_service() const { 215 PlatformNotificationServiceImpl* notification_service() const {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 268
265 PushMessagingApplicationId PushMessagingBrowserTest::GetServiceWorkerAppId( 269 PushMessagingApplicationId PushMessagingBrowserTest::GetServiceWorkerAppId(
266 int64 service_worker_registration_id) { 270 int64 service_worker_registration_id) {
267 GURL origin = https_server()->GetURL(std::string()).GetOrigin(); 271 GURL origin = https_server()->GetURL(std::string()).GetOrigin();
268 PushMessagingApplicationId application_id = PushMessagingApplicationId::Get( 272 PushMessagingApplicationId application_id = PushMessagingApplicationId::Get(
269 browser()->profile(), origin, service_worker_registration_id); 273 browser()->profile(), origin, service_worker_registration_id);
270 EXPECT_TRUE(application_id.IsValid()); 274 EXPECT_TRUE(application_id.IsValid());
271 return application_id; 275 return application_id;
272 } 276 }
273 277
278 void PushMessagingBrowserTest::SendMessageAndWaitUntilHandled(
279 const PushMessagingApplicationId& app_id,
280 const gcm::GCMClient::IncomingMessage& message) {
281 base::RunLoop run_loop;
282 push_service()->SetMessageCallbackForTesting(run_loop.QuitClosure());
283 push_service()->OnMessage(app_id.app_id_guid(), message);
284 run_loop.Run();
285 }
286
274 IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, 287 IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
275 RegisterSuccessNotificationsGranted) { 288 RegisterSuccessNotificationsGranted) {
276 TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */); 289 TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
277 290
278 PushMessagingApplicationId app_id = GetServiceWorkerAppId(0LL); 291 PushMessagingApplicationId app_id = GetServiceWorkerAppId(0LL);
279 EXPECT_EQ(app_id.app_id_guid(), gcm_service()->last_registered_app_id()); 292 EXPECT_EQ(app_id.app_id_guid(), gcm_service()->last_registered_app_id());
280 EXPECT_EQ("1234567890", gcm_service()->last_registered_sender_ids()[0]); 293 EXPECT_EQ("1234567890", gcm_service()->last_registered_sender_ids()[0]);
281 } 294 }
282 295
283 IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, 296 IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 // going to run script in a background tab. 490 // going to run script in a background tab.
478 content::WebContents* web_contents = 491 content::WebContents* web_contents =
479 browser()->tab_strip_model()->GetActiveWebContents(); 492 browser()->tab_strip_model()->GetActiveWebContents();
480 493
481 // If the site is visible in an active tab, we should not force a notification 494 // If the site is visible in an active tab, we should not force a notification
482 // to be shown. Try it twice, since we allow one mistake per 10 push events. 495 // to be shown. Try it twice, since we allow one mistake per 10 push events.
483 gcm::GCMClient::IncomingMessage message; 496 gcm::GCMClient::IncomingMessage message;
484 message.sender_id = "1234567890"; 497 message.sender_id = "1234567890";
485 for (int n = 0; n < 2; n++) { 498 for (int n = 0; n < 2; n++) {
486 message.data["data"] = "testdata"; 499 message.data["data"] = "testdata";
487 push_service()->OnMessage(app_id.app_id_guid(), message); 500 SendMessageAndWaitUntilHandled(app_id, message);
488 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result)); 501 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result));
489 EXPECT_EQ("testdata", script_result); 502 EXPECT_EQ("testdata", script_result);
490 EXPECT_EQ(0u, notification_manager()->GetNotificationCount()); 503 EXPECT_EQ(0u, notification_manager()->GetNotificationCount());
491 } 504 }
492 505
493 // Open a blank foreground tab so site is no longer visible. 506 // Open a blank foreground tab so site is no longer visible.
494 ui_test_utils::NavigateToURLWithDisposition( 507 ui_test_utils::NavigateToURLWithDisposition(
495 browser(), GURL("about:blank"), NEW_FOREGROUND_TAB, 508 browser(), GURL("about:blank"), NEW_FOREGROUND_TAB,
496 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); 509 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
497 510
498 // If the Service Worker push event handler does not show a notification, we 511 // If the Service Worker push event handler does not show a notification, we
499 // should show a forced one, but only on the 2nd occurrence since we allow one 512 // should show a forced one, but only on the 2nd occurrence since we allow one
500 // mistake per 10 push events. 513 // mistake per 10 push events.
501 message.data["data"] = "testdata"; 514 message.data["data"] = "testdata";
502 push_service()->OnMessage(app_id.app_id_guid(), message); 515 SendMessageAndWaitUntilHandled(app_id, message);
503 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents)); 516 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents));
504 EXPECT_EQ("testdata", script_result); 517 EXPECT_EQ("testdata", script_result);
505 EXPECT_EQ(0u, notification_manager()->GetNotificationCount()); 518 EXPECT_EQ(0u, notification_manager()->GetNotificationCount());
506 message.data["data"] = "testdata"; 519 message.data["data"] = "testdata";
507 push_service()->OnMessage(app_id.app_id_guid(), message); 520 SendMessageAndWaitUntilHandled(app_id, message);
508 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents)); 521 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents));
509 EXPECT_EQ("testdata", script_result); 522 EXPECT_EQ("testdata", script_result);
510 523
511 EXPECT_EQ(1u, notification_manager()->GetNotificationCount()); 524 EXPECT_EQ(1u, notification_manager()->GetNotificationCount());
512 const Notification& forced_notification = 525 const Notification& forced_notification =
513 notification_manager()->GetNotificationAt(0); 526 notification_manager()->GetNotificationAt(0);
514 527
515 EXPECT_EQ(kPushMessagingForcedNotificationTag, forced_notification.tag()); 528 EXPECT_EQ(kPushMessagingForcedNotificationTag, forced_notification.tag());
516 EXPECT_TRUE(forced_notification.silent()); 529 EXPECT_TRUE(forced_notification.silent());
517 530
518 // Currently, this notification will stick around until the user or webapp 531 // Currently, this notification will stick around until the user or webapp
519 // explicitly dismisses it (though we may change this later). 532 // explicitly dismisses it (though we may change this later).
520 message.data["data"] = "shownotification"; 533 message.data["data"] = "shownotification";
521 push_service()->OnMessage(app_id.app_id_guid(), message); 534 SendMessageAndWaitUntilHandled(app_id, message);
522 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents)); 535 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents));
523 EXPECT_EQ("shownotification", script_result); 536 EXPECT_EQ("shownotification", script_result);
524 EXPECT_EQ(2u, notification_manager()->GetNotificationCount()); 537 EXPECT_EQ(2u, notification_manager()->GetNotificationCount());
525 538
526 notification_manager()->CancelAll(); 539 notification_manager()->CancelAll();
527 EXPECT_EQ(0u, notification_manager()->GetNotificationCount()); 540 EXPECT_EQ(0u, notification_manager()->GetNotificationCount());
528 541
529 // However if the Service Worker push event handler shows a notification, we 542 // However if the Service Worker push event handler shows a notification, we
530 // should not show a forced one. 543 // should not show a forced one.
531 message.data["data"] = "shownotification"; 544 message.data["data"] = "shownotification";
532 for (int n = 0; n < 9; n++) { 545 for (int n = 0; n < 9; n++) {
533 push_service()->OnMessage(app_id.app_id_guid(), message); 546 SendMessageAndWaitUntilHandled(app_id, message);
534 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents)); 547 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents));
535 EXPECT_EQ("shownotification", script_result); 548 EXPECT_EQ("shownotification", script_result);
536 EXPECT_EQ(1u, notification_manager()->GetNotificationCount()); 549 EXPECT_EQ(1u, notification_manager()->GetNotificationCount());
537 EXPECT_EQ("push_test_tag", 550 EXPECT_EQ("push_test_tag",
538 notification_manager()->GetNotificationAt(0).tag()); 551 notification_manager()->GetNotificationAt(0).tag());
539 notification_manager()->CancelAll(); 552 notification_manager()->CancelAll();
540 } 553 }
541 554
542 // Now that 10 push messages in a row have shown notifications, we should 555 // Now that 10 push messages in a row have shown notifications, we should
543 // allow the next one to mistakenly not show a notification. 556 // allow the next one to mistakenly not show a notification.
544 message.data["data"] = "testdata"; 557 message.data["data"] = "testdata";
545 push_service()->OnMessage(app_id.app_id_guid(), message); 558 SendMessageAndWaitUntilHandled(app_id, message);
546 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents)); 559 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents));
547 EXPECT_EQ("testdata", script_result); 560 EXPECT_EQ("testdata", script_result);
548 EXPECT_EQ(0u, notification_manager()->GetNotificationCount()); 561 EXPECT_EQ(0u, notification_manager()->GetNotificationCount());
549 } 562 }
550 563
551 IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, 564 IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
552 PushEventNotificationWithoutEventWaitUntil) { 565 PushEventNotificationWithoutEventWaitUntil) {
553 std::string script_result; 566 std::string script_result;
554 content::WebContents* web_contents = 567 content::WebContents* web_contents =
555 browser()->tab_strip_model()->GetActiveWebContents(); 568 browser()->tab_strip_model()->GetActiveWebContents();
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
1007 browser()->profile()->GetHostContentSettingsMap()-> 1020 browser()->profile()->GetHostContentSettingsMap()->
1008 ClearSettingsForOneType(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING); 1021 ClearSettingsForOneType(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING);
1009 1022
1010 run_loop.Run(); 1023 run_loop.Run();
1011 1024
1012 // app_id should no longer be stored in prefs 1025 // app_id should no longer be stored in prefs
1013 PushMessagingApplicationId stored_app_id2 = PushMessagingApplicationId::Get( 1026 PushMessagingApplicationId stored_app_id2 = PushMessagingApplicationId::Get(
1014 browser()->profile(), app_id.app_id_guid()); 1027 browser()->profile(), app_id.app_id_guid());
1015 EXPECT_FALSE(stored_app_id2.IsValid()); 1028 EXPECT_FALSE(stored_app_id2.IsValid());
1016 } 1029 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/push_messaging/push_messaging_service_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698