| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "chrome/browser/extensions/extension_apitest.h" | 11 #include "chrome/browser/extensions/extension_apitest.h" |
| 12 #include "chrome/browser/extensions/extension_service.h" | 12 #include "chrome/browser/extensions/extension_service.h" |
| 13 #include "chrome/browser/notifications/desktop_notification_profile_util.h" | 13 #include "chrome/browser/notifications/desktop_notification_profile_util.h" |
| 14 #include "chrome/browser/permissions/permission_manager.h" | 14 #include "chrome/browser/permissions/permission_manager.h" |
| 15 #include "chrome/browser/push_messaging/push_messaging_app_identifier.h" | 15 #include "chrome/browser/push_messaging/push_messaging_app_identifier.h" |
| 16 #include "chrome/browser/push_messaging/push_messaging_service_factory.h" | 16 #include "chrome/browser/push_messaging/push_messaging_service_factory.h" |
| 17 #include "chrome/browser/push_messaging/push_messaging_service_impl.h" | 17 #include "chrome/browser/push_messaging/push_messaging_service_impl.h" |
| 18 #include "chrome/browser/services/gcm/fake_gcm_profile_service.h" | 18 #include "chrome/browser/services/gcm/fake_gcm_profile_service.h" |
| 19 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h" | 19 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h" |
| 20 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 20 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 21 #include "chrome/test/base/ui_test_utils.h" | 21 #include "chrome/test/base/ui_test_utils.h" |
| 22 #include "components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.h" |
| 22 #include "components/version_info/version_info.h" | 23 #include "components/version_info/version_info.h" |
| 23 #include "content/public/browser/navigation_controller.h" | 24 #include "content/public/browser/navigation_controller.h" |
| 24 #include "content/public/browser/navigation_entry.h" | 25 #include "content/public/browser/navigation_entry.h" |
| 25 #include "content/public/browser/permission_type.h" | 26 #include "content/public/browser/permission_type.h" |
| 26 #include "content/public/browser/web_contents.h" | 27 #include "content/public/browser/web_contents.h" |
| 27 #include "content/public/common/content_switches.h" | 28 #include "content/public/common/content_switches.h" |
| 28 #include "content/public/common/origin_util.h" | 29 #include "content/public/common/origin_util.h" |
| 29 #include "content/public/common/page_type.h" | 30 #include "content/public/common/page_type.h" |
| 30 #include "content/public/test/background_sync_test_util.h" | 31 #include "content/public/test/background_sync_test_util.h" |
| 31 #include "content/public/test/browser_test_utils.h" | 32 #include "content/public/test/browser_test_utils.h" |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 ServiceWorkerTest::SetUp(); | 190 ServiceWorkerTest::SetUp(); |
| 190 } | 191 } |
| 191 | 192 |
| 192 private: | 193 private: |
| 193 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerBackgroundSyncTest); | 194 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerBackgroundSyncTest); |
| 194 }; | 195 }; |
| 195 | 196 |
| 196 class ServiceWorkerPushMessagingTest : public ServiceWorkerTest { | 197 class ServiceWorkerPushMessagingTest : public ServiceWorkerTest { |
| 197 public: | 198 public: |
| 198 ServiceWorkerPushMessagingTest() | 199 ServiceWorkerPushMessagingTest() |
| 199 : gcm_service_(nullptr), push_service_(nullptr) {} | 200 : gcm_driver_(nullptr), push_service_(nullptr) {} |
| 200 ~ServiceWorkerPushMessagingTest() override {} | 201 ~ServiceWorkerPushMessagingTest() override {} |
| 201 | 202 |
| 202 void GrantNotificationPermissionForTest(const GURL& url) { | 203 void GrantNotificationPermissionForTest(const GURL& url) { |
| 203 GURL origin = url.GetOrigin(); | 204 GURL origin = url.GetOrigin(); |
| 204 DesktopNotificationProfileUtil::GrantPermission(profile(), origin); | 205 DesktopNotificationProfileUtil::GrantPermission(profile(), origin); |
| 205 ASSERT_EQ(blink::mojom::PermissionStatus::GRANTED, | 206 ASSERT_EQ(blink::mojom::PermissionStatus::GRANTED, |
| 206 PermissionManager::Get(profile())->GetPermissionStatus( | 207 PermissionManager::Get(profile())->GetPermissionStatus( |
| 207 content::PermissionType::NOTIFICATIONS, origin, origin)); | 208 content::PermissionType::NOTIFICATIONS, origin, origin)); |
| 208 } | 209 } |
| 209 | 210 |
| 210 PushMessagingAppIdentifier GetAppIdentifierForServiceWorkerRegistration( | 211 PushMessagingAppIdentifier GetAppIdentifierForServiceWorkerRegistration( |
| 211 int64_t service_worker_registration_id, | 212 int64_t service_worker_registration_id, |
| 212 const GURL& origin) { | 213 const GURL& origin) { |
| 213 PushMessagingAppIdentifier app_identifier = | 214 PushMessagingAppIdentifier app_identifier = |
| 214 PushMessagingAppIdentifier::FindByServiceWorker( | 215 PushMessagingAppIdentifier::FindByServiceWorker( |
| 215 profile(), origin, service_worker_registration_id); | 216 profile(), origin, service_worker_registration_id); |
| 216 | 217 |
| 217 EXPECT_FALSE(app_identifier.is_null()); | 218 EXPECT_FALSE(app_identifier.is_null()); |
| 218 return app_identifier; | 219 return app_identifier; |
| 219 } | 220 } |
| 220 | 221 |
| 221 // ExtensionApiTest overrides. | 222 // ExtensionApiTest overrides. |
| 222 void SetUpCommandLine(base::CommandLine* command_line) override { | 223 void SetUpCommandLine(base::CommandLine* command_line) override { |
| 223 command_line->AppendSwitch( | 224 command_line->AppendSwitch( |
| 224 switches::kEnableExperimentalWebPlatformFeatures); | 225 switches::kEnableExperimentalWebPlatformFeatures); |
| 225 ServiceWorkerTest::SetUpCommandLine(command_line); | 226 ServiceWorkerTest::SetUpCommandLine(command_line); |
| 226 } | 227 } |
| 227 void SetUpOnMainThread() override { | 228 void SetUpOnMainThread() override { |
| 228 gcm_service_ = static_cast<gcm::FakeGCMProfileService*>( | 229 gcm::FakeGCMProfileService* gcm_service = |
| 229 gcm::GCMProfileServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 230 static_cast<gcm::FakeGCMProfileService*>( |
| 230 profile(), &gcm::FakeGCMProfileService::Build)); | 231 gcm::GCMProfileServiceFactory::GetInstance() |
| 231 gcm_service_->set_collect(true); | 232 ->SetTestingFactoryAndUse(profile(), |
| 233 &gcm::FakeGCMProfileService::Build)); |
| 234 gcm_driver_ = static_cast<instance_id::FakeGCMDriverForInstanceID*>( |
| 235 gcm_service->driver()); |
| 232 push_service_ = PushMessagingServiceFactory::GetForProfile(profile()); | 236 push_service_ = PushMessagingServiceFactory::GetForProfile(profile()); |
| 233 | 237 |
| 234 ServiceWorkerTest::SetUpOnMainThread(); | 238 ServiceWorkerTest::SetUpOnMainThread(); |
| 235 } | 239 } |
| 236 | 240 |
| 237 gcm::FakeGCMProfileService* gcm_service() const { return gcm_service_; } | 241 instance_id::FakeGCMDriverForInstanceID* gcm_driver() const { |
| 242 return gcm_driver_; |
| 243 } |
| 238 PushMessagingServiceImpl* push_service() const { return push_service_; } | 244 PushMessagingServiceImpl* push_service() const { return push_service_; } |
| 239 | 245 |
| 240 private: | 246 private: |
| 241 gcm::FakeGCMProfileService* gcm_service_; | 247 instance_id::FakeGCMDriverForInstanceID* gcm_driver_; |
| 242 PushMessagingServiceImpl* push_service_; | 248 PushMessagingServiceImpl* push_service_; |
| 243 | 249 |
| 244 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerPushMessagingTest); | 250 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerPushMessagingTest); |
| 245 }; | 251 }; |
| 246 | 252 |
| 247 IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, RegisterSucceeds) { | 253 IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, RegisterSucceeds) { |
| 248 StartTestFromBackgroundPage("register.js", kExpectSuccess); | 254 StartTestFromBackgroundPage("register.js", kExpectSuccess); |
| 249 } | 255 } |
| 250 | 256 |
| 251 IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdateRefreshesServiceWorker) { | 257 IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdateRefreshesServiceWorker) { |
| (...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 755 | 761 |
| 756 // Start the ServiceWorker. | 762 // Start the ServiceWorker. |
| 757 ExtensionTestMessageListener ready_listener("SERVICE_WORKER_READY", false); | 763 ExtensionTestMessageListener ready_listener("SERVICE_WORKER_READY", false); |
| 758 ready_listener.set_failure_message("SERVICE_WORKER_FAILURE"); | 764 ready_listener.set_failure_message("SERVICE_WORKER_FAILURE"); |
| 759 const char* kScript = "window.runServiceWorker()"; | 765 const char* kScript = "window.runServiceWorker()"; |
| 760 EXPECT_TRUE(content::ExecuteScript(web_contents->GetMainFrame(), kScript)); | 766 EXPECT_TRUE(content::ExecuteScript(web_contents->GetMainFrame(), kScript)); |
| 761 EXPECT_TRUE(ready_listener.WaitUntilSatisfied()); | 767 EXPECT_TRUE(ready_listener.WaitUntilSatisfied()); |
| 762 | 768 |
| 763 PushMessagingAppIdentifier app_identifier = | 769 PushMessagingAppIdentifier app_identifier = |
| 764 GetAppIdentifierForServiceWorkerRegistration(0LL, extension_url); | 770 GetAppIdentifierForServiceWorkerRegistration(0LL, extension_url); |
| 765 ASSERT_EQ(app_identifier.app_id(), gcm_service()->last_registered_app_id()); | 771 ASSERT_EQ(app_identifier.app_id(), gcm_driver()->last_gettoken_app_id()); |
| 766 EXPECT_EQ("1234567890", gcm_service()->last_registered_sender_ids()[0]); | 772 EXPECT_EQ("1234567890", gcm_driver()->last_gettoken_authorized_entity()); |
| 767 | 773 |
| 768 base::RunLoop run_loop; | 774 base::RunLoop run_loop; |
| 769 // Send a push message via gcm and expect the ServiceWorker to receive it. | 775 // Send a push message via gcm and expect the ServiceWorker to receive it. |
| 770 ExtensionTestMessageListener push_message_listener("OK", false); | 776 ExtensionTestMessageListener push_message_listener("OK", false); |
| 771 push_message_listener.set_failure_message("FAIL"); | 777 push_message_listener.set_failure_message("FAIL"); |
| 772 gcm::IncomingMessage message; | 778 gcm::IncomingMessage message; |
| 773 message.sender_id = "1234567890"; | 779 message.sender_id = "1234567890"; |
| 774 message.raw_data = "testdata"; | 780 message.raw_data = "testdata"; |
| 775 message.decrypted = true; | 781 message.decrypted = true; |
| 776 push_service()->SetMessageCallbackForTesting(run_loop.QuitClosure()); | 782 push_service()->SetMessageCallbackForTesting(run_loop.QuitClosure()); |
| 777 push_service()->OnMessage(app_identifier.app_id(), message); | 783 push_service()->OnMessage(app_identifier.app_id(), message); |
| 778 EXPECT_TRUE(push_message_listener.WaitUntilSatisfied()); | 784 EXPECT_TRUE(push_message_listener.WaitUntilSatisfied()); |
| 779 run_loop.Run(); // Wait until the message is handled by push service. | 785 run_loop.Run(); // Wait until the message is handled by push service. |
| 780 } | 786 } |
| 781 | 787 |
| 782 } // namespace extensions | 788 } // namespace extensions |
| OLD | NEW |