| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "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.stable: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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |