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 dc0070ceefe7b6ffcf696041d954df4143882ec1..60a539fb9231a32a7c9367031b96a38c2815fe92 100644 |
--- a/content/browser/appcache/appcache_request_handler.cc |
+++ b/content/browser/appcache/appcache_request_handler.cc |
@@ -7,6 +7,7 @@ |
#include <utility> |
#include "base/bind.h" |
+#include "base/command_line.h" |
#include "content/browser/appcache/appcache.h" |
#include "content/browser/appcache/appcache_backend_impl.h" |
#include "content/browser/appcache/appcache_host.h" |
@@ -18,6 +19,7 @@ |
#include "content/browser/appcache/appcache_url_loader_request.h" |
#include "content/browser/appcache/appcache_url_request_job.h" |
#include "content/browser/service_worker/service_worker_request_handler.h" |
+#include "content/public/common/content_switches.h" |
#include "net/url_request/url_request.h" |
#include "net/url_request/url_request_job.h" |
@@ -101,7 +103,7 @@ AppCacheJob* AppCacheRequestHandler::MaybeLoadResource( |
// If its been setup to deliver a network response, we can just delete |
// it now and return NULL instead to achieve that since it couldn't |
// have been started yet. |
- if (job && job->IsDeliveringNetworkResponse()) { |
+ if (job && job->IsDeliveringNetworkResponse() && !job->AsURLLoaderJob()) { |
DCHECK(!job->IsStarted()); |
job.reset(); |
} |
@@ -238,10 +240,16 @@ AppCacheRequestHandler::InitializeForNavigationNetworkService( |
appcache_handle_core->host()->CreateRequestHandler( |
AppCacheURLLoaderRequest::Create(request), request.resource_type, |
request.should_reset_appcache); |
- handler->set_network_url_loader_factory_getter(url_loader_factory_getter); |
+ handler->network_url_loader_factory_getter_ = url_loader_factory_getter; |
+ handler->appcache_host_ = appcache_handle_core->host()->GetWeakPtr(); |
return handler; |
} |
+void AppCacheRequestHandler::SetSubresourceRequestLoadInfo( |
+ std::unique_ptr<SubresourceLoadInfo> subresource_load_info) { |
+ subresource_load_info_ = std::move(subresource_load_info); |
+} |
+ |
void AppCacheRequestHandler::OnDestructionImminent(AppCacheHost* host) { |
storage()->CancelDelegateCallbacks(this); |
host_ = NULL; // no need to RemoveObserver, the host is being deleted |
@@ -322,6 +330,17 @@ std::unique_ptr<AppCacheJob> AppCacheRequestHandler::CreateJob( |
base::Bind(&AppCacheRequestHandler::OnPrepareToRestart, |
base::Unretained(this))); |
job_ = job->GetWeakPtr(); |
+ if (job_.get() && !is_main_resource() && |
+ base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableNetworkService)) { |
+ AppCacheURLLoaderJob* loader_job = job_->AsURLLoaderJob(); |
+ |
+ // The job owns us from this point on. |
kinuko
2017/07/04 05:47:49
nit: the comment is stale now
ananta
2017/07/05 13:31:02
Thanks. removed
|
+ loader_job->SetSubresourceLoadInfo( |
+ std::move(subresource_load_info_), |
+ network_url_loader_factory_getter_.get()); |
+ } |
+ |
return job; |
} |
@@ -543,14 +562,20 @@ void AppCacheRequestHandler::MaybeCreateLoader( |
std::move(callback).Run(StartLoaderCallback()); |
return; |
} |
- navigation_request_job_->AsURLLoaderJob()->set_loader_callback( |
+ navigation_request_job_->AsURLLoaderJob()->set_main_resource_loader_callback( |
std::move(callback)); |
} |
mojom::URLLoaderFactoryPtr |
AppCacheRequestHandler::MaybeCreateSubresourceFactory() { |
- return AppCacheSubresourceURLFactory::CreateURLLoaderFactory( |
- network_url_loader_factory_getter_.get()); |
+ mojom::URLLoaderFactoryPtr factory_ptr = nullptr; |
+ |
+ // The factory is destroyed when the renderer drops the connection. |
+ AppCacheSubresourceURLFactory::CreateURLLoaderFactory( |
+ network_url_loader_factory_getter_.get(), appcache_host_, |
+ &factory_ptr); |
+ |
+ return factory_ptr; |
} |
} // namespace content |