| 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 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 ServiceWorkerStallInStoppingTest() : ServiceWorkerVersionTestP() {} | 401 ServiceWorkerStallInStoppingTest() : ServiceWorkerVersionTestP() {} |
| 402 | 402 |
| 403 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { | 403 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { |
| 404 return base::MakeUnique<MessageReceiverDisallowStop>(); | 404 return base::MakeUnique<MessageReceiverDisallowStop>(); |
| 405 } | 405 } |
| 406 | 406 |
| 407 private: | 407 private: |
| 408 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerStallInStoppingTest); | 408 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerStallInStoppingTest); |
| 409 }; | 409 }; |
| 410 | 410 |
| 411 class MessageReceiverMojoTestService : public MessageReceiver { | |
| 412 public: | |
| 413 MessageReceiverMojoTestService() : MessageReceiver() {} | |
| 414 ~MessageReceiverMojoTestService() override {} | |
| 415 | |
| 416 void OnSetupMojo(int thread_id, | |
| 417 service_manager::InterfaceRegistry* registry) override { | |
| 418 registry->AddInterface(base::Bind(&TestServiceImpl::Create)); | |
| 419 } | |
| 420 | |
| 421 private: | |
| 422 DISALLOW_COPY_AND_ASSIGN(MessageReceiverMojoTestService); | |
| 423 }; | |
| 424 | |
| 425 class ServiceWorkerVersionWithMojoTest : public ServiceWorkerVersionTestP { | |
| 426 protected: | |
| 427 ServiceWorkerVersionWithMojoTest() : ServiceWorkerVersionTestP() {} | |
| 428 | |
| 429 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { | |
| 430 return base::MakeUnique<MessageReceiverMojoTestService>(); | |
| 431 } | |
| 432 | |
| 433 private: | |
| 434 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionWithMojoTest); | |
| 435 }; | |
| 436 | |
| 437 TEST_P(ServiceWorkerVersionTestP, ConcurrentStartAndStop) { | 411 TEST_P(ServiceWorkerVersionTestP, ConcurrentStartAndStop) { |
| 438 // Call StartWorker() multiple times. | 412 // Call StartWorker() multiple times. |
| 439 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; | 413 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; |
| 440 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; | 414 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; |
| 441 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; | 415 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; |
| 442 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 416 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 443 CreateReceiverOnCurrentThread(&status1)); | 417 CreateReceiverOnCurrentThread(&status1)); |
| 444 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 418 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 445 CreateReceiverOnCurrentThread(&status2)); | 419 CreateReceiverOnCurrentThread(&status2)); |
| 446 | 420 |
| (...skipping 776 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1223 | 1197 |
| 1224 // Callback completed. | 1198 // Callback completed. |
| 1225 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); | 1199 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); |
| 1226 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); | 1200 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); |
| 1227 | 1201 |
| 1228 // Request already failed, calling finsh should return false. | 1202 // Request already failed, calling finsh should return false. |
| 1229 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, | 1203 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, |
| 1230 base::Time::Now())); | 1204 base::Time::Now())); |
| 1231 } | 1205 } |
| 1232 | 1206 |
| 1233 TEST_P(ServiceWorkerVersionWithMojoTest, MojoService) { | |
| 1234 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | |
| 1235 | |
| 1236 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | |
| 1237 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | |
| 1238 CreateReceiverOnCurrentThread(&status)); | |
| 1239 base::RunLoop().RunUntilIdle(); | |
| 1240 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1241 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | |
| 1242 | |
| 1243 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); | |
| 1244 int request_id = version_->StartRequest( | |
| 1245 ServiceWorkerMetrics::EventType::SYNC, | |
| 1246 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); | |
| 1247 base::WeakPtr<mojom::TestService> service = | |
| 1248 version_->GetMojoServiceForRequest<mojom::TestService>(request_id); | |
| 1249 service->DoSomething(runner->QuitClosure()); | |
| 1250 runner->Run(); | |
| 1251 | |
| 1252 // Mojo service does exist in worker, so error callback should not have been | |
| 1253 // called and FinishRequest should return true. | |
| 1254 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1255 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */, | |
| 1256 base::Time::Now())); | |
| 1257 } | |
| 1258 | |
| 1259 TEST_P(ServiceWorkerVersionTestP, NonExistentMojoService) { | |
| 1260 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | |
| 1261 | |
| 1262 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | |
| 1263 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | |
| 1264 CreateReceiverOnCurrentThread(&status)); | |
| 1265 base::RunLoop().RunUntilIdle(); | |
| 1266 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1267 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | |
| 1268 | |
| 1269 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); | |
| 1270 int request_id = version_->StartRequest( | |
| 1271 ServiceWorkerMetrics::EventType::SYNC, | |
| 1272 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); | |
| 1273 base::WeakPtr<mojom::TestService> service = | |
| 1274 version_->GetMojoServiceForRequest<mojom::TestService>(request_id); | |
| 1275 service->DoSomething(runner->QuitClosure()); | |
| 1276 runner->Run(); | |
| 1277 | |
| 1278 // Mojo service doesn't exist in worker, so error callback should have been | |
| 1279 // called and FinishRequest should return false. | |
| 1280 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); | |
| 1281 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, | |
| 1282 base::Time::Now())); | |
| 1283 } | |
| 1284 | |
| 1285 TEST_P(ServiceWorkerVersionTestP, DispatchEvent) { | 1207 TEST_P(ServiceWorkerVersionTestP, DispatchEvent) { |
| 1286 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | 1208 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 1287 | 1209 |
| 1288 // Activate and start worker. | 1210 // Activate and start worker. |
| 1289 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 1211 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 1290 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | 1212 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, |
| 1291 CreateReceiverOnCurrentThread(&status)); | 1213 CreateReceiverOnCurrentThread(&status)); |
| 1292 base::RunLoop().RunUntilIdle(); | 1214 base::RunLoop().RunUntilIdle(); |
| 1293 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1215 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1294 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1216 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| (...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1790 testing::Bool()); | 1712 testing::Bool()); |
| 1791 INSTANTIATE_TEST_CASE_P(ServiceWorkerFailToStartTest, | 1713 INSTANTIATE_TEST_CASE_P(ServiceWorkerFailToStartTest, |
| 1792 ServiceWorkerFailToStartTest, | 1714 ServiceWorkerFailToStartTest, |
| 1793 testing::Bool()); | 1715 testing::Bool()); |
| 1794 INSTANTIATE_TEST_CASE_P(ServiceWorkerNavigationHintUMATest, | 1716 INSTANTIATE_TEST_CASE_P(ServiceWorkerNavigationHintUMATest, |
| 1795 ServiceWorkerNavigationHintUMATest, | 1717 ServiceWorkerNavigationHintUMATest, |
| 1796 testing::Bool()); | 1718 testing::Bool()); |
| 1797 INSTANTIATE_TEST_CASE_P(ServiceWorkerStallInStoppingTest, | 1719 INSTANTIATE_TEST_CASE_P(ServiceWorkerStallInStoppingTest, |
| 1798 ServiceWorkerStallInStoppingTest, | 1720 ServiceWorkerStallInStoppingTest, |
| 1799 testing::Bool()); | 1721 testing::Bool()); |
| 1800 INSTANTIATE_TEST_CASE_P(ServiceWorkerVersionWithMojoTest, | |
| 1801 ServiceWorkerVersionWithMojoTest, | |
| 1802 testing::Bool()); | |
| 1803 | |
| 1804 } // namespace content | 1722 } // namespace content |
| OLD | NEW |