Chromium Code Reviews| Index: content/browser/appcache/appcache_request_handler.cc |
| diff --git a/content/browser/appcache/appcache_request_handler.cc b/content/browser/appcache/appcache_request_handler.cc |
| index 8db5e59d2af5dd2613339268bc1ae17722559c0a..af579a8fbb488f58fc98b65f351e638828a1a593 100644 |
| --- a/content/browser/appcache/appcache_request_handler.cc |
| +++ b/content/browser/appcache/appcache_request_handler.cc |
| @@ -354,8 +354,10 @@ std::unique_ptr<AppCacheJob> AppCacheRequestHandler::CreateJob( |
| std::unique_ptr<AppCacheJob> AppCacheRequestHandler::MaybeCreateJobForFallback( |
| net::NetworkDelegate* network_delegate) { |
| - if (!base::FeatureList::IsEnabled(features::kNetworkService)) |
| + if (!base::FeatureList::IsEnabled(features::kNetworkService) || |
| + IsMainResourceType(resource_type_)) { |
| return CreateJob(network_delegate); |
| + } |
| // In network service land, the job initiates a fallback request. We reuse |
| // the existing job to deliver the fallback response. |
| DCHECK(job_.get()); |
| @@ -580,8 +582,11 @@ void AppCacheRequestHandler::MaybeCreateLoader( |
| std::move(callback).Run(StartLoaderCallback()); |
| return; |
| } |
| - navigation_request_job_->AsURLLoaderJob()->set_main_resource_loader_callback( |
| - std::move(callback)); |
| + // The AppCacheJob for the navigation request will get destroyed when the |
| + // client connection is dropped. |
| + navigation_request_job_.release() |
|
michaeln
2017/07/26 23:08:41
if navigation_request_job_ is never retained beyon
ananta
2017/07/27 02:40:25
Done.
|
| + ->AsURLLoaderJob() |
| + ->set_main_resource_loader_callback(std::move(callback)); |
| } |
| mojom::URLLoaderFactoryPtr |
| @@ -595,4 +600,38 @@ AppCacheRequestHandler::MaybeCreateSubresourceFactory() { |
| return factory_ptr; |
| } |
| +bool AppCacheRequestHandler::MaybeGetFallbackForResponse( |
| + const ResourceResponseHead& response, |
| + mojom::URLLoaderClientPtr* client, |
| + mojom::URLLoaderRequest* request) { |
| + request_->AsURLLoaderRequest()->set_response(response); |
| + // The AppCacheJob will get destroyed when the client connection is |
| + // dropped. |
| + AppCacheJob* job = MaybeLoadFallbackForResponse(nullptr); |
| + if (job) { |
| + job->AsURLLoaderJob()->BindRequest(std::move(*client), |
| + std::move(*request)); |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| +bool AppCacheRequestHandler::MaybeGetFallbackForRedirect( |
| + const ResourceResponseHead& response, |
| + const net::RedirectInfo& redirect_info, |
| + mojom::URLLoaderClientPtr* client, |
| + mojom::URLLoaderRequest* request) { |
| + request_->AsURLLoaderRequest()->set_response(response); |
| + // The AppCacheJob will get destroyed when the client connection is |
| + // dropped. |
| + AppCacheJob* job = |
| + MaybeLoadFallbackForRedirect(nullptr, redirect_info.new_url); |
| + if (job) { |
| + job->AsURLLoaderJob()->BindRequest(std::move(*client), |
| + std::move(*request)); |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| } // namespace content |