| Index: content/browser/service_worker/service_worker_url_request_job.cc
|
| diff --git a/content/browser/service_worker/service_worker_url_request_job.cc b/content/browser/service_worker/service_worker_url_request_job.cc
|
| index 77a82de84346149dd8e02194c33410b7140a8db7..9b85bab442f375e4b0b59d24a7d4cb1ef6dfed17 100644
|
| --- a/content/browser/service_worker/service_worker_url_request_job.cc
|
| +++ b/content/browser/service_worker/service_worker_url_request_job.cc
|
| @@ -565,7 +565,13 @@ void ServiceWorkerURLRequestJob::DidDispatchFetchEvent(
|
| ServiceWorkerFetchEventResult fetch_result,
|
| const ServiceWorkerResponse& response,
|
| const scoped_refptr<ServiceWorkerVersion>& version) {
|
| - fetch_dispatcher_.reset();
|
| + // Do not clear |fetch_dispatcher_| if it has dispatched a navigation prelaod
|
| + // request to keep the mojom::URLLoader related objects in it, because the
|
| + // preload response might still need to be streamed even after calling
|
| + // respondWith().
|
| + if (!did_navigation_preload_) {
|
| + fetch_dispatcher_.reset();
|
| + }
|
| ServiceWorkerMetrics::RecordFetchEventStatus(IsMainResourceLoad(), status);
|
|
|
| ServiceWorkerMetrics::URLRequestJobResult result =
|
| @@ -879,7 +885,8 @@ void ServiceWorkerURLRequestJob::RequestBodyFileSizesResolved(bool success) {
|
| base::Bind(&ServiceWorkerURLRequestJob::DidDispatchFetchEvent,
|
| weak_factory_.GetWeakPtr())));
|
| worker_start_time_ = base::TimeTicks::Now();
|
| - fetch_dispatcher_->MaybeStartNavigationPreload(request());
|
| + did_navigation_preload_ =
|
| + fetch_dispatcher_->MaybeStartNavigationPreload(request());
|
| fetch_dispatcher_->Run();
|
| }
|
|
|
|
|