| Index: content/browser/loader/resource_dispatcher_host_impl.cc
|
| diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc
|
| index 8ab8ca7a380d8a9644611b47f9e0784083da9d71..690ace7b2864e80fdb66971f331f78f805ee40f8 100644
|
| --- a/content/browser/loader/resource_dispatcher_host_impl.cc
|
| +++ b/content/browser/loader/resource_dispatcher_host_impl.cc
|
| @@ -40,6 +40,7 @@
|
| #include "content/browser/loader/resource_request_info_impl.h"
|
| #include "content/browser/loader/stream_resource_handler.h"
|
| #include "content/browser/loader/sync_resource_handler.h"
|
| +#include "content/browser/loader/temporary_file_stream.h"
|
| #include "content/browser/loader/throttling_resource_handler.h"
|
| #include "content/browser/loader/upload_data_stream_builder.h"
|
| #include "content/browser/plugin_service_impl.h"
|
| @@ -1147,18 +1148,22 @@ scoped_ptr<ResourceHandler> ResourceDispatcherHostImpl::CreateResourceHandler(
|
| handler.reset(new SyncResourceHandler(request, sync_result, this));
|
| } else {
|
| handler.reset(new AsyncResourceHandler(request, this));
|
| - if (IsDetachableResourceType(request_data.resource_type)) {
|
| - handler.reset(new DetachableResourceHandler(
|
| - request,
|
| - base::TimeDelta::FromMilliseconds(kDefaultDetachableCancelDelayMs),
|
| - handler.Pass()));
|
| - }
|
| }
|
|
|
| // The RedirectToFileResourceHandler depends on being next in the chain.
|
| if (request_data.download_to_file) {
|
| handler.reset(
|
| - new RedirectToFileResourceHandler(handler.Pass(), request, this));
|
| + new RedirectToFileResourceHandler(
|
| + handler.Pass(), request,
|
| + base::Bind(&CreateTemporaryFileStream)));
|
| + }
|
| +
|
| + // Prefetches and <a ping> requests outlive their child process.
|
| + if (!sync_result && IsDetachableResourceType(request_data.resource_type)) {
|
| + handler.reset(new DetachableResourceHandler(
|
| + request,
|
| + base::TimeDelta::FromMilliseconds(kDefaultDetachableCancelDelayMs),
|
| + handler.Pass()));
|
| }
|
|
|
| // Install a CrossSiteResourceHandler for all main frame requests. This will
|
| @@ -1213,7 +1218,14 @@ void ResourceDispatcherHostImpl::OnDataDownloadedACK(int request_id) {
|
| }
|
|
|
| void ResourceDispatcherHostImpl::RegisterDownloadedTempFile(
|
| - int child_id, int request_id, ShareableFileReference* reference) {
|
| + int child_id, int request_id, const base::FilePath& file_path) {
|
| + scoped_refptr<ShareableFileReference> reference =
|
| + ShareableFileReference::Get(file_path);
|
| + if (!reference) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| +
|
| registered_temp_files_[child_id][request_id] = reference;
|
| ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile(
|
| child_id, reference->path());
|
|
|