| 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 "content/browser/service_worker/service_worker_version.h" | 5 #include "content/browser/service_worker/service_worker_version.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <tuple> | 8 #include <tuple> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 ServiceWorkerStallInStoppingTest() : ServiceWorkerVersionTestP() {} | 391 ServiceWorkerStallInStoppingTest() : ServiceWorkerVersionTestP() {} |
| 392 | 392 |
| 393 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { | 393 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { |
| 394 return base::MakeUnique<MessageReceiverDisallowStop>(); | 394 return base::MakeUnique<MessageReceiverDisallowStop>(); |
| 395 } | 395 } |
| 396 | 396 |
| 397 private: | 397 private: |
| 398 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerStallInStoppingTest); | 398 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerStallInStoppingTest); |
| 399 }; | 399 }; |
| 400 | 400 |
| 401 class MessageReceiverMojoTestService : public MessageReceiver { | |
| 402 public: | |
| 403 MessageReceiverMojoTestService() : MessageReceiver() {} | |
| 404 ~MessageReceiverMojoTestService() override {} | |
| 405 | |
| 406 void OnSetupMojo(int thread_id, | |
| 407 service_manager::InterfaceRegistry* registry) override { | |
| 408 registry->AddInterface(base::Bind(&TestServiceImpl::Create)); | |
| 409 } | |
| 410 | |
| 411 private: | |
| 412 DISALLOW_COPY_AND_ASSIGN(MessageReceiverMojoTestService); | |
| 413 }; | |
| 414 | |
| 415 class ServiceWorkerVersionWithMojoTest : public ServiceWorkerVersionTestP { | |
| 416 protected: | |
| 417 ServiceWorkerVersionWithMojoTest() : ServiceWorkerVersionTestP() {} | |
| 418 | |
| 419 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { | |
| 420 return base::MakeUnique<MessageReceiverMojoTestService>(); | |
| 421 } | |
| 422 | |
| 423 private: | |
| 424 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionWithMojoTest); | |
| 425 }; | |
| 426 | |
| 427 TEST_P(ServiceWorkerVersionTestP, ConcurrentStartAndStop) { | 401 TEST_P(ServiceWorkerVersionTestP, ConcurrentStartAndStop) { |
| 428 // Call StartWorker() multiple times. | 402 // Call StartWorker() multiple times. |
| 429 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; | 403 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; |
| 430 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; | 404 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; |
| 431 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; | 405 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; |
| 432 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 406 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 433 CreateReceiverOnCurrentThread(&status1)); | 407 CreateReceiverOnCurrentThread(&status1)); |
| 434 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 408 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 435 CreateReceiverOnCurrentThread(&status2)); | 409 CreateReceiverOnCurrentThread(&status2)); |
| 436 | 410 |
| (...skipping 776 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1213 | 1187 |
| 1214 // Callback completed. | 1188 // Callback completed. |
| 1215 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); | 1189 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); |
| 1216 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); | 1190 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); |
| 1217 | 1191 |
| 1218 // Request already failed, calling finsh should return false. | 1192 // Request already failed, calling finsh should return false. |
| 1219 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, | 1193 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, |
| 1220 base::Time::Now())); | 1194 base::Time::Now())); |
| 1221 } | 1195 } |
| 1222 | 1196 |
| 1223 TEST_P(ServiceWorkerVersionWithMojoTest, MojoService) { | |
| 1224 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | |
| 1225 | |
| 1226 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | |
| 1227 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | |
| 1228 CreateReceiverOnCurrentThread(&status)); | |
| 1229 base::RunLoop().RunUntilIdle(); | |
| 1230 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1231 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | |
| 1232 | |
| 1233 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); | |
| 1234 int request_id = version_->StartRequest( | |
| 1235 ServiceWorkerMetrics::EventType::SYNC, | |
| 1236 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); | |
| 1237 base::WeakPtr<mojom::TestService> service = | |
| 1238 version_->GetMojoServiceForRequest<mojom::TestService>(request_id); | |
| 1239 service->DoSomething(runner->QuitClosure()); | |
| 1240 runner->Run(); | |
| 1241 | |
| 1242 // Mojo service does exist in worker, so error callback should not have been | |
| 1243 // called and FinishRequest should return true. | |
| 1244 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1245 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */, | |
| 1246 base::Time::Now())); | |
| 1247 } | |
| 1248 | |
| 1249 TEST_P(ServiceWorkerVersionTestP, NonExistentMojoService) { | |
| 1250 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | |
| 1251 | |
| 1252 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | |
| 1253 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | |
| 1254 CreateReceiverOnCurrentThread(&status)); | |
| 1255 base::RunLoop().RunUntilIdle(); | |
| 1256 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1257 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | |
| 1258 | |
| 1259 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); | |
| 1260 int request_id = version_->StartRequest( | |
| 1261 ServiceWorkerMetrics::EventType::SYNC, | |
| 1262 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); | |
| 1263 base::WeakPtr<mojom::TestService> service = | |
| 1264 version_->GetMojoServiceForRequest<mojom::TestService>(request_id); | |
| 1265 service->DoSomething(runner->QuitClosure()); | |
| 1266 runner->Run(); | |
| 1267 | |
| 1268 // Mojo service doesn't exist in worker, so error callback should have been | |
| 1269 // called and FinishRequest should return false. | |
| 1270 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); | |
| 1271 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, | |
| 1272 base::Time::Now())); | |
| 1273 } | |
| 1274 | |
| 1275 TEST_P(ServiceWorkerVersionTestP, DispatchEvent) { | 1197 TEST_P(ServiceWorkerVersionTestP, DispatchEvent) { |
| 1276 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | 1198 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 1277 | 1199 |
| 1278 // Activate and start worker. | 1200 // Activate and start worker. |
| 1279 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 1201 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 1280 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | 1202 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, |
| 1281 CreateReceiverOnCurrentThread(&status)); | 1203 CreateReceiverOnCurrentThread(&status)); |
| 1282 base::RunLoop().RunUntilIdle(); | 1204 base::RunLoop().RunUntilIdle(); |
| 1283 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1205 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1284 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1206 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| (...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1780 testing::Bool()); | 1702 testing::Bool()); |
| 1781 INSTANTIATE_TEST_CASE_P(ServiceWorkerFailToStartTest, | 1703 INSTANTIATE_TEST_CASE_P(ServiceWorkerFailToStartTest, |
| 1782 ServiceWorkerFailToStartTest, | 1704 ServiceWorkerFailToStartTest, |
| 1783 testing::Bool()); | 1705 testing::Bool()); |
| 1784 INSTANTIATE_TEST_CASE_P(ServiceWorkerNavigationHintUMATest, | 1706 INSTANTIATE_TEST_CASE_P(ServiceWorkerNavigationHintUMATest, |
| 1785 ServiceWorkerNavigationHintUMATest, | 1707 ServiceWorkerNavigationHintUMATest, |
| 1786 testing::Bool()); | 1708 testing::Bool()); |
| 1787 INSTANTIATE_TEST_CASE_P(ServiceWorkerStallInStoppingTest, | 1709 INSTANTIATE_TEST_CASE_P(ServiceWorkerStallInStoppingTest, |
| 1788 ServiceWorkerStallInStoppingTest, | 1710 ServiceWorkerStallInStoppingTest, |
| 1789 testing::Bool()); | 1711 testing::Bool()); |
| 1790 INSTANTIATE_TEST_CASE_P(ServiceWorkerVersionWithMojoTest, | |
| 1791 ServiceWorkerVersionWithMojoTest, | |
| 1792 testing::Bool()); | |
| 1793 | |
| 1794 } // namespace content | 1712 } // namespace content |
| OLD | NEW |