Disable TabDragController tests that fail with a real compositor.
[chromium-blink-merge.git] / chrome / browser / extensions / api / gcm / gcm_apitest.cc
blob02877bd4a5bce0c35044eb726379a2e480329b3e
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
3 // found in the LICENSE file.
5 #include "base/run_loop.h"
6 #include "chrome/browser/extensions/api/gcm/gcm_api.h"
7 #include "chrome/browser/extensions/extension_apitest.h"
8 #include "chrome/browser/profiles/profile.h"
9 #include "chrome/browser/services/gcm/fake_gcm_profile_service.h"
10 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h"
11 #include "chrome/common/extensions/features/feature_channel.h"
12 #include "chrome/test/base/ui_test_utils.h"
14 namespace {
16 const char kEventsExtension[] = "gcm/events";
18 } // namespace
20 namespace extensions {
22 class GcmApiTest : public ExtensionApiTest {
23 public:
24 GcmApiTest() : fake_gcm_profile_service_(NULL) {}
26 protected:
27 virtual void SetUpOnMainThread() OVERRIDE;
29 void StartCollecting();
31 const Extension* LoadTestExtension(const std::string& extension_path,
32 const std::string& page_name);
33 gcm::FakeGCMProfileService* service() const;
34 bool ShouldSkipTest() const;
36 private:
37 gcm::FakeGCMProfileService* fake_gcm_profile_service_;
40 void GcmApiTest::SetUpOnMainThread() {
41 gcm::GCMProfileServiceFactory::GetInstance()->SetTestingFactory(
42 browser()->profile(), &gcm::FakeGCMProfileService::Build);
43 fake_gcm_profile_service_ = static_cast<gcm::FakeGCMProfileService*>(
44 gcm::GCMProfileServiceFactory::GetInstance()->GetForProfile(
45 browser()->profile()));
46 gcm::FakeGCMProfileService::EnableGCMForTesting();
49 void GcmApiTest::StartCollecting() {
50 service()->set_collect(true);
53 gcm::FakeGCMProfileService* GcmApiTest::service() const {
54 return fake_gcm_profile_service_;
57 const Extension* GcmApiTest::LoadTestExtension(
58 const std::string& extension_path,
59 const std::string& page_name) {
60 // TODO(jianli): Once the GCM API enters stable, remove |channel|.
61 ScopedCurrentChannel channel(chrome::VersionInfo::CHANNEL_UNKNOWN);
63 const Extension* extension =
64 LoadExtension(test_data_dir_.AppendASCII(extension_path));
65 if (extension) {
66 ui_test_utils::NavigateToURL(
67 browser(), extension->GetResourceURL(page_name));
69 return extension;
72 bool GcmApiTest::ShouldSkipTest() const {
73 // TODO(jianli): Remove this once the GCM API enters stable.
74 return chrome::VersionInfo::GetChannel() ==
75 chrome::VersionInfo::CHANNEL_STABLE;
78 IN_PROC_BROWSER_TEST_F(GcmApiTest, RegisterValidation) {
79 if (ShouldSkipTest())
80 return;
82 ASSERT_TRUE(RunExtensionTest("gcm/functions/register_validation"));
85 IN_PROC_BROWSER_TEST_F(GcmApiTest, Register) {
86 if (ShouldSkipTest())
87 return;
89 StartCollecting();
90 ASSERT_TRUE(RunExtensionTest("gcm/functions/register"));
92 // SHA1 of the public key provided in manifest.json.
93 EXPECT_EQ("26469186F238EE08FA71C38311C6990F61D40DCA",
94 service()->last_registered_cert());
95 const std::vector<std::string>& sender_ids =
96 service()->last_registered_sender_ids();
97 EXPECT_TRUE(std::find(sender_ids.begin(), sender_ids.end(), "Sender1") !=
98 sender_ids.end());
99 EXPECT_TRUE(std::find(sender_ids.begin(), sender_ids.end(), "Sender2") !=
100 sender_ids.end());
103 IN_PROC_BROWSER_TEST_F(GcmApiTest, SendValidation) {
104 if (ShouldSkipTest())
105 return;
107 ASSERT_TRUE(RunExtensionTest("gcm/functions/send"));
110 IN_PROC_BROWSER_TEST_F(GcmApiTest, SendMessageData) {
111 if (ShouldSkipTest())
112 return;
114 StartCollecting();
115 ASSERT_TRUE(RunExtensionTest("gcm/functions/send_message_data"));
117 EXPECT_EQ("destination-id", service()->last_receiver_id());
118 const gcm::GCMClient::OutgoingMessage& message =
119 service()->last_sent_message();
120 gcm::GCMClient::MessageData::const_iterator iter;
122 EXPECT_TRUE((iter = message.data.find("key1")) != message.data.end());
123 EXPECT_EQ("value1", iter->second);
125 EXPECT_TRUE((iter = message.data.find("key2")) != message.data.end());
126 EXPECT_EQ("value2", iter->second);
129 IN_PROC_BROWSER_TEST_F(GcmApiTest, OnMessagesDeleted) {
130 ResultCatcher catcher;
131 catcher.RestrictToProfile(profile());
133 const extensions::Extension* extension =
134 LoadTestExtension(kEventsExtension, "on_messages_deleted.html");
135 ASSERT_TRUE(extension);
137 GcmJsEventRouter router(profile());
138 router.OnMessagesDeleted(extension->id());
139 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
142 IN_PROC_BROWSER_TEST_F(GcmApiTest, OnMessage) {
143 ResultCatcher catcher;
144 catcher.RestrictToProfile(profile());
146 const extensions::Extension* extension =
147 LoadTestExtension(kEventsExtension, "on_message.html");
148 ASSERT_TRUE(extension);
150 GcmJsEventRouter router(profile());
152 gcm::GCMClient::IncomingMessage message;
153 message.data["property1"] = "value1";
154 message.data["property2"] = "value2";
155 router.OnMessage(extension->id(), message);
157 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
160 IN_PROC_BROWSER_TEST_F(GcmApiTest, OnSendError) {
161 ResultCatcher catcher;
162 catcher.RestrictToProfile(profile());
164 const extensions::Extension* extension =
165 LoadTestExtension(kEventsExtension, "on_send_error.html");
166 ASSERT_TRUE(extension);
168 GcmJsEventRouter router(profile());
169 router.OnSendError(extension->id(), "error_message_1",
170 gcm::GCMClient::ASYNC_OPERATION_PENDING);
171 router.OnSendError(extension->id(), "error_message_2",
172 gcm::GCMClient::SERVER_ERROR);
173 router.OnSendError(extension->id(), "error_message_3",
174 gcm::GCMClient::NETWORK_ERROR);
175 router.OnSendError(extension->id(), "error_message_4",
176 gcm::GCMClient::UNKNOWN_ERROR);
177 router.OnSendError(extension->id(), "error_message_5",
178 gcm::GCMClient::TTL_EXCEEDED);
180 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
183 IN_PROC_BROWSER_TEST_F(GcmApiTest, Incognito) {
184 if (ShouldSkipTest())
185 return;
187 ResultCatcher catcher;
188 catcher.RestrictToProfile(profile());
189 ResultCatcher incognito_catcher;
190 incognito_catcher.RestrictToProfile(profile()->GetOffTheRecordProfile());
192 ASSERT_TRUE(RunExtensionTestIncognito("gcm/functions/incognito"));
194 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
195 EXPECT_TRUE(incognito_catcher.GetNextResult()) << incognito_catcher.message();
198 } // namespace extensions