| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc
e-loading | 5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc
e-loading |
| 6 | 6 |
| 7 #include "content/browser/renderer_host/resource_dispatcher_host_impl.h" | 7 #include "content/browser/renderer_host/resource_dispatcher_host_impl.h" |
| 8 | 8 |
| 9 #include <set> | 9 #include <set> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 } | 288 } |
| 289 } | 289 } |
| 290 | 290 |
| 291 void OnSwapOutACKHelper(int render_process_id, int render_view_id) { | 291 void OnSwapOutACKHelper(int render_process_id, int render_view_id) { |
| 292 RenderViewHostImpl* rvh = RenderViewHostImpl::FromID(render_process_id, | 292 RenderViewHostImpl* rvh = RenderViewHostImpl::FromID(render_process_id, |
| 293 render_view_id); | 293 render_view_id); |
| 294 if (rvh) | 294 if (rvh) |
| 295 rvh->OnSwapOutACK(); | 295 rvh->OnSwapOutACK(); |
| 296 } | 296 } |
| 297 | 297 |
| 298 net::Error CallbackAndReturn( |
| 299 const DownloadResourceHandler::OnStartedCallback& started_cb, |
| 300 net::Error net_error) { |
| 301 if (started_cb.is_null()) |
| 302 return net_error; |
| 303 BrowserThread::PostTask( |
| 304 BrowserThread::UI, FROM_HERE, |
| 305 base::Bind(started_cb, content::DownloadId::Invalid(), net_error)); |
| 306 |
| 307 return net_error; |
| 308 } |
| 309 |
| 298 } // namespace | 310 } // namespace |
| 299 | 311 |
| 300 // static | 312 // static |
| 301 ResourceDispatcherHost* ResourceDispatcherHost::Get() { | 313 ResourceDispatcherHost* ResourceDispatcherHost::Get() { |
| 302 return g_resource_dispatcher_host; | 314 return g_resource_dispatcher_host; |
| 303 } | 315 } |
| 304 | 316 |
| 305 ResourceDispatcherHostImpl::ResourceDispatcherHostImpl() | 317 ResourceDispatcherHostImpl::ResourceDispatcherHostImpl() |
| 306 : download_file_manager_(new DownloadFileManager(NULL)), | 318 : download_file_manager_(new DownloadFileManager(NULL)), |
| 307 save_file_manager_(new SaveFileManager()), | 319 save_file_manager_(new SaveFileManager()), |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 | 457 |
| 446 net::Error ResourceDispatcherHostImpl::BeginDownload( | 458 net::Error ResourceDispatcherHostImpl::BeginDownload( |
| 447 scoped_ptr<net::URLRequest> request, | 459 scoped_ptr<net::URLRequest> request, |
| 448 ResourceContext* context, | 460 ResourceContext* context, |
| 449 int child_id, | 461 int child_id, |
| 450 int route_id, | 462 int route_id, |
| 451 bool prefer_cache, | 463 bool prefer_cache, |
| 452 const DownloadSaveInfo& save_info, | 464 const DownloadSaveInfo& save_info, |
| 453 const DownloadStartedCallback& started_callback) { | 465 const DownloadStartedCallback& started_callback) { |
| 454 if (is_shutdown_) | 466 if (is_shutdown_) |
| 455 return net::ERR_INSUFFICIENT_RESOURCES; | 467 return CallbackAndReturn(started_callback, net::ERR_INSUFFICIENT_RESOURCES); |
| 456 | 468 |
| 457 const GURL& url = request->original_url(); | 469 const GURL& url = request->original_url(); |
| 458 #if defined(OS_CHROMEOS) | 470 #if defined(OS_CHROMEOS) |
| 459 // crosbug.com/26646. | 471 // crosbug.com/26646. |
| 460 VLOG(1) << "BeginDownload: " << request->url().spec(); | 472 VLOG(1) << "BeginDownload: " << request->url().spec(); |
| 461 #endif | 473 #endif |
| 462 const net::URLRequestContext* request_context = context->GetRequestContext(); | 474 const net::URLRequestContext* request_context = context->GetRequestContext(); |
| 463 request->set_referrer(MaybeStripReferrer(GURL(request->referrer())).spec()); | 475 request->set_referrer(MaybeStripReferrer(GURL(request->referrer())).spec()); |
| 464 request->set_context(request_context); | 476 request->set_context(request_context); |
| 465 int extra_load_flags = net::LOAD_IS_DOWNLOAD; | 477 int extra_load_flags = net::LOAD_IS_DOWNLOAD; |
| 466 if (prefer_cache) { | 478 if (prefer_cache) { |
| 467 // If there is upload data attached, only retrieve from cache because there | 479 // If there is upload data attached, only retrieve from cache because there |
| 468 // is no current mechanism to prompt the user for their consent for a | 480 // is no current mechanism to prompt the user for their consent for a |
| 469 // re-post. For GETs, try to retrieve data from the cache and skip | 481 // re-post. For GETs, try to retrieve data from the cache and skip |
| 470 // validating the entry if present. | 482 // validating the entry if present. |
| 471 if (request->get_upload() != NULL) | 483 if (request->get_upload() != NULL) |
| 472 extra_load_flags |= net::LOAD_ONLY_FROM_CACHE; | 484 extra_load_flags |= net::LOAD_ONLY_FROM_CACHE; |
| 473 else | 485 else |
| 474 extra_load_flags |= net::LOAD_PREFERRING_CACHE; | 486 extra_load_flags |= net::LOAD_PREFERRING_CACHE; |
| 475 } else { | 487 } else { |
| 476 extra_load_flags |= net::LOAD_DISABLE_CACHE; | 488 extra_load_flags |= net::LOAD_DISABLE_CACHE; |
| 477 } | 489 } |
| 478 request->set_load_flags(request->load_flags() | extra_load_flags); | 490 request->set_load_flags(request->load_flags() | extra_load_flags); |
| 479 // Check if the renderer is permitted to request the requested URL. | 491 // Check if the renderer is permitted to request the requested URL. |
| 480 if (!ChildProcessSecurityPolicyImpl::GetInstance()-> | 492 if (!ChildProcessSecurityPolicyImpl::GetInstance()-> |
| 481 CanRequestURL(child_id, url)) { | 493 CanRequestURL(child_id, url)) { |
| 482 VLOG(1) << "Denied unauthorized download request for " | 494 VLOG(1) << "Denied unauthorized download request for " |
| 483 << url.possibly_invalid_spec(); | 495 << url.possibly_invalid_spec(); |
| 484 return net::ERR_ACCESS_DENIED; | 496 return CallbackAndReturn(started_callback, net::ERR_ACCESS_DENIED); |
| 485 } | 497 } |
| 486 | 498 |
| 487 request_id_--; | 499 request_id_--; |
| 488 | 500 |
| 501 // From this point forward, the |DownloadResourceHandler| is responsible for |
| 502 // |started_callback|. |
| 489 scoped_refptr<ResourceHandler> handler( | 503 scoped_refptr<ResourceHandler> handler( |
| 490 CreateResourceHandlerForDownload(request.get(), context, child_id, | 504 CreateResourceHandlerForDownload(request.get(), context, child_id, |
| 491 route_id, request_id_, save_info, | 505 route_id, request_id_, save_info, |
| 492 started_callback)); | 506 started_callback)); |
| 493 | 507 |
| 494 if (!request_context->job_factory()->IsHandledURL(url)) { | 508 if (!request_context->job_factory()->IsHandledURL(url)) { |
| 495 VLOG(1) << "Download request for unsupported protocol: " | 509 VLOG(1) << "Download request for unsupported protocol: " |
| 496 << url.possibly_invalid_spec(); | 510 << url.possibly_invalid_spec(); |
| 497 return net::ERR_ACCESS_DENIED; | 511 return net::ERR_ACCESS_DENIED; |
| 498 } | 512 } |
| (...skipping 1741 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2240 return allow_cross_origin_auth_prompt_; | 2254 return allow_cross_origin_auth_prompt_; |
| 2241 } | 2255 } |
| 2242 | 2256 |
| 2243 bool ResourceDispatcherHostImpl::IsTransferredNavigation( | 2257 bool ResourceDispatcherHostImpl::IsTransferredNavigation( |
| 2244 const GlobalRequestID& transferred_request_id) const { | 2258 const GlobalRequestID& transferred_request_id) const { |
| 2245 return transferred_navigations_.find(transferred_request_id) != | 2259 return transferred_navigations_.find(transferred_request_id) != |
| 2246 transferred_navigations_.end(); | 2260 transferred_navigations_.end(); |
| 2247 } | 2261 } |
| 2248 | 2262 |
| 2249 } // namespace content | 2263 } // namespace content |
| OLD | NEW |