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

Side by Side Diff: chrome/browser/services/gcm/push_messaging_browsertest.cc

Issue 914693002: Push API: Fix unsubscribing from GCM on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove obsolete PushEventNoPermission test Created 5 years, 10 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/services/gcm/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/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 InfoBarService* infobar_service_; 82 InfoBarService* infobar_service_;
83 bool accept_; 83 bool accept_;
84 bool has_observed_; 84 bool has_observed_;
85 }; 85 };
86 86
87 // Class to instantiate on the stack that is meant to be used with 87 // Class to instantiate on the stack that is meant to be used with
88 // FakeGCMProfileService. The ::Run() method follows the signature of 88 // FakeGCMProfileService. The ::Run() method follows the signature of
89 // FakeGCMProfileService::UnregisterCallback. 89 // FakeGCMProfileService::UnregisterCallback.
90 class UnregistrationCallback { 90 class UnregistrationCallback {
91 public: 91 public:
92 UnregistrationCallback() : done_(false) {} 92 UnregistrationCallback() : done_(false), waiting_(false) {}
93 93
94 void Run(const std::string& app_id) { 94 void Run(const std::string& app_id) {
95 app_id_ = app_id; 95 app_id_ = app_id;
96 done_ = true; 96 done_ = true;
97 base::MessageLoop::current()->Quit(); 97 if (waiting_)
98 base::MessageLoop::current()->Quit();
98 } 99 }
99 100
100 void WaitUntilSatisfied() { 101 void WaitUntilSatisfied() {
102 if (done_)
103 return;
104
105 waiting_ = true;
101 while (!done_) 106 while (!done_)
102 content::RunMessageLoop(); 107 content::RunMessageLoop();
103 } 108 }
104 109
105 const std::string& app_id() { 110 const std::string& app_id() {
106 return app_id_; 111 return app_id_;
107 } 112 }
108 113
109 private: 114 private:
110 bool done_; 115 bool done_;
116 bool waiting_;
111 std::string app_id_; 117 std::string app_id_;
112 }; 118 };
113 119
114 // Class to instantiate on the stack that is meant to be used with 120 // Class to instantiate on the stack that is meant to be used with
115 // StubNotificationUIManager::SetNotificationAddedCallback. Mind that Run() 121 // StubNotificationUIManager::SetNotificationAddedCallback. Mind that Run()
116 // might be invoked prior to WaitUntilSatisfied() being called. 122 // might be invoked prior to WaitUntilSatisfied() being called.
117 class NotificationAddedCallback { 123 class NotificationAddedCallback {
118 public: 124 public:
119 NotificationAddedCallback() : done_(false), waiting_(false) {} 125 NotificationAddedCallback() : done_(false), waiting_(false) {}
120 126
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 457
452 ASSERT_TRUE(RunScript("isControlled()", &script_result)); 458 ASSERT_TRUE(RunScript("isControlled()", &script_result));
453 ASSERT_EQ("false - is not controlled", script_result); 459 ASSERT_EQ("false - is not controlled", script_result);
454 460
455 LoadTestPage(); // Reload to become controlled. 461 LoadTestPage(); // Reload to become controlled.
456 462
457 ASSERT_TRUE(RunScript("isControlled()", &script_result)); 463 ASSERT_TRUE(RunScript("isControlled()", &script_result));
458 ASSERT_EQ("true - is controlled", script_result); 464 ASSERT_EQ("true - is controlled", script_result);
459 465
460 GCMClient::IncomingMessage message; 466 GCMClient::IncomingMessage message;
467 message.sender_id = "1234567890";
461 message.data["data"] = "testdata"; 468 message.data["data"] = "testdata";
462 push_service()->OnMessage(app_id.app_id_guid(), message); 469 push_service()->OnMessage(app_id.app_id_guid(), message);
463 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result)); 470 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result));
464 EXPECT_EQ("testdata", script_result); 471 EXPECT_EQ("testdata", script_result);
465 } 472 }
466 473
467 IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PushEventNoServiceWorker) { 474 IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PushEventNoServiceWorker) {
468 if (!IsPushSupported()) 475 if (!IsPushSupported())
469 return; 476 return;
470 477
(...skipping 17 matching lines...) Expand all
488 ASSERT_TRUE(RunScript("unregisterServiceWorker()", &script_result)); 495 ASSERT_TRUE(RunScript("unregisterServiceWorker()", &script_result));
489 ASSERT_EQ("service worker unregistration status: true", script_result); 496 ASSERT_EQ("service worker unregistration status: true", script_result);
490 497
491 // When the push service will receive it next message, given that there is no 498 // When the push service will receive it next message, given that there is no
492 // SW available, it should unregister |app_id|. 499 // SW available, it should unregister |app_id|.
493 UnregistrationCallback callback; 500 UnregistrationCallback callback;
494 gcm_service()->SetUnregisterCallback(base::Bind(&UnregistrationCallback::Run, 501 gcm_service()->SetUnregisterCallback(base::Bind(&UnregistrationCallback::Run,
495 base::Unretained(&callback))); 502 base::Unretained(&callback)));
496 503
497 GCMClient::IncomingMessage message; 504 GCMClient::IncomingMessage message;
505 message.sender_id = "1234567890";
498 message.data["data"] = "testdata"; 506 message.data["data"] = "testdata";
499 push_service()->OnMessage(app_id.app_id_guid(), message); 507 push_service()->OnMessage(app_id.app_id_guid(), message);
500 508
501 callback.WaitUntilSatisfied();
502 EXPECT_EQ(app_id.app_id_guid(), callback.app_id());
503
504 // No push data should have been received.
505 ASSERT_TRUE(RunScript("resultQueue.popImmediately()", &script_result));
506 EXPECT_EQ("null", script_result);
507 }
508
509 IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PushEventNoPermission) {
510 if (!IsPushSupported())
511 return;
512
513 std::string script_result;
514
515 TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
516
517 PushMessagingApplicationId app_id = GetServiceWorkerAppId(0LL);
518 EXPECT_EQ(app_id.app_id_guid(), gcm_service()->last_registered_app_id());
519 EXPECT_EQ("1234567890", gcm_service()->last_registered_sender_ids()[0]);
520
521 ASSERT_TRUE(RunScript("isControlled()", &script_result));
522 ASSERT_EQ("false - is not controlled", script_result);
523
524 LoadTestPage(); // Reload to become controlled.
525
526 ASSERT_TRUE(RunScript("isControlled()", &script_result));
527 ASSERT_EQ("true - is controlled", script_result);
528
529 // Revoke Push permission.
530 browser()->profile()->GetHostContentSettingsMap()->
531 ClearSettingsForOneType(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING);
532
533 // When the push service will receive its next message, given that there is no
534 // SW available, it should unregister |app_id|.
535 UnregistrationCallback callback;
536 gcm_service()->SetUnregisterCallback(base::Bind(&UnregistrationCallback::Run,
537 base::Unretained(&callback)));
538
539 GCMClient::IncomingMessage message;
540 message.data["data"] = "testdata";
541 push_service()->OnMessage(app_id.app_id_guid(), message);
542
543 callback.WaitUntilSatisfied(); 509 callback.WaitUntilSatisfied();
544 EXPECT_EQ(app_id.app_id_guid(), callback.app_id()); 510 EXPECT_EQ(app_id.app_id_guid(), callback.app_id());
545 511
546 // No push data should have been received. 512 // No push data should have been received.
547 ASSERT_TRUE(RunScript("resultQueue.popImmediately()", &script_result)); 513 ASSERT_TRUE(RunScript("resultQueue.popImmediately()", &script_result));
548 EXPECT_EQ("null", script_result); 514 EXPECT_EQ("null", script_result);
549 } 515 }
550 516
551 #if defined(ENABLE_NOTIFICATIONS) 517 #if defined(ENABLE_NOTIFICATIONS)
552 IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, 518 IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
(...skipping 21 matching lines...) Expand all
574 ASSERT_EQ(0u, notification_manager()->GetNotificationCount()); 540 ASSERT_EQ(0u, notification_manager()->GetNotificationCount());
575 541
576 // We'll need to specify the web_contents in which to eval script, since we're 542 // We'll need to specify the web_contents in which to eval script, since we're
577 // going to run script in a background tab. 543 // going to run script in a background tab.
578 content::WebContents* web_contents = 544 content::WebContents* web_contents =
579 browser()->tab_strip_model()->GetActiveWebContents(); 545 browser()->tab_strip_model()->GetActiveWebContents();
580 546
581 // If the site is visible in an active tab, we should not force a notification 547 // If the site is visible in an active tab, we should not force a notification
582 // to be shown. Try it twice, since we allow one mistake per 10 push events. 548 // to be shown. Try it twice, since we allow one mistake per 10 push events.
583 GCMClient::IncomingMessage message; 549 GCMClient::IncomingMessage message;
550 message.sender_id = "1234567890";
584 for (int n = 0; n < 2; n++) { 551 for (int n = 0; n < 2; n++) {
585 message.data["data"] = "testdata"; 552 message.data["data"] = "testdata";
586 push_service()->OnMessage(app_id.app_id_guid(), message); 553 push_service()->OnMessage(app_id.app_id_guid(), message);
587 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result)); 554 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result));
588 EXPECT_EQ("testdata", script_result); 555 EXPECT_EQ("testdata", script_result);
589 EXPECT_EQ(0u, notification_manager()->GetNotificationCount()); 556 EXPECT_EQ(0u, notification_manager()->GetNotificationCount());
590 } 557 }
591 558
592 // Open a blank foreground tab so site is no longer visible. 559 // Open a blank foreground tab so site is no longer visible.
593 ui_test_utils::NavigateToURLWithDisposition( 560 ui_test_utils::NavigateToURLWithDisposition(
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 LoadTestPage(); // Reload to become controlled. 631 LoadTestPage(); // Reload to become controlled.
665 632
666 ASSERT_TRUE(RunScript("isControlled()", &script_result)); 633 ASSERT_TRUE(RunScript("isControlled()", &script_result));
667 ASSERT_EQ("true - is controlled", script_result); 634 ASSERT_EQ("true - is controlled", script_result);
668 635
669 NotificationAddedCallback callback; 636 NotificationAddedCallback callback;
670 notification_manager()->SetNotificationAddedCallback( 637 notification_manager()->SetNotificationAddedCallback(
671 base::Bind(&NotificationAddedCallback::Run, base::Unretained(&callback))); 638 base::Bind(&NotificationAddedCallback::Run, base::Unretained(&callback)));
672 639
673 GCMClient::IncomingMessage message; 640 GCMClient::IncomingMessage message;
641 message.sender_id = "1234567890";
674 message.data["data"] = "shownotification-without-waituntil"; 642 message.data["data"] = "shownotification-without-waituntil";
675 push_service()->OnMessage(app_id.app_id_guid(), message); 643 push_service()->OnMessage(app_id.app_id_guid(), message);
676 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents)); 644 ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents));
677 EXPECT_EQ("immediate:shownotification-without-waituntil", script_result); 645 EXPECT_EQ("immediate:shownotification-without-waituntil", script_result);
678 646
679 callback.WaitUntilSatisfied(); 647 callback.WaitUntilSatisfied();
680 648
681 ASSERT_EQ(1u, notification_manager()->GetNotificationCount()); 649 ASSERT_EQ(1u, notification_manager()->GetNotificationCount());
682 EXPECT_EQ(base::ASCIIToUTF16("push_test_tag"), 650 EXPECT_EQ(base::ASCIIToUTF16("push_test_tag"),
683 notification_manager()->GetNotificationAt(0).replace_id()); 651 notification_manager()->GetNotificationAt(0).replace_id());
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 // left without permission to use Push. 1002 // left without permission to use Push.
1035 1003
1036 ASSERT_TRUE(RunScript("hasPermission()", &script_result)); 1004 ASSERT_TRUE(RunScript("hasPermission()", &script_result));
1037 EXPECT_EQ("permission status - granted", script_result); 1005 EXPECT_EQ("permission status - granted", script_result);
1038 1006
1039 ASSERT_TRUE(RunScript("hasRegistration()", &script_result)); 1007 ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
1040 EXPECT_EQ("true - registered", script_result); 1008 EXPECT_EQ("true - registered", script_result);
1041 } 1009 }
1042 1010
1043 } // namespace gcm 1011 } // namespace gcm
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/services/gcm/push_messaging_service_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698