Chromium Code Reviews| 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 8083102c1ced520ea2a9e1eaeb5880e358f3c730..6d0027175b1d5ee0c8fed5e6561c75b186d046c6 100644 |
| --- a/content/browser/loader/resource_dispatcher_host_impl.cc |
| +++ b/content/browser/loader/resource_dispatcher_host_impl.cc |
| @@ -1137,18 +1137,20 @@ 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)); |
| + } |
| + |
| + // 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 |
| @@ -1203,7 +1205,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; |
|
mmenke
2014/02/14 21:52:49
Generally we shouldn't be handling NOTREACHED / DC
davidben
2014/02/25 20:03:07
Done.
|
| + } |
| + |
| registered_temp_files_[child_id][request_id] = reference; |
| ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile( |
| child_id, reference->path()); |