OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/run_loop.h" | 5 #include "base/run_loop.h" |
6 #include "chrome/browser/extensions/api/gcm/gcm_api.h" | 6 #include "chrome/browser/extensions/api/gcm/gcm_api.h" |
7 #include "chrome/browser/extensions/extension_apitest.h" | 7 #include "chrome/browser/extensions/extension_apitest.h" |
8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
9 #include "chrome/browser/services/gcm/fake_gcm_profile_service.h" | 9 #include "chrome/browser/services/gcm/fake_gcm_profile_service.h" |
10 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h" | 10 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h" |
11 #include "chrome/common/extensions/features/feature_channel.h" | 11 #include "chrome/common/extensions/features/feature_channel.h" |
12 #include "chrome/test/base/ui_test_utils.h" | 12 #include "chrome/test/base/ui_test_utils.h" |
13 | 13 |
14 namespace { | 14 namespace { |
15 | 15 |
16 const char kEventsExtension[] = "gcm/events"; | 16 const char kEventsExtension[] = "gcm/events"; |
17 | 17 |
18 } // namespace | 18 } // namespace |
19 | 19 |
20 namespace extensions { | 20 namespace extensions { |
21 | 21 |
22 class GcmApiTest : public ExtensionApiTest { | 22 class GcmApiTest : public ExtensionApiTest { |
23 public: | 23 public: |
24 GcmApiTest() : fake_gcm_profile_service_(NULL) {} | 24 GcmApiTest() : fake_gcm_profile_service_(NULL) {} |
25 | 25 |
26 protected: | 26 protected: |
27 virtual void SetUp() OVERRIDE; | |
28 virtual void SetUpOnMainThread() OVERRIDE; | 27 virtual void SetUpOnMainThread() OVERRIDE; |
29 | 28 |
30 void StartCollecting(); | 29 void StartCollecting(); |
31 | 30 |
32 const Extension* LoadTestExtension(const std::string& extension_path, | 31 const Extension* LoadTestExtension(const std::string& extension_path, |
33 const std::string& page_name); | 32 const std::string& page_name); |
34 | 33 |
35 gcm::FakeGCMProfileService* service() const; | 34 gcm::FakeGCMProfileService* service() const; |
| 35 bool ShouldSkipTest() const; |
36 | 36 |
37 private: | 37 private: |
38 gcm::FakeGCMProfileService* fake_gcm_profile_service_; | 38 gcm::FakeGCMProfileService* fake_gcm_profile_service_; |
39 }; | 39 }; |
40 | 40 |
41 void GcmApiTest::SetUp() { | |
42 // TODO(jianli): Once the GCM API enters stable, remove |channel|. | |
43 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_UNKNOWN); | |
44 | |
45 ExtensionApiTest::SetUp(); | |
46 } | |
47 | |
48 void GcmApiTest::SetUpOnMainThread() { | 41 void GcmApiTest::SetUpOnMainThread() { |
49 gcm::GCMProfileServiceFactory::GetInstance()->SetTestingFactory( | 42 gcm::GCMProfileServiceFactory::GetInstance()->SetTestingFactory( |
50 browser()->profile(), &gcm::FakeGCMProfileService::Build); | 43 browser()->profile(), &gcm::FakeGCMProfileService::Build); |
51 fake_gcm_profile_service_ = static_cast<gcm::FakeGCMProfileService*>( | 44 fake_gcm_profile_service_ = static_cast<gcm::FakeGCMProfileService*>( |
52 gcm::GCMProfileServiceFactory::GetInstance()->GetForProfile( | 45 gcm::GCMProfileServiceFactory::GetInstance()->GetForProfile( |
53 browser()->profile())); | 46 browser()->profile())); |
54 gcm::FakeGCMProfileService::EnableGCMForTesting(); | 47 gcm::FakeGCMProfileService::EnableGCMForTesting(); |
55 } | 48 } |
56 | 49 |
57 void GcmApiTest::StartCollecting() { | 50 void GcmApiTest::StartCollecting() { |
58 service()->set_collect(true); | 51 service()->set_collect(true); |
59 } | 52 } |
60 | 53 |
61 gcm::FakeGCMProfileService* GcmApiTest::service() const { | 54 gcm::FakeGCMProfileService* GcmApiTest::service() const { |
62 return fake_gcm_profile_service_; | 55 return fake_gcm_profile_service_; |
63 } | 56 } |
64 | 57 |
65 const Extension* GcmApiTest::LoadTestExtension( | 58 const Extension* GcmApiTest::LoadTestExtension( |
66 const std::string& extension_path, | 59 const std::string& extension_path, |
67 const std::string& page_name) { | 60 const std::string& page_name) { |
| 61 // TODO(jianli): Once the GCM API enters stable, remove |channel|. |
| 62 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_UNKNOWN); |
| 63 |
68 const Extension* extension = | 64 const Extension* extension = |
69 LoadExtension(test_data_dir_.AppendASCII(extension_path)); | 65 LoadExtension(test_data_dir_.AppendASCII(extension_path)); |
70 if (extension) { | 66 if (extension) { |
71 ui_test_utils::NavigateToURL( | 67 ui_test_utils::NavigateToURL( |
72 browser(), extension->GetResourceURL(page_name)); | 68 browser(), extension->GetResourceURL(page_name)); |
73 } | 69 } |
74 return extension; | 70 return extension; |
75 } | 71 } |
76 | 72 |
| 73 bool GcmApiTest::ShouldSkipTest() const { |
| 74 // TODO(jianli): Remove this once the GCM API enters stable. |
| 75 #if defined(OS_WIN) |
| 76 return chrome::VersionInfo::GetChannel() == |
| 77 chrome::VersionInfo::CHANNEL_STABLE; |
| 78 #else |
| 79 return false; |
| 80 #endif |
| 81 } |
| 82 |
77 IN_PROC_BROWSER_TEST_F(GcmApiTest, RegisterValidation) { | 83 IN_PROC_BROWSER_TEST_F(GcmApiTest, RegisterValidation) { |
| 84 if (ShouldSkipTest()) |
| 85 return; |
| 86 |
78 ASSERT_TRUE(RunExtensionTest("gcm/functions/register_validation")); | 87 ASSERT_TRUE(RunExtensionTest("gcm/functions/register_validation")); |
79 } | 88 } |
80 | 89 |
81 IN_PROC_BROWSER_TEST_F(GcmApiTest, Register) { | 90 IN_PROC_BROWSER_TEST_F(GcmApiTest, Register) { |
| 91 if (ShouldSkipTest()) |
| 92 return; |
| 93 |
82 StartCollecting(); | 94 StartCollecting(); |
83 ASSERT_TRUE(RunExtensionTest("gcm/functions/register")); | 95 ASSERT_TRUE(RunExtensionTest("gcm/functions/register")); |
84 | 96 |
85 // SHA1 of the public key provided in manifest.json. | 97 // SHA1 of the public key provided in manifest.json. |
86 EXPECT_EQ("26469186F238EE08FA71C38311C6990F61D40DCA", | 98 EXPECT_EQ("26469186F238EE08FA71C38311C6990F61D40DCA", |
87 service()->last_registered_cert()); | 99 service()->last_registered_cert()); |
88 const std::vector<std::string>& sender_ids = | 100 const std::vector<std::string>& sender_ids = |
89 service()->last_registered_sender_ids(); | 101 service()->last_registered_sender_ids(); |
90 EXPECT_TRUE(std::find(sender_ids.begin(), sender_ids.end(), "Sender1") != | 102 EXPECT_TRUE(std::find(sender_ids.begin(), sender_ids.end(), "Sender1") != |
91 sender_ids.end()); | 103 sender_ids.end()); |
92 EXPECT_TRUE(std::find(sender_ids.begin(), sender_ids.end(), "Sender2") != | 104 EXPECT_TRUE(std::find(sender_ids.begin(), sender_ids.end(), "Sender2") != |
93 sender_ids.end()); | 105 sender_ids.end()); |
94 } | 106 } |
95 | 107 |
96 IN_PROC_BROWSER_TEST_F(GcmApiTest, SendValidation) { | 108 IN_PROC_BROWSER_TEST_F(GcmApiTest, SendValidation) { |
| 109 if (ShouldSkipTest()) |
| 110 return; |
| 111 |
97 ASSERT_TRUE(RunExtensionTest("gcm/functions/send")); | 112 ASSERT_TRUE(RunExtensionTest("gcm/functions/send")); |
98 } | 113 } |
99 | 114 |
100 IN_PROC_BROWSER_TEST_F(GcmApiTest, SendMessageData) { | 115 IN_PROC_BROWSER_TEST_F(GcmApiTest, SendMessageData) { |
| 116 if (ShouldSkipTest()) |
| 117 return; |
| 118 |
101 StartCollecting(); | 119 StartCollecting(); |
102 ASSERT_TRUE(RunExtensionTest("gcm/functions/send_message_data")); | 120 ASSERT_TRUE(RunExtensionTest("gcm/functions/send_message_data")); |
103 | 121 |
104 EXPECT_EQ("destination-id", service()->last_receiver_id()); | 122 EXPECT_EQ("destination-id", service()->last_receiver_id()); |
105 const gcm::GCMClient::OutgoingMessage& message = | 123 const gcm::GCMClient::OutgoingMessage& message = |
106 service()->last_sent_message(); | 124 service()->last_sent_message(); |
107 gcm::GCMClient::MessageData::const_iterator iter; | 125 gcm::GCMClient::MessageData::const_iterator iter; |
108 | 126 |
109 EXPECT_TRUE((iter = message.data.find("key1")) != message.data.end()); | 127 EXPECT_TRUE((iter = message.data.find("key1")) != message.data.end()); |
110 EXPECT_EQ("value1", iter->second); | 128 EXPECT_EQ("value1", iter->second); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 gcm::GCMClient::NETWORK_ERROR); | 179 gcm::GCMClient::NETWORK_ERROR); |
162 router.OnSendError(extension->id(), "error_message_4", | 180 router.OnSendError(extension->id(), "error_message_4", |
163 gcm::GCMClient::UNKNOWN_ERROR); | 181 gcm::GCMClient::UNKNOWN_ERROR); |
164 router.OnSendError(extension->id(), "error_message_5", | 182 router.OnSendError(extension->id(), "error_message_5", |
165 gcm::GCMClient::TTL_EXCEEDED); | 183 gcm::GCMClient::TTL_EXCEEDED); |
166 | 184 |
167 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); | 185 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
168 } | 186 } |
169 | 187 |
170 } // namespace extensions | 188 } // namespace extensions |
OLD | NEW |