| 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..fe42d4c0dc6d79bdbc6a75cdfb864a8162f3c6f9 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_request_id,
|
| + int finish_request_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_request_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, finish_request_id,
|
| + blink::WebServiceWorkerEventResultCompleted));
|
| }
|
|
|
| private:
|
| @@ -412,10 +416,11 @@ class BlobResponder : public EmbeddedWorkerTestHelper {
|
|
|
| protected:
|
| void OnFetchEvent(int embedded_worker_id,
|
| - int request_id,
|
| + int response_request_id,
|
| + int finish_request_id,
|
| const ServiceWorkerFetchRequest& request) override {
|
| - SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished(
|
| - embedded_worker_id, request_id,
|
| + SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse(
|
| + embedded_worker_id, response_request_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, finish_request_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_request_id,
|
| + int finish_request_id,
|
| const ServiceWorkerFetchRequest& request) override {
|
| - SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished(
|
| - embedded_worker_id, request_id,
|
| + SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse(
|
| + embedded_worker_id, response_request_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, finish_request_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_request_id,
|
| + int finish_request_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_, finish_request_id_,
|
| + blink::WebServiceWorkerEventResultCompleted));
|
| + }
|
| +
|
| + protected:
|
| + void OnFetchEvent(int embedded_worker_id,
|
| + int response_request_id,
|
| + int finish_request_id,
|
| + const ServiceWorkerFetchRequest& request) override {
|
| + embedded_worker_id_ = embedded_worker_id;
|
| + finish_request_id_ = finish_request_id;
|
| + SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse(
|
| + embedded_worker_id, response_request_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 finish_request_id_ = 0;
|
| + DISALLOW_COPY_AND_ASSIGN(EarlyResponseHelper);
|
| +};
|
| +
|
| +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.
|
|
|
|
|