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

Side by Side Diff: components/gcm_driver/gcm_client_impl_unittest.cc

Issue 2111973002: Add support for GCM subtypes to desktop Instance ID implementation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@iid9push
Patch Set: Remove channel from product_category_for_subtypes, and address nits Created 4 years, 4 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 | « components/gcm_driver/gcm_client_impl.cc ('k') | components/gcm_driver/gcm_desktop_utils.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 "components/gcm_driver/gcm_client_impl.h" 5 #include "components/gcm_driver/gcm_client_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <initializer_list>
9 #include <memory> 10 #include <memory>
10 11
11 #include "base/command_line.h" 12 #include "base/command_line.h"
12 #include "base/files/file_path.h" 13 #include "base/files/file_path.h"
13 #include "base/files/file_util.h" 14 #include "base/files/file_util.h"
14 #include "base/files/scoped_temp_dir.h" 15 #include "base/files/scoped_temp_dir.h"
15 #include "base/macros.h" 16 #include "base/macros.h"
16 #include "base/memory/ptr_util.h" 17 #include "base/memory/ptr_util.h"
17 #include "base/strings/string_number_conversions.h" 18 #include "base/strings/string_number_conversions.h"
18 #include "base/test/test_mock_time_task_runner.h" 19 #include "base/test/test_mock_time_task_runner.h"
19 #include "base/threading/thread_task_runner_handle.h" 20 #include "base/threading/thread_task_runner_handle.h"
20 #include "base/time/clock.h" 21 #include "base/time/clock.h"
21 #include "base/timer/timer.h" 22 #include "base/timer/timer.h"
22 #include "google_apis/gcm/base/fake_encryptor.h" 23 #include "google_apis/gcm/base/fake_encryptor.h"
23 #include "google_apis/gcm/base/mcs_message.h" 24 #include "google_apis/gcm/base/mcs_message.h"
24 #include "google_apis/gcm/base/mcs_util.h" 25 #include "google_apis/gcm/base/mcs_util.h"
25 #include "google_apis/gcm/engine/fake_connection_factory.h" 26 #include "google_apis/gcm/engine/fake_connection_factory.h"
26 #include "google_apis/gcm/engine/fake_connection_handler.h" 27 #include "google_apis/gcm/engine/fake_connection_handler.h"
27 #include "google_apis/gcm/engine/gservices_settings.h" 28 #include "google_apis/gcm/engine/gservices_settings.h"
28 #include "google_apis/gcm/monitoring/gcm_stats_recorder.h" 29 #include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
29 #include "google_apis/gcm/protocol/android_checkin.pb.h" 30 #include "google_apis/gcm/protocol/android_checkin.pb.h"
30 #include "google_apis/gcm/protocol/checkin.pb.h" 31 #include "google_apis/gcm/protocol/checkin.pb.h"
31 #include "google_apis/gcm/protocol/mcs.pb.h" 32 #include "google_apis/gcm/protocol/mcs.pb.h"
33 #include "net/test/gtest_util.h"
34 #include "net/test/scoped_disable_exit_on_dfatal.h"
32 #include "net/url_request/test_url_fetcher_factory.h" 35 #include "net/url_request/test_url_fetcher_factory.h"
33 #include "net/url_request/url_fetcher_delegate.h" 36 #include "net/url_request/url_fetcher_delegate.h"
34 #include "net/url_request/url_request_test_util.h" 37 #include "net/url_request/url_request_test_util.h"
38 #include "testing/gtest/include/gtest/gtest-spi.h"
35 #include "testing/gtest/include/gtest/gtest.h" 39 #include "testing/gtest/include/gtest/gtest.h"
36 40
37 namespace gcm { 41 namespace gcm {
38 42
39 namespace { 43 namespace {
40 44
41 enum LastEvent { 45 enum LastEvent {
42 NONE, 46 NONE,
43 LOADING_COMPLETED, 47 LOADING_COMPLETED,
44 REGISTRATION_COMPLETED, 48 REGISTRATION_COMPLETED,
45 UNREGISTRATION_COMPLETED, 49 UNREGISTRATION_COMPLETED,
46 MESSAGE_SEND_ERROR, 50 MESSAGE_SEND_ERROR,
47 MESSAGE_SEND_ACK, 51 MESSAGE_SEND_ACK,
48 MESSAGE_RECEIVED, 52 MESSAGE_RECEIVED,
49 MESSAGES_DELETED, 53 MESSAGES_DELETED,
50 }; 54 };
51 55
52 const char kChromeVersion[] = "45.0.0.1"; 56 const char kChromeVersion[] = "45.0.0.1";
53 const uint64_t kDeviceAndroidId = 54321; 57 const uint64_t kDeviceAndroidId = 54321;
54 const uint64_t kDeviceSecurityToken = 12345; 58 const uint64_t kDeviceSecurityToken = 12345;
55 const uint64_t kDeviceAndroidId2 = 11111; 59 const uint64_t kDeviceAndroidId2 = 11111;
56 const uint64_t kDeviceSecurityToken2 = 2222; 60 const uint64_t kDeviceSecurityToken2 = 2222;
57 const int64_t kSettingsCheckinInterval = 16 * 60 * 60; 61 const int64_t kSettingsCheckinInterval = 16 * 60 * 60;
58 const char kAppId[] = "app_id"; 62 const char kProductCategoryForSubtypes[] = "com.chrome.macosx";
63 const char kExtensionAppId[] = "abcdefghijklmnopabcdefghijklmnop";
64 const char kSubtypeAppId[] = "app_id";
59 const char kSender[] = "project_id"; 65 const char kSender[] = "project_id";
60 const char kSender2[] = "project_id2"; 66 const char kSender2[] = "project_id2";
61 const char kSender3[] = "project_id3"; 67 const char kSender3[] = "project_id3";
62 const char kRegistrationResponsePrefix[] = "token="; 68 const char kRegistrationResponsePrefix[] = "token=";
63 const char kUnregistrationResponsePrefix[] = "deleted="; 69 const char kUnregistrationResponsePrefix[] = "deleted=";
64 const char kRawData[] = "example raw data"; 70 const char kRawData[] = "example raw data";
65 71
66 const char kInstanceID[] = "iid_1"; 72 const char kInstanceID[] = "iid_1";
67 const char kScope[] = "GCM"; 73 const char kScope[] = "GCM";
68 const char kDeleteTokenResponse[] = "token=foo"; 74 const char kDeleteTokenResponse[] = "token=foo";
69 75
70 // Helper for building arbitrary data messages. 76 // Helper for building arbitrary data messages.
71 MCSMessage BuildDownstreamMessage( 77 MCSMessage BuildDownstreamMessage(
72 const std::string& project_id, 78 const std::string& project_id,
73 const std::string& app_id, 79 const std::string& category,
80 const std::string& subtype,
74 const std::map<std::string, std::string>& data, 81 const std::map<std::string, std::string>& data,
75 const std::string& raw_data) { 82 const std::string& raw_data) {
76 mcs_proto::DataMessageStanza data_message; 83 mcs_proto::DataMessageStanza data_message;
77 data_message.set_from(project_id); 84 data_message.set_from(project_id);
78 data_message.set_category(app_id); 85 data_message.set_category(category);
79 for (std::map<std::string, std::string>::const_iterator iter = data.begin(); 86 for (std::map<std::string, std::string>::const_iterator iter = data.begin();
80 iter != data.end(); 87 iter != data.end();
81 ++iter) { 88 ++iter) {
82 mcs_proto::AppData* app_data = data_message.add_app_data(); 89 mcs_proto::AppData* app_data = data_message.add_app_data();
83 app_data->set_key(iter->first); 90 app_data->set_key(iter->first);
84 app_data->set_value(iter->second); 91 app_data->set_value(iter->second);
85 } 92 }
93 if (!subtype.empty()) {
94 mcs_proto::AppData* app_data = data_message.add_app_data();
95 app_data->set_key("subtype");
96 app_data->set_value(subtype);
97 }
86 data_message.set_raw_data(raw_data); 98 data_message.set_raw_data(raw_data);
87 return MCSMessage(kDataMessageStanzaTag, data_message); 99 return MCSMessage(kDataMessageStanzaTag, data_message);
88 } 100 }
89 101
90 GCMClient::AccountTokenInfo MakeAccountToken(const std::string& email, 102 GCMClient::AccountTokenInfo MakeAccountToken(const std::string& email,
91 const std::string& token) { 103 const std::string& token) {
92 GCMClient::AccountTokenInfo account_token; 104 GCMClient::AccountTokenInfo account_token;
93 account_token.email = email; 105 account_token.email = email;
94 account_token.access_token = token; 106 account_token.access_token = token;
95 return account_token; 107 return account_token;
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 registration->sender_ids = sender_ids; 536 registration->sender_ids = sender_ids;
525 gcm_client_->registrations_[registration] = registration_id; 537 gcm_client_->registrations_[registration] = registration_id;
526 } 538 }
527 539
528 void GCMClientImplTest::InitializeGCMClient() { 540 void GCMClientImplTest::InitializeGCMClient() {
529 clock()->Advance(base::TimeDelta::FromMilliseconds(1)); 541 clock()->Advance(base::TimeDelta::FromMilliseconds(1));
530 542
531 // Actual initialization. 543 // Actual initialization.
532 GCMClient::ChromeBuildInfo chrome_build_info; 544 GCMClient::ChromeBuildInfo chrome_build_info;
533 chrome_build_info.version = kChromeVersion; 545 chrome_build_info.version = kChromeVersion;
546 chrome_build_info.product_category_for_subtypes = kProductCategoryForSubtypes;
534 gcm_client_->Initialize(chrome_build_info, gcm_store_path(), task_runner_, 547 gcm_client_->Initialize(chrome_build_info, gcm_store_path(), task_runner_,
535 url_request_context_getter_, 548 url_request_context_getter_,
536 base::WrapUnique<Encryptor>(new FakeEncryptor), this); 549 base::WrapUnique<Encryptor>(new FakeEncryptor), this);
537 } 550 }
538 551
539 void GCMClientImplTest::StartGCMClient() { 552 void GCMClientImplTest::StartGCMClient() {
540 // Start loading and check-in. 553 // Start loading and check-in.
541 gcm_client_->Start(GCMClient::IMMEDIATE_START); 554 gcm_client_->Start(GCMClient::IMMEDIATE_START);
542 555
543 PumpLoopUntilIdle(); 556 PumpLoopUntilIdle();
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 // Fast forward the clock to trigger the store destroying logic. 698 // Fast forward the clock to trigger the store destroying logic.
686 task_runner()->FastForwardBy(base::TimeDelta::FromMilliseconds(300000)); 699 task_runner()->FastForwardBy(base::TimeDelta::FromMilliseconds(300000));
687 PumpLoopUntilIdle(); 700 PumpLoopUntilIdle();
688 701
689 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); 702 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state());
690 EXPECT_FALSE(device_checkin_info().android_id); 703 EXPECT_FALSE(device_checkin_info().android_id);
691 EXPECT_FALSE(device_checkin_info().secret); 704 EXPECT_FALSE(device_checkin_info().secret);
692 } 705 }
693 706
694 TEST_F(GCMClientImplTest, RegisterApp) { 707 TEST_F(GCMClientImplTest, RegisterApp) {
695 EXPECT_FALSE(ExistsRegistration(kAppId)); 708 EXPECT_FALSE(ExistsRegistration(kExtensionAppId));
696 709
697 std::vector<std::string> senders; 710 std::vector<std::string> senders;
698 senders.push_back("sender"); 711 senders.push_back("sender");
699 Register(kAppId, senders); 712 Register(kExtensionAppId, senders);
700 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id")); 713 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id"));
701 714
702 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); 715 EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
703 EXPECT_EQ(kAppId, last_app_id()); 716 EXPECT_EQ(kExtensionAppId, last_app_id());
704 EXPECT_EQ("reg_id", last_registration_id()); 717 EXPECT_EQ("reg_id", last_registration_id());
705 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 718 EXPECT_EQ(GCMClient::SUCCESS, last_result());
706 EXPECT_TRUE(ExistsRegistration(kAppId)); 719 EXPECT_TRUE(ExistsRegistration(kExtensionAppId));
707 } 720 }
708 721
709 TEST_F(GCMClientImplTest, DISABLED_RegisterAppFromCache) { 722 TEST_F(GCMClientImplTest, DISABLED_RegisterAppFromCache) {
710 EXPECT_FALSE(ExistsRegistration(kAppId)); 723 EXPECT_FALSE(ExistsRegistration(kExtensionAppId));
711 724
712 std::vector<std::string> senders; 725 std::vector<std::string> senders;
713 senders.push_back("sender"); 726 senders.push_back("sender");
714 Register(kAppId, senders); 727 Register(kExtensionAppId, senders);
715 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id")); 728 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id"));
716 EXPECT_TRUE(ExistsRegistration(kAppId)); 729 EXPECT_TRUE(ExistsRegistration(kExtensionAppId));
717 730
718 EXPECT_EQ(kAppId, last_app_id()); 731 EXPECT_EQ(kExtensionAppId, last_app_id());
719 EXPECT_EQ("reg_id", last_registration_id()); 732 EXPECT_EQ("reg_id", last_registration_id());
720 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 733 EXPECT_EQ(GCMClient::SUCCESS, last_result());
721 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); 734 EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
722 735
723 // Recreate GCMClient in order to load from the persistent store. 736 // Recreate GCMClient in order to load from the persistent store.
724 BuildGCMClient(base::TimeDelta()); 737 BuildGCMClient(base::TimeDelta());
725 InitializeGCMClient(); 738 InitializeGCMClient();
726 StartGCMClient(); 739 StartGCMClient();
727 740
728 EXPECT_TRUE(ExistsRegistration(kAppId)); 741 EXPECT_TRUE(ExistsRegistration(kExtensionAppId));
729 } 742 }
730 743
731 TEST_F(GCMClientImplTest, RegisterPreviousSenderAgain) { 744 TEST_F(GCMClientImplTest, RegisterPreviousSenderAgain) {
732 EXPECT_FALSE(ExistsRegistration(kAppId)); 745 EXPECT_FALSE(ExistsRegistration(kExtensionAppId));
733 746
734 // Register a sender. 747 // Register a sender.
735 std::vector<std::string> senders; 748 std::vector<std::string> senders;
736 senders.push_back("sender"); 749 senders.push_back("sender");
737 Register(kAppId, senders); 750 Register(kExtensionAppId, senders);
738 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id")); 751 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id"));
739 752
740 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); 753 EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
741 EXPECT_EQ(kAppId, last_app_id()); 754 EXPECT_EQ(kExtensionAppId, last_app_id());
742 EXPECT_EQ("reg_id", last_registration_id()); 755 EXPECT_EQ("reg_id", last_registration_id());
743 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 756 EXPECT_EQ(GCMClient::SUCCESS, last_result());
744 EXPECT_TRUE(ExistsRegistration(kAppId)); 757 EXPECT_TRUE(ExistsRegistration(kExtensionAppId));
745 758
746 reset_last_event(); 759 reset_last_event();
747 760
748 // Register a different sender. Different registration ID from previous one 761 // Register a different sender. Different registration ID from previous one
749 // should be returned. 762 // should be returned.
750 std::vector<std::string> senders2; 763 std::vector<std::string> senders2;
751 senders2.push_back("sender2"); 764 senders2.push_back("sender2");
752 Register(kAppId, senders2); 765 Register(kExtensionAppId, senders2);
753 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id2")); 766 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id2"));
754 767
755 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); 768 EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
756 EXPECT_EQ(kAppId, last_app_id()); 769 EXPECT_EQ(kExtensionAppId, last_app_id());
757 EXPECT_EQ("reg_id2", last_registration_id()); 770 EXPECT_EQ("reg_id2", last_registration_id());
758 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 771 EXPECT_EQ(GCMClient::SUCCESS, last_result());
759 EXPECT_TRUE(ExistsRegistration(kAppId)); 772 EXPECT_TRUE(ExistsRegistration(kExtensionAppId));
760 773
761 reset_last_event(); 774 reset_last_event();
762 775
763 // Register the 1st sender again. Different registration ID from previous one 776 // Register the 1st sender again. Different registration ID from previous one
764 // should be returned. 777 // should be returned.
765 std::vector<std::string> senders3; 778 std::vector<std::string> senders3;
766 senders3.push_back("sender"); 779 senders3.push_back("sender");
767 Register(kAppId, senders3); 780 Register(kExtensionAppId, senders3);
768 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id")); 781 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id"));
769 782
770 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); 783 EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
771 EXPECT_EQ(kAppId, last_app_id()); 784 EXPECT_EQ(kExtensionAppId, last_app_id());
772 EXPECT_EQ("reg_id", last_registration_id()); 785 EXPECT_EQ("reg_id", last_registration_id());
773 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 786 EXPECT_EQ(GCMClient::SUCCESS, last_result());
774 EXPECT_TRUE(ExistsRegistration(kAppId)); 787 EXPECT_TRUE(ExistsRegistration(kExtensionAppId));
775 } 788 }
776 789
777 TEST_F(GCMClientImplTest, UnregisterApp) { 790 TEST_F(GCMClientImplTest, UnregisterApp) {
778 EXPECT_FALSE(ExistsRegistration(kAppId)); 791 EXPECT_FALSE(ExistsRegistration(kExtensionAppId));
779 792
780 std::vector<std::string> senders; 793 std::vector<std::string> senders;
781 senders.push_back("sender"); 794 senders.push_back("sender");
782 Register(kAppId, senders); 795 Register(kExtensionAppId, senders);
783 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id")); 796 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id"));
784 EXPECT_TRUE(ExistsRegistration(kAppId)); 797 EXPECT_TRUE(ExistsRegistration(kExtensionAppId));
785 798
786 Unregister(kAppId); 799 Unregister(kExtensionAppId);
787 ASSERT_NO_FATAL_FAILURE(CompleteUnregistration(kAppId)); 800 ASSERT_NO_FATAL_FAILURE(CompleteUnregistration(kExtensionAppId));
788 801
789 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); 802 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event());
790 EXPECT_EQ(kAppId, last_app_id()); 803 EXPECT_EQ(kExtensionAppId, last_app_id());
791 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 804 EXPECT_EQ(GCMClient::SUCCESS, last_result());
792 EXPECT_FALSE(ExistsRegistration(kAppId)); 805 EXPECT_FALSE(ExistsRegistration(kExtensionAppId));
793 } 806 }
794 807
795 // Tests that stopping the GCMClient also deletes pending registration requests. 808 // Tests that stopping the GCMClient also deletes pending registration requests.
796 // This is tested by checking that url fetcher contained in the request was 809 // This is tested by checking that url fetcher contained in the request was
797 // deleted. 810 // deleted.
798 TEST_F(GCMClientImplTest, DeletePendingRequestsWhenStopping) { 811 TEST_F(GCMClientImplTest, DeletePendingRequestsWhenStopping) {
799 std::vector<std::string> senders; 812 std::vector<std::string> senders;
800 senders.push_back("sender"); 813 senders.push_back("sender");
801 Register(kAppId, senders); 814 Register(kExtensionAppId, senders);
802 815
803 gcm_client()->Stop(); 816 gcm_client()->Stop();
804 PumpLoopUntilIdle(); 817 PumpLoopUntilIdle();
805 VerifyPendingRequestFetcherDeleted(); 818 VerifyPendingRequestFetcherDeleted();
806 } 819 }
807 820
808 TEST_F(GCMClientImplTest, DispatchDownstreamMessage) { 821 TEST_F(GCMClientImplTest, DispatchDownstreamMessage) {
809 // Register to receive messages from kSender and kSender2 only. 822 // Register to receive messages from kSender and kSender2 only.
810 std::vector<std::string> senders; 823 std::vector<std::string> senders;
811 senders.push_back(kSender); 824 senders.push_back(kSender);
812 senders.push_back(kSender2); 825 senders.push_back(kSender2);
813 AddRegistration(kAppId, senders, "reg_id"); 826 AddRegistration(kExtensionAppId, senders, "reg_id");
814 827
815 std::map<std::string, std::string> expected_data; 828 std::map<std::string, std::string> expected_data;
816 expected_data["message_type"] = "gcm"; 829 expected_data["message_type"] = "gcm";
817 expected_data["key"] = "value"; 830 expected_data["key"] = "value";
818 expected_data["key2"] = "value2"; 831 expected_data["key2"] = "value2";
819 832
820 // Message for kSender will be received. 833 // Message for kSender will be received.
821 MCSMessage message(BuildDownstreamMessage(kSender, kAppId, expected_data, 834 MCSMessage message(BuildDownstreamMessage(
822 std::string() /* raw_data */)); 835 kSender, kExtensionAppId, std::string() /* subtype */, expected_data,
836 std::string() /* raw_data */));
823 EXPECT_TRUE(message.IsValid()); 837 EXPECT_TRUE(message.IsValid());
824 ReceiveMessageFromMCS(message); 838 ReceiveMessageFromMCS(message);
825 839
826 expected_data.erase(expected_data.find("message_type")); 840 expected_data.erase(expected_data.find("message_type"));
827 EXPECT_EQ(MESSAGE_RECEIVED, last_event()); 841 EXPECT_EQ(MESSAGE_RECEIVED, last_event());
828 EXPECT_EQ(kAppId, last_app_id()); 842 EXPECT_EQ(kExtensionAppId, last_app_id());
829 EXPECT_EQ(expected_data.size(), last_message().data.size()); 843 EXPECT_EQ(expected_data.size(), last_message().data.size());
830 EXPECT_EQ(expected_data, last_message().data); 844 EXPECT_EQ(expected_data, last_message().data);
831 EXPECT_EQ(kSender, last_message().sender_id); 845 EXPECT_EQ(kSender, last_message().sender_id);
832 846
833 reset_last_event(); 847 reset_last_event();
834 848
835 // Message for kSender2 will be received. 849 // Message for kSender2 will be received.
836 MCSMessage message2(BuildDownstreamMessage(kSender2, kAppId, expected_data, 850 MCSMessage message2(BuildDownstreamMessage(
837 std::string() /* raw_data */)); 851 kSender2, kExtensionAppId, std::string() /* subtype */, expected_data,
852 std::string() /* raw_data */));
838 EXPECT_TRUE(message2.IsValid()); 853 EXPECT_TRUE(message2.IsValid());
839 ReceiveMessageFromMCS(message2); 854 ReceiveMessageFromMCS(message2);
840 855
841 EXPECT_EQ(MESSAGE_RECEIVED, last_event()); 856 EXPECT_EQ(MESSAGE_RECEIVED, last_event());
842 EXPECT_EQ(kAppId, last_app_id()); 857 EXPECT_EQ(kExtensionAppId, last_app_id());
843 EXPECT_EQ(expected_data.size(), last_message().data.size()); 858 EXPECT_EQ(expected_data.size(), last_message().data.size());
844 EXPECT_EQ(expected_data, last_message().data); 859 EXPECT_EQ(expected_data, last_message().data);
845 EXPECT_EQ(kSender2, last_message().sender_id); 860 EXPECT_EQ(kSender2, last_message().sender_id);
846 861
847 reset_last_event(); 862 reset_last_event();
848 863
849 // Message from kSender3 will be dropped. 864 // Message from kSender3 will be dropped.
850 MCSMessage message3(BuildDownstreamMessage(kSender3, kAppId, expected_data, 865 MCSMessage message3(BuildDownstreamMessage(
851 std::string() /* raw_data */)); 866 kSender3, kExtensionAppId, std::string() /* subtype */, expected_data,
867 std::string() /* raw_data */));
852 EXPECT_TRUE(message3.IsValid()); 868 EXPECT_TRUE(message3.IsValid());
853 ReceiveMessageFromMCS(message3); 869 ReceiveMessageFromMCS(message3);
854 870
855 EXPECT_NE(MESSAGE_RECEIVED, last_event()); 871 EXPECT_NE(MESSAGE_RECEIVED, last_event());
856 EXPECT_NE(kAppId, last_app_id()); 872 EXPECT_NE(kExtensionAppId, last_app_id());
857 } 873 }
858 874
859 TEST_F(GCMClientImplTest, DispatchDownstreamMessageRawData) { 875 TEST_F(GCMClientImplTest, DispatchDownstreamMessageRawData) {
860 std::vector<std::string> senders(1, kSender); 876 std::vector<std::string> senders(1, kSender);
861 AddRegistration(kAppId, senders, "reg_id"); 877 AddRegistration(kExtensionAppId, senders, "reg_id");
862 878
863 std::map<std::string, std::string> expected_data; 879 std::map<std::string, std::string> expected_data;
864 880
865 MCSMessage message(BuildDownstreamMessage(kSender, kAppId, expected_data, 881 MCSMessage message(BuildDownstreamMessage(kSender, kExtensionAppId,
866 kRawData)); 882 std::string() /* subtype */,
883 expected_data, kRawData));
867 EXPECT_TRUE(message.IsValid()); 884 EXPECT_TRUE(message.IsValid());
868 ReceiveMessageFromMCS(message); 885 ReceiveMessageFromMCS(message);
869 886
870 EXPECT_EQ(MESSAGE_RECEIVED, last_event()); 887 EXPECT_EQ(MESSAGE_RECEIVED, last_event());
871 EXPECT_EQ(kAppId, last_app_id()); 888 EXPECT_EQ(kExtensionAppId, last_app_id());
872 EXPECT_EQ(expected_data.size(), last_message().data.size()); 889 EXPECT_EQ(expected_data.size(), last_message().data.size());
873 EXPECT_EQ(kSender, last_message().sender_id); 890 EXPECT_EQ(kSender, last_message().sender_id);
874 EXPECT_EQ(kRawData, last_message().raw_data); 891 EXPECT_EQ(kRawData, last_message().raw_data);
875 } 892 }
876 893
877 TEST_F(GCMClientImplTest, DispatchDownstreamMessageSendError) { 894 TEST_F(GCMClientImplTest, DispatchDownstreamMessageSendError) {
878 std::map<std::string, std::string> expected_data; 895 std::map<std::string, std::string> expected_data;
879 expected_data["message_type"] = "send_error"; 896 expected_data["message_type"] = "send_error";
880 expected_data["google.message_id"] = "007"; 897 expected_data["google.message_id"] = "007";
881 expected_data["error_details"] = "some details"; 898 expected_data["error_details"] = "some details";
882 MCSMessage message(BuildDownstreamMessage(kSender, kAppId, expected_data, 899 MCSMessage message(BuildDownstreamMessage(
883 std::string() /* raw_data */)); 900 kSender, kExtensionAppId, std::string() /* subtype */, expected_data,
901 std::string() /* raw_data */));
884 EXPECT_TRUE(message.IsValid()); 902 EXPECT_TRUE(message.IsValid());
885 ReceiveMessageFromMCS(message); 903 ReceiveMessageFromMCS(message);
886 904
887 EXPECT_EQ(MESSAGE_SEND_ERROR, last_event()); 905 EXPECT_EQ(MESSAGE_SEND_ERROR, last_event());
888 EXPECT_EQ(kAppId, last_app_id()); 906 EXPECT_EQ(kExtensionAppId, last_app_id());
889 EXPECT_EQ("007", last_error_details().message_id); 907 EXPECT_EQ("007", last_error_details().message_id);
890 EXPECT_EQ(1UL, last_error_details().additional_data.size()); 908 EXPECT_EQ(1UL, last_error_details().additional_data.size());
891 MessageData::const_iterator iter = 909 MessageData::const_iterator iter =
892 last_error_details().additional_data.find("error_details"); 910 last_error_details().additional_data.find("error_details");
893 EXPECT_TRUE(iter != last_error_details().additional_data.end()); 911 EXPECT_TRUE(iter != last_error_details().additional_data.end());
894 EXPECT_EQ("some details", iter->second); 912 EXPECT_EQ("some details", iter->second);
895 } 913 }
896 914
897 TEST_F(GCMClientImplTest, DispatchDownstreamMessgaesDeleted) { 915 TEST_F(GCMClientImplTest, DispatchDownstreamMessgaesDeleted) {
898 std::map<std::string, std::string> expected_data; 916 std::map<std::string, std::string> expected_data;
899 expected_data["message_type"] = "deleted_messages"; 917 expected_data["message_type"] = "deleted_messages";
900 MCSMessage message(BuildDownstreamMessage(kSender, kAppId, expected_data, 918 MCSMessage message(BuildDownstreamMessage(
901 std::string() /* raw_data */)); 919 kSender, kExtensionAppId, std::string() /* subtype */, expected_data,
920 std::string() /* raw_data */));
902 EXPECT_TRUE(message.IsValid()); 921 EXPECT_TRUE(message.IsValid());
903 ReceiveMessageFromMCS(message); 922 ReceiveMessageFromMCS(message);
904 923
905 EXPECT_EQ(MESSAGES_DELETED, last_event()); 924 EXPECT_EQ(MESSAGES_DELETED, last_event());
906 EXPECT_EQ(kAppId, last_app_id()); 925 EXPECT_EQ(kExtensionAppId, last_app_id());
907 } 926 }
908 927
909 TEST_F(GCMClientImplTest, SendMessage) { 928 TEST_F(GCMClientImplTest, SendMessage) {
910 OutgoingMessage message; 929 OutgoingMessage message;
911 message.id = "007"; 930 message.id = "007";
912 message.time_to_live = 500; 931 message.time_to_live = 500;
913 message.data["key"] = "value"; 932 message.data["key"] = "value";
914 gcm_client()->Send(kAppId, kSender, message); 933 gcm_client()->Send(kExtensionAppId, kSender, message);
915 934
916 EXPECT_EQ(kDataMessageStanzaTag, mcs_client()->last_message_tag()); 935 EXPECT_EQ(kDataMessageStanzaTag, mcs_client()->last_message_tag());
917 EXPECT_EQ(kAppId, mcs_client()->last_data_message_stanza().category()); 936 EXPECT_EQ(kExtensionAppId,
937 mcs_client()->last_data_message_stanza().category());
918 EXPECT_EQ(kSender, mcs_client()->last_data_message_stanza().to()); 938 EXPECT_EQ(kSender, mcs_client()->last_data_message_stanza().to());
919 EXPECT_EQ(500, mcs_client()->last_data_message_stanza().ttl()); 939 EXPECT_EQ(500, mcs_client()->last_data_message_stanza().ttl());
920 EXPECT_EQ(CurrentTime(), mcs_client()->last_data_message_stanza().sent()); 940 EXPECT_EQ(CurrentTime(), mcs_client()->last_data_message_stanza().sent());
921 EXPECT_EQ("007", mcs_client()->last_data_message_stanza().id()); 941 EXPECT_EQ("007", mcs_client()->last_data_message_stanza().id());
922 EXPECT_EQ("gcm@chrome.com", mcs_client()->last_data_message_stanza().from()); 942 EXPECT_EQ("gcm@chrome.com", mcs_client()->last_data_message_stanza().from());
923 EXPECT_EQ(kSender, mcs_client()->last_data_message_stanza().to()); 943 EXPECT_EQ(kSender, mcs_client()->last_data_message_stanza().to());
924 EXPECT_EQ("key", mcs_client()->last_data_message_stanza().app_data(0).key()); 944 EXPECT_EQ("key", mcs_client()->last_data_message_stanza().app_data(0).key());
925 EXPECT_EQ("value", 945 EXPECT_EQ("value",
926 mcs_client()->last_data_message_stanza().app_data(0).value()); 946 mcs_client()->last_data_message_stanza().app_data(0).value());
927 } 947 }
928 948
929 TEST_F(GCMClientImplTest, SendMessageAcknowledged) { 949 TEST_F(GCMClientImplTest, SendMessageAcknowledged) {
930 ReceiveOnMessageSentToMCS(kAppId, "007", MCSClient::SENT); 950 ReceiveOnMessageSentToMCS(kExtensionAppId, "007", MCSClient::SENT);
931 EXPECT_EQ(MESSAGE_SEND_ACK, last_event()); 951 EXPECT_EQ(MESSAGE_SEND_ACK, last_event());
932 EXPECT_EQ(kAppId, last_app_id()); 952 EXPECT_EQ(kExtensionAppId, last_app_id());
933 EXPECT_EQ("007", last_message_id()); 953 EXPECT_EQ("007", last_message_id());
934 } 954 }
935 955
936 class GCMClientImplCheckinTest : public GCMClientImplTest { 956 class GCMClientImplCheckinTest : public GCMClientImplTest {
937 public: 957 public:
938 GCMClientImplCheckinTest(); 958 GCMClientImplCheckinTest();
939 ~GCMClientImplCheckinTest() override; 959 ~GCMClientImplCheckinTest() override;
940 960
941 void SetUp() override; 961 void SetUp() override;
942 }; 962 };
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 // Start the GCM immediately and complete the checkin. 1340 // Start the GCM immediately and complete the checkin.
1321 gcm_client()->Start(GCMClient::IMMEDIATE_START); 1341 gcm_client()->Start(GCMClient::IMMEDIATE_START);
1322 PumpLoopUntilIdle(); 1342 PumpLoopUntilIdle();
1323 EXPECT_EQ(GCMClientImpl::INITIAL_DEVICE_CHECKIN, gcm_client_state()); 1343 EXPECT_EQ(GCMClientImpl::INITIAL_DEVICE_CHECKIN, gcm_client_state());
1324 ASSERT_NO_FATAL_FAILURE(DefaultCompleteCheckin()); 1344 ASSERT_NO_FATAL_FAILURE(DefaultCompleteCheckin());
1325 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); 1345 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state());
1326 1346
1327 // Registration. 1347 // Registration.
1328 std::vector<std::string> senders; 1348 std::vector<std::string> senders;
1329 senders.push_back("sender"); 1349 senders.push_back("sender");
1330 Register(kAppId, senders); 1350 Register(kExtensionAppId, senders);
1331 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id")); 1351 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("reg_id"));
1332 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state()); 1352 EXPECT_EQ(GCMClientImpl::READY, gcm_client_state());
1333 1353
1334 // Stop the GCM. 1354 // Stop the GCM.
1335 gcm_client()->Stop(); 1355 gcm_client()->Stop();
1336 PumpLoopUntilIdle(); 1356 PumpLoopUntilIdle();
1337 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state()); 1357 EXPECT_EQ(GCMClientImpl::INITIALIZED, gcm_client_state());
1338 1358
1339 // Delay start the GCM. GCM is indeed started without delay because the 1359 // Delay start the GCM. GCM is indeed started without delay because the
1340 // registration record has been found. 1360 // registration record has been found.
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 std::unique_ptr<InstanceIDTokenInfo> instance_id_info( 1479 std::unique_ptr<InstanceIDTokenInfo> instance_id_info(
1460 new InstanceIDTokenInfo); 1480 new InstanceIDTokenInfo);
1461 instance_id_info->app_id = app_id; 1481 instance_id_info->app_id = app_id;
1462 instance_id_info->authorized_entity = authorized_entity; 1482 instance_id_info->authorized_entity = authorized_entity;
1463 instance_id_info->scope = scope; 1483 instance_id_info->scope = scope;
1464 return gcm_client()->registrations_.count( 1484 return gcm_client()->registrations_.count(
1465 make_linked_ptr<RegistrationInfo>(instance_id_info.release())) > 0; 1485 make_linked_ptr<RegistrationInfo>(instance_id_info.release())) > 0;
1466 } 1486 }
1467 1487
1468 TEST_F(GCMClientInstanceIDTest, GetToken) { 1488 TEST_F(GCMClientInstanceIDTest, GetToken) {
1469 AddInstanceID(kAppId, kInstanceID); 1489 AddInstanceID(kExtensionAppId, kInstanceID);
1470 1490
1471 // Get a token. 1491 // Get a token.
1472 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); 1492 EXPECT_FALSE(ExistsToken(kExtensionAppId, kSender, kScope));
1473 GetToken(kAppId, kSender, kScope); 1493 GetToken(kExtensionAppId, kSender, kScope);
1474 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1")); 1494 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1"));
1475 1495
1476 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); 1496 EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
1477 EXPECT_EQ(kAppId, last_app_id()); 1497 EXPECT_EQ(kExtensionAppId, last_app_id());
1478 EXPECT_EQ("token1", last_registration_id()); 1498 EXPECT_EQ("token1", last_registration_id());
1479 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 1499 EXPECT_EQ(GCMClient::SUCCESS, last_result());
1480 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); 1500 EXPECT_TRUE(ExistsToken(kExtensionAppId, kSender, kScope));
1481 1501
1482 // Get another token. 1502 // Get another token.
1483 EXPECT_FALSE(ExistsToken(kAppId, kSender2, kScope)); 1503 EXPECT_FALSE(ExistsToken(kExtensionAppId, kSender2, kScope));
1484 GetToken(kAppId, kSender2, kScope); 1504 GetToken(kExtensionAppId, kSender2, kScope);
1485 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token2")); 1505 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token2"));
1486 1506
1487 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); 1507 EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
1488 EXPECT_EQ(kAppId, last_app_id()); 1508 EXPECT_EQ(kExtensionAppId, last_app_id());
1489 EXPECT_EQ("token2", last_registration_id()); 1509 EXPECT_EQ("token2", last_registration_id());
1490 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 1510 EXPECT_EQ(GCMClient::SUCCESS, last_result());
1491 EXPECT_TRUE(ExistsToken(kAppId, kSender2, kScope)); 1511 EXPECT_TRUE(ExistsToken(kExtensionAppId, kSender2, kScope));
1492 // The 1st token still exists. 1512 // The 1st token still exists.
1493 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); 1513 EXPECT_TRUE(ExistsToken(kExtensionAppId, kSender, kScope));
1514 }
1515
1516 // Most tests in this file use kExtensionAppId which is special-cased by
1517 // InstanceIDUsesSubtypeForAppId in gcm_client_impl.cc. This test uses
1518 // kSubtypeAppId to cover the alternate case.
1519 TEST_F(GCMClientInstanceIDTest, GetTokenWithSubtype) {
1520 ASSERT_EQ(GCMClientImpl::READY, gcm_client_state());
1521
1522 AddInstanceID(kSubtypeAppId, kInstanceID);
1523
1524 EXPECT_FALSE(ExistsToken(kSubtypeAppId, kSender, kScope));
1525
1526 // Get a token.
1527 GetToken(kSubtypeAppId, kSender, kScope);
1528 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1"));
1529 EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
1530 EXPECT_EQ(kSubtypeAppId, last_app_id());
1531 EXPECT_EQ("token1", last_registration_id());
1532 EXPECT_EQ(GCMClient::SUCCESS, last_result());
1533 EXPECT_TRUE(ExistsToken(kSubtypeAppId, kSender, kScope));
1534
1535 // Delete the token.
1536 DeleteToken(kSubtypeAppId, kSender, kScope);
1537 ASSERT_NO_FATAL_FAILURE(CompleteDeleteToken());
1538 EXPECT_FALSE(ExistsToken(kSubtypeAppId, kSender, kScope));
1494 } 1539 }
1495 1540
1496 TEST_F(GCMClientInstanceIDTest, DeleteInvalidToken) { 1541 TEST_F(GCMClientInstanceIDTest, DeleteInvalidToken) {
1497 AddInstanceID(kAppId, kInstanceID); 1542 AddInstanceID(kExtensionAppId, kInstanceID);
1498 1543
1499 // Delete an invalid token. 1544 // Delete an invalid token.
1500 DeleteToken(kAppId, "Foo@#$", kScope); 1545 DeleteToken(kExtensionAppId, "Foo@#$", kScope);
1501 PumpLoopUntilIdle(); 1546 PumpLoopUntilIdle();
1502 1547
1503 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); 1548 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event());
1504 EXPECT_EQ(kAppId, last_app_id()); 1549 EXPECT_EQ(kExtensionAppId, last_app_id());
1505 EXPECT_EQ(GCMClient::INVALID_PARAMETER, last_result()); 1550 EXPECT_EQ(GCMClient::INVALID_PARAMETER, last_result());
1506 1551
1507 reset_last_event(); 1552 reset_last_event();
1508 1553
1509 // Delete a non-existing token. 1554 // Delete a non-existing token.
1510 DeleteToken(kAppId, kSender, kScope); 1555 DeleteToken(kExtensionAppId, kSender, kScope);
1511 PumpLoopUntilIdle(); 1556 PumpLoopUntilIdle();
1512 1557
1513 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); 1558 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event());
1514 EXPECT_EQ(kAppId, last_app_id()); 1559 EXPECT_EQ(kExtensionAppId, last_app_id());
1515 EXPECT_EQ(GCMClient::INVALID_PARAMETER, last_result()); 1560 EXPECT_EQ(GCMClient::INVALID_PARAMETER, last_result());
1516 } 1561 }
1517 1562
1518 TEST_F(GCMClientInstanceIDTest, DeleteSingleToken) { 1563 TEST_F(GCMClientInstanceIDTest, DeleteSingleToken) {
1519 AddInstanceID(kAppId, kInstanceID); 1564 AddInstanceID(kExtensionAppId, kInstanceID);
1520 1565
1521 // Get a token. 1566 // Get a token.
1522 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); 1567 EXPECT_FALSE(ExistsToken(kExtensionAppId, kSender, kScope));
1523 GetToken(kAppId, kSender, kScope); 1568 GetToken(kExtensionAppId, kSender, kScope);
1524 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1")); 1569 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1"));
1525 1570
1526 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); 1571 EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
1527 EXPECT_EQ(kAppId, last_app_id()); 1572 EXPECT_EQ(kExtensionAppId, last_app_id());
1528 EXPECT_EQ("token1", last_registration_id()); 1573 EXPECT_EQ("token1", last_registration_id());
1529 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 1574 EXPECT_EQ(GCMClient::SUCCESS, last_result());
1530 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); 1575 EXPECT_TRUE(ExistsToken(kExtensionAppId, kSender, kScope));
1531 1576
1532 reset_last_event(); 1577 reset_last_event();
1533 1578
1534 // Get another token. 1579 // Get another token.
1535 EXPECT_FALSE(ExistsToken(kAppId, kSender2, kScope)); 1580 EXPECT_FALSE(ExistsToken(kExtensionAppId, kSender2, kScope));
1536 GetToken(kAppId, kSender2, kScope); 1581 GetToken(kExtensionAppId, kSender2, kScope);
1537 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token2")); 1582 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token2"));
1538 1583
1539 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); 1584 EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
1540 EXPECT_EQ(kAppId, last_app_id()); 1585 EXPECT_EQ(kExtensionAppId, last_app_id());
1541 EXPECT_EQ("token2", last_registration_id()); 1586 EXPECT_EQ("token2", last_registration_id());
1542 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 1587 EXPECT_EQ(GCMClient::SUCCESS, last_result());
1543 EXPECT_TRUE(ExistsToken(kAppId, kSender2, kScope)); 1588 EXPECT_TRUE(ExistsToken(kExtensionAppId, kSender2, kScope));
1544 // The 1st token still exists. 1589 // The 1st token still exists.
1545 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); 1590 EXPECT_TRUE(ExistsToken(kExtensionAppId, kSender, kScope));
1546 1591
1547 reset_last_event(); 1592 reset_last_event();
1548 1593
1549 // Delete the 2nd token. 1594 // Delete the 2nd token.
1550 DeleteToken(kAppId, kSender2, kScope); 1595 DeleteToken(kExtensionAppId, kSender2, kScope);
1551 ASSERT_NO_FATAL_FAILURE(CompleteDeleteToken()); 1596 ASSERT_NO_FATAL_FAILURE(CompleteDeleteToken());
1552 1597
1553 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); 1598 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event());
1554 EXPECT_EQ(kAppId, last_app_id()); 1599 EXPECT_EQ(kExtensionAppId, last_app_id());
1555 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 1600 EXPECT_EQ(GCMClient::SUCCESS, last_result());
1556 // The 2nd token is gone while the 1st token still exists. 1601 // The 2nd token is gone while the 1st token still exists.
1557 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); 1602 EXPECT_TRUE(ExistsToken(kExtensionAppId, kSender, kScope));
1558 EXPECT_FALSE(ExistsToken(kAppId, kSender2, kScope)); 1603 EXPECT_FALSE(ExistsToken(kExtensionAppId, kSender2, kScope));
1559 1604
1560 reset_last_event(); 1605 reset_last_event();
1561 1606
1562 // Delete the 1st token. 1607 // Delete the 1st token.
1563 DeleteToken(kAppId, kSender, kScope); 1608 DeleteToken(kExtensionAppId, kSender, kScope);
1564 ASSERT_NO_FATAL_FAILURE(CompleteDeleteToken()); 1609 ASSERT_NO_FATAL_FAILURE(CompleteDeleteToken());
1565 1610
1566 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); 1611 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event());
1567 EXPECT_EQ(kAppId, last_app_id()); 1612 EXPECT_EQ(kExtensionAppId, last_app_id());
1568 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 1613 EXPECT_EQ(GCMClient::SUCCESS, last_result());
1569 // Both tokens are gone now. 1614 // Both tokens are gone now.
1570 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); 1615 EXPECT_FALSE(ExistsToken(kExtensionAppId, kSender, kScope));
1571 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); 1616 EXPECT_FALSE(ExistsToken(kExtensionAppId, kSender, kScope));
1572 1617
1573 reset_last_event(); 1618 reset_last_event();
1574 1619
1575 // Trying to delete the token again will get an error. 1620 // Trying to delete the token again will get an error.
1576 DeleteToken(kAppId, kSender, kScope); 1621 DeleteToken(kExtensionAppId, kSender, kScope);
1577 PumpLoopUntilIdle(); 1622 PumpLoopUntilIdle();
1578 1623
1579 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); 1624 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event());
1580 EXPECT_EQ(kAppId, last_app_id()); 1625 EXPECT_EQ(kExtensionAppId, last_app_id());
1581 EXPECT_EQ(GCMClient::INVALID_PARAMETER, last_result()); 1626 EXPECT_EQ(GCMClient::INVALID_PARAMETER, last_result());
1582 } 1627 }
1583 1628
1584 TEST_F(GCMClientInstanceIDTest, DeleteAllTokens) { 1629 TEST_F(GCMClientInstanceIDTest, DeleteAllTokens) {
1585 AddInstanceID(kAppId, kInstanceID); 1630 AddInstanceID(kExtensionAppId, kInstanceID);
1586 1631
1587 // Get a token. 1632 // Get a token.
1588 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); 1633 EXPECT_FALSE(ExistsToken(kExtensionAppId, kSender, kScope));
1589 GetToken(kAppId, kSender, kScope); 1634 GetToken(kExtensionAppId, kSender, kScope);
1590 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1")); 1635 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1"));
1591 1636
1592 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); 1637 EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
1593 EXPECT_EQ(kAppId, last_app_id()); 1638 EXPECT_EQ(kExtensionAppId, last_app_id());
1594 EXPECT_EQ("token1", last_registration_id()); 1639 EXPECT_EQ("token1", last_registration_id());
1595 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 1640 EXPECT_EQ(GCMClient::SUCCESS, last_result());
1596 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); 1641 EXPECT_TRUE(ExistsToken(kExtensionAppId, kSender, kScope));
1597 1642
1598 reset_last_event(); 1643 reset_last_event();
1599 1644
1600 // Get another token. 1645 // Get another token.
1601 EXPECT_FALSE(ExistsToken(kAppId, kSender2, kScope)); 1646 EXPECT_FALSE(ExistsToken(kExtensionAppId, kSender2, kScope));
1602 GetToken(kAppId, kSender2, kScope); 1647 GetToken(kExtensionAppId, kSender2, kScope);
1603 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token2")); 1648 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token2"));
1604 1649
1605 EXPECT_EQ(REGISTRATION_COMPLETED, last_event()); 1650 EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
1606 EXPECT_EQ(kAppId, last_app_id()); 1651 EXPECT_EQ(kExtensionAppId, last_app_id());
1607 EXPECT_EQ("token2", last_registration_id()); 1652 EXPECT_EQ("token2", last_registration_id());
1608 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 1653 EXPECT_EQ(GCMClient::SUCCESS, last_result());
1609 EXPECT_TRUE(ExistsToken(kAppId, kSender2, kScope)); 1654 EXPECT_TRUE(ExistsToken(kExtensionAppId, kSender2, kScope));
1610 // The 1st token still exists. 1655 // The 1st token still exists.
1611 EXPECT_TRUE(ExistsToken(kAppId, kSender, kScope)); 1656 EXPECT_TRUE(ExistsToken(kExtensionAppId, kSender, kScope));
1612 1657
1613 reset_last_event(); 1658 reset_last_event();
1614 1659
1615 // Delete all tokens. 1660 // Delete all tokens.
1616 DeleteToken(kAppId, "*", "*"); 1661 DeleteToken(kExtensionAppId, "*", "*");
1617 ASSERT_NO_FATAL_FAILURE(CompleteDeleteToken()); 1662 ASSERT_NO_FATAL_FAILURE(CompleteDeleteToken());
1618 1663
1619 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); 1664 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event());
1620 EXPECT_EQ(kAppId, last_app_id()); 1665 EXPECT_EQ(kExtensionAppId, last_app_id());
1621 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 1666 EXPECT_EQ(GCMClient::SUCCESS, last_result());
1622 // All tokens are gone now. 1667 // All tokens are gone now.
1623 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); 1668 EXPECT_FALSE(ExistsToken(kExtensionAppId, kSender, kScope));
1624 EXPECT_FALSE(ExistsToken(kAppId, kSender, kScope)); 1669 EXPECT_FALSE(ExistsToken(kExtensionAppId, kSender, kScope));
1625 } 1670 }
1626 1671
1627 TEST_F(GCMClientInstanceIDTest, DeleteAllTokensBeforeGetAnyToken) { 1672 TEST_F(GCMClientInstanceIDTest, DeleteAllTokensBeforeGetAnyToken) {
1628 AddInstanceID(kAppId, kInstanceID); 1673 AddInstanceID(kExtensionAppId, kInstanceID);
1629 1674
1630 // Delete all tokens without getting a token first. 1675 // Delete all tokens without getting a token first.
1631 DeleteToken(kAppId, "*", "*"); 1676 DeleteToken(kExtensionAppId, "*", "*");
1632 // No need to call CompleteDeleteToken since unregistration request should 1677 // No need to call CompleteDeleteToken since unregistration request should
1633 // not be triggered. 1678 // not be triggered.
1634 PumpLoopUntilIdle(); 1679 PumpLoopUntilIdle();
1635 1680
1636 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event()); 1681 EXPECT_EQ(UNREGISTRATION_COMPLETED, last_event());
1637 EXPECT_EQ(kAppId, last_app_id()); 1682 EXPECT_EQ(kExtensionAppId, last_app_id());
1638 EXPECT_EQ(GCMClient::SUCCESS, last_result()); 1683 EXPECT_EQ(GCMClient::SUCCESS, last_result());
1684 }
1685
1686 TEST_F(GCMClientInstanceIDTest, DispatchDownstreamMessageWithoutSubtype) {
1687 AddInstanceID(kExtensionAppId, kInstanceID);
1688 GetToken(kExtensionAppId, kSender, kScope);
1689 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1"));
1690 GetToken(kExtensionAppId, kSender2, kScope);
1691 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token2"));
1692
1693 std::map<std::string, std::string> expected_data;
1694
1695 // Message for kSender with a subtype will be dropped.
1696 MCSMessage message0(BuildDownstreamMessage(
1697 kSender, kProductCategoryForSubtypes, kExtensionAppId /* subtype */,
1698 expected_data, std::string() /* raw_data */));
1699 EXPECT_TRUE(message0.IsValid());
1700 ReceiveMessageFromMCS(message0);
1701
1702 EXPECT_NE(MESSAGE_RECEIVED, last_event());
1703
1704 reset_last_event();
1705
1706 // Message for kSender will be received.
1707 MCSMessage message1(BuildDownstreamMessage(
1708 kSender, kExtensionAppId, std::string() /* subtype */, expected_data,
1709 std::string() /* raw_data */));
1710 EXPECT_TRUE(message1.IsValid());
1711 ReceiveMessageFromMCS(message1);
1712
1713 EXPECT_EQ(MESSAGE_RECEIVED, last_event());
1714 EXPECT_EQ(kExtensionAppId, last_app_id());
1715 EXPECT_EQ(expected_data.size(), last_message().data.size());
1716 EXPECT_EQ(expected_data, last_message().data);
1717 EXPECT_EQ(kSender, last_message().sender_id);
1718
1719 reset_last_event();
1720
1721 // Message for kSender2 will be received.
1722 MCSMessage message2(BuildDownstreamMessage(
1723 kSender2, kExtensionAppId, std::string() /* subtype */, expected_data,
1724 std::string() /* raw_data */));
1725 EXPECT_TRUE(message2.IsValid());
1726 ReceiveMessageFromMCS(message2);
1727
1728 EXPECT_EQ(MESSAGE_RECEIVED, last_event());
1729 EXPECT_EQ(kExtensionAppId, last_app_id());
1730 EXPECT_EQ(expected_data.size(), last_message().data.size());
1731 EXPECT_EQ(expected_data, last_message().data);
1732 EXPECT_EQ(kSender2, last_message().sender_id);
1733
1734 reset_last_event();
1735
1736 // Message from kSender3 will be dropped.
1737 MCSMessage message3(BuildDownstreamMessage(
1738 kSender3, kExtensionAppId, std::string() /* subtype */, expected_data,
1739 std::string() /* raw_data */));
1740 EXPECT_TRUE(message3.IsValid());
1741 ReceiveMessageFromMCS(message3);
1742
1743 EXPECT_NE(MESSAGE_RECEIVED, last_event());
1744 EXPECT_NE(kExtensionAppId, last_app_id());
1745 }
1746
1747 TEST_F(GCMClientInstanceIDTest, DispatchDownstreamMessageWithSubtype) {
1748 AddInstanceID(kSubtypeAppId, kInstanceID);
1749 GetToken(kSubtypeAppId, kSender, kScope);
1750 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1"));
1751 GetToken(kSubtypeAppId, kSender2, kScope);
1752 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token2"));
1753
1754 std::map<std::string, std::string> expected_data;
1755
1756 // Message for kSender without a subtype will be dropped.
1757 MCSMessage message0(BuildDownstreamMessage(
1758 kSender, kSubtypeAppId, std::string() /* subtype */, expected_data,
1759 std::string() /* raw_data */));
1760 EXPECT_TRUE(message0.IsValid());
1761 ReceiveMessageFromMCS(message0);
1762
1763 EXPECT_NE(MESSAGE_RECEIVED, last_event());
1764
1765 reset_last_event();
1766
1767 // Message for kSender will be received.
1768 MCSMessage message1(BuildDownstreamMessage(
1769 kSender, kProductCategoryForSubtypes, kSubtypeAppId /* subtype */,
1770 expected_data, std::string() /* raw_data */));
1771 EXPECT_TRUE(message1.IsValid());
1772 ReceiveMessageFromMCS(message1);
1773
1774 EXPECT_EQ(MESSAGE_RECEIVED, last_event());
1775 EXPECT_EQ(kSubtypeAppId, last_app_id());
1776 EXPECT_EQ(expected_data.size(), last_message().data.size());
1777 EXPECT_EQ(expected_data, last_message().data);
1778 EXPECT_EQ(kSender, last_message().sender_id);
1779
1780 reset_last_event();
1781
1782 // Message for kSender2 will be received.
1783 MCSMessage message2(BuildDownstreamMessage(
1784 kSender2, kProductCategoryForSubtypes, kSubtypeAppId /* subtype */,
1785 expected_data, std::string() /* raw_data */));
1786 EXPECT_TRUE(message2.IsValid());
1787 ReceiveMessageFromMCS(message2);
1788
1789 EXPECT_EQ(MESSAGE_RECEIVED, last_event());
1790 EXPECT_EQ(kSubtypeAppId, last_app_id());
1791 EXPECT_EQ(expected_data.size(), last_message().data.size());
1792 EXPECT_EQ(expected_data, last_message().data);
1793 EXPECT_EQ(kSender2, last_message().sender_id);
1794
1795 reset_last_event();
1796
1797 // Message from kSender3 will be dropped.
1798 MCSMessage message3(BuildDownstreamMessage(
1799 kSender3, kProductCategoryForSubtypes, kSubtypeAppId /* subtype */,
1800 expected_data, std::string() /* raw_data */));
1801 EXPECT_TRUE(message3.IsValid());
1802 ReceiveMessageFromMCS(message3);
1803
1804 EXPECT_NE(MESSAGE_RECEIVED, last_event());
1805 EXPECT_NE(kSubtypeAppId, last_app_id());
1806 }
1807
1808 TEST_F(GCMClientInstanceIDTest, DispatchDownstreamMessageWithFakeSubtype) {
1809 // Victim non-extension registration.
1810 AddInstanceID(kSubtypeAppId, "iid_1");
1811 GetToken(kSubtypeAppId, kSender, kScope);
1812 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token1"));
1813
1814 // Malicious extension registration.
1815 AddInstanceID(kExtensionAppId, "iid_2");
1816 GetToken(kExtensionAppId, kSender, kScope);
1817 ASSERT_NO_FATAL_FAILURE(CompleteRegistration("token2"));
1818
1819 std::map<std::string, std::string> expected_data;
1820
1821 // Message for kExtensionAppId should be delivered to the extension rather
1822 // than the victim app, despite the malicious subtype property attempting to
1823 // impersonate victim app.
1824 MCSMessage message(BuildDownstreamMessage(
1825 kSender, kExtensionAppId /* category */, kSubtypeAppId /* subtype */,
1826 expected_data, std::string() /* raw_data */));
1827 EXPECT_TRUE(message.IsValid());
1828 ReceiveMessageFromMCS(message);
1829
1830 EXPECT_EQ(MESSAGE_RECEIVED, last_event());
1831 EXPECT_EQ(kExtensionAppId, last_app_id());
1832 EXPECT_EQ(expected_data.size(), last_message().data.size());
1833 EXPECT_EQ(expected_data, last_message().data);
1834 EXPECT_EQ(kSender, last_message().sender_id);
1639 } 1835 }
1640 1836
1641 } // namespace gcm 1837 } // namespace gcm
OLDNEW
« no previous file with comments | « components/gcm_driver/gcm_client_impl.cc ('k') | components/gcm_driver/gcm_desktop_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698