Chromium Code Reviews| Index: content/browser/service_worker/service_worker_url_request_job_unittest.cc |
| diff --git a/content/browser/service_worker/service_worker_url_request_job_unittest.cc b/content/browser/service_worker/service_worker_url_request_job_unittest.cc |
| index 8da106c402db6777d6391fe4ca1caf1a18b90c61..1bcea299b39a49f675d3f44646a9d7727696f3e7 100644 |
| --- a/content/browser/service_worker/service_worker_url_request_job_unittest.cc |
| +++ b/content/browser/service_worker/service_worker_url_request_job_unittest.cc |
| @@ -332,11 +332,12 @@ class ProviderDeleteHelper : public EmbeddedWorkerTestHelper { |
| protected: |
| void OnFetchEvent(int embedded_worker_id, |
| - int request_id, |
| + int response_id, |
| + int event_finish_id, |
| const ServiceWorkerFetchRequest& request) override { |
| context()->RemoveProviderHost(mock_render_process_id(), kProviderID); |
| - SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished( |
| - embedded_worker_id, request_id, |
| + SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( |
| + embedded_worker_id, response_id, |
| SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, |
| ServiceWorkerResponse( |
| GURL(), 200, "OK", blink::WebServiceWorkerResponseTypeDefault, |
| @@ -345,6 +346,9 @@ class ProviderDeleteHelper : public EmbeddedWorkerTestHelper { |
| false /* response_is_in_cache_storage */, |
| std::string() /* response_cache_storage_cache_name */, |
| ServiceWorkerHeaderList() /* cors_exposed_header_names */))); |
| + SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished( |
| + embedded_worker_id, event_finish_id, |
| + blink::WebServiceWorkerEventResultCompleted)); |
| } |
| private: |
| @@ -412,10 +416,11 @@ class BlobResponder : public EmbeddedWorkerTestHelper { |
| protected: |
| void OnFetchEvent(int embedded_worker_id, |
| - int request_id, |
| + int response_id, |
| + int event_finish_id, |
| const ServiceWorkerFetchRequest& request) override { |
| - SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished( |
| - embedded_worker_id, request_id, |
| + SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( |
| + embedded_worker_id, response_id, |
| SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, |
| ServiceWorkerResponse( |
| GURL(), 200, "OK", blink::WebServiceWorkerResponseTypeDefault, |
| @@ -424,6 +429,9 @@ class BlobResponder : public EmbeddedWorkerTestHelper { |
| false /* response_is_in_cache_storage */, |
| std::string() /* response_cache_storage_cache_name */, |
| ServiceWorkerHeaderList() /* cors_exposed_header_names */))); |
| + SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished( |
| + embedded_worker_id, event_finish_id, |
| + blink::WebServiceWorkerEventResultCompleted)); |
| } |
| std::string blob_uuid_; |
| @@ -491,10 +499,11 @@ class StreamResponder : public EmbeddedWorkerTestHelper { |
| protected: |
| void OnFetchEvent(int embedded_worker_id, |
| - int request_id, |
| + int response_id, |
| + int event_finish_id, |
| const ServiceWorkerFetchRequest& request) override { |
| - SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished( |
| - embedded_worker_id, request_id, |
| + SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( |
| + embedded_worker_id, response_id, |
| SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, |
| ServiceWorkerResponse( |
| GURL(), 200, "OK", blink::WebServiceWorkerResponseTypeDefault, |
| @@ -503,6 +512,9 @@ class StreamResponder : public EmbeddedWorkerTestHelper { |
| false /* response_is_in_cache_storage */, |
| std::string() /* response_cache_storage_cache_name */, |
| ServiceWorkerHeaderList() /* cors_exposed_header_names */))); |
| + SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished( |
| + embedded_worker_id, event_finish_id, |
| + blink::WebServiceWorkerEventResultCompleted)); |
| } |
| const GURL stream_url_; |
| @@ -802,7 +814,8 @@ class FailFetchHelper : public EmbeddedWorkerTestHelper { |
| protected: |
| void OnFetchEvent(int embedded_worker_id, |
| - int request_id, |
| + int response_id, |
| + int event_finish_id, |
| const ServiceWorkerFetchRequest& request) override { |
| SimulateWorkerStopped(embedded_worker_id); |
| } |
| @@ -868,6 +881,68 @@ TEST_F(ServiceWorkerURLRequestJobTest, MainScriptHTTPResponseInfoNotSet) { |
| EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| } |
| +class EarlyResponseHelper : public EmbeddedWorkerTestHelper { |
| + public: |
| + EarlyResponseHelper() : EmbeddedWorkerTestHelper(base::FilePath()) {} |
| + ~EarlyResponseHelper() override {} |
| + |
| + void FinishWaitUntil() { |
| + SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished( |
| + embedded_worker_id_, event_finish_id_, |
| + blink::WebServiceWorkerEventResultCompleted)); |
| + } |
| + |
| + protected: |
| + void OnFetchEvent(int embedded_worker_id, |
| + int response_id, |
| + int event_finish_id, |
| + const ServiceWorkerFetchRequest& request) override { |
| + embedded_worker_id_ = embedded_worker_id; |
| + event_finish_id_ = event_finish_id; |
| + SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( |
| + embedded_worker_id, response_id, |
| + SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, |
| + ServiceWorkerResponse( |
| + GURL(), 200, "OK", blink::WebServiceWorkerResponseTypeDefault, |
| + ServiceWorkerHeaderMap(), std::string(), 0, GURL(), |
| + blink::WebServiceWorkerResponseErrorUnknown, base::Time(), |
| + false /* response_is_in_cache_storage */, |
| + std::string() /* response_cache_storage_cache_name */, |
| + ServiceWorkerHeaderList() /* cors_exposed_header_names */))); |
| + } |
| + |
| + private: |
| + int embedded_worker_id_ = 0; |
| + int event_finish_id_ = 0; |
| + DISALLOW_COPY_AND_ASSIGN(EarlyResponseHelper); |
| +}; |
| + |
|
falken
2016/06/16 06:23:10
Can you add a lightweight comment explaining what
shimazu
2016/06/21 02:43:38
Done.
|
| +TEST_F(ServiceWorkerURLRequestJobTest, EarlyResponse) { |
| + EarlyResponseHelper* helper = new EarlyResponseHelper; |
| + SetUpWithHelper(helper); |
| + |
| + version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| + TestRequest(200, "OK", std::string(), true /* expect_valid_ssl */); |
| + |
| + EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| + ServiceWorkerResponseInfo* info = |
| + ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| + ASSERT_TRUE(info); |
| + EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| + EXPECT_FALSE(info->was_fallback_required()); |
| + EXPECT_EQ(GURL(), info->original_url_via_service_worker()); |
| + EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| + info->response_type_via_service_worker()); |
| + EXPECT_FALSE(info->service_worker_start_time().is_null()); |
| + EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| + EXPECT_FALSE(info->response_is_in_cache_storage()); |
| + EXPECT_EQ(std::string(), info->response_cache_storage_cache_name()); |
| + |
| + EXPECT_TRUE(version_->HasInflightRequests()); |
| + helper->FinishWaitUntil(); |
| + EXPECT_FALSE(version_->HasInflightRequests()); |
| +} |
| + |
| // TODO(kinuko): Add more tests with different response data and also for |
| // FallbackToNetwork case. |