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 |
falken
2017/01/19 05:26:47
preload
horo
2017/01/19 05:48:57
Done.
|
+ // 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(); |
} |