| Index: content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc
|
| diff --git a/content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc b/content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc
|
| index 17d580e1e33199fd41944d52a2127bc18c3a32ec..8132f4d9c67c9cbf4e3ef6cb026460efbcba29ee 100644
|
| --- a/content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc
|
| +++ b/content/browser/service_worker/service_worker_controllee_request_handler_unittest.cc
|
| @@ -301,6 +301,48 @@ TEST_P(ServiceWorkerControlleeRequestHandlerTestP, DeletedProviderHost) {
|
| EXPECT_FALSE(sw_job->ShouldForwardToServiceWorker());
|
| }
|
|
|
| +// Tests the scenario where a controllee request handler was created
|
| +// for a subresource request, but before MaybeCreateJob() is run, the
|
| +// controller/active version becomes null.
|
| +TEST_P(ServiceWorkerControlleeRequestHandlerTestP, LostActiveVersion) {
|
| + // Store an activated worker.
|
| + version_->set_fetch_handler_existence(
|
| + ServiceWorkerVersion::FetchHandlerExistence::EXISTS);
|
| + version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
|
| + registration_->SetActiveVersion(version_);
|
| + context()->storage()->StoreRegistration(
|
| + registration_.get(), version_.get(),
|
| + base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + // Conduct a main resource load to set the controller.
|
| + ServiceWorkerRequestTestResources main_test_resources(
|
| + this, GURL("https://host/scope/doc"), RESOURCE_TYPE_MAIN_FRAME);
|
| + main_test_resources.MaybeCreateJob();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(version_->HasControllee());
|
| + EXPECT_EQ(version_, provider_host_->controlling_version());
|
| + EXPECT_EQ(version_, provider_host_->active_version());
|
| +
|
| + // Unset the active version.
|
| + provider_host_->NotifyControllerLost();
|
| + registration_->SetActiveVersion(nullptr);
|
| + EXPECT_FALSE(version_->HasControllee());
|
| + EXPECT_FALSE(provider_host_->controlling_version());
|
| + EXPECT_FALSE(provider_host_->active_version());
|
| +
|
| + // Conduct a subresource load.
|
| + ServiceWorkerRequestTestResources sub_test_resources(
|
| + this, GURL("https://host/scope/doc"), RESOURCE_TYPE_IMAGE);
|
| + ServiceWorkerURLRequestJob* sub_job = sub_test_resources.MaybeCreateJob();
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + // Verify that the job errored.
|
| + EXPECT_EQ(
|
| + ServiceWorkerURLRequestJob::ResponseType::FAIL_DUE_TO_LOST_CONTROLLER,
|
| + sub_job->response_type_);
|
| +}
|
| +
|
| TEST_P(ServiceWorkerControlleeRequestHandlerTestP, FallbackWithNoFetchHandler) {
|
| version_->set_fetch_handler_existence(
|
| ServiceWorkerVersion::FetchHandlerExistence::DOES_NOT_EXIST);
|
|
|