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 |