| 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/loader/resource_dispatcher_host_impl.h" | 7 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| 8 | 8 |
| 9 #include <stddef.h> | 9 #include <stddef.h> |
| 10 | 10 |
| (...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 738 CHECK_NE(info->GetContext(), context); | 738 CHECK_NE(info->GetContext(), context); |
| 739 } | 739 } |
| 740 } | 740 } |
| 741 } | 741 } |
| 742 | 742 |
| 743 DownloadInterruptReason ResourceDispatcherHostImpl::BeginDownload( | 743 DownloadInterruptReason ResourceDispatcherHostImpl::BeginDownload( |
| 744 std::unique_ptr<net::URLRequest> request, | 744 std::unique_ptr<net::URLRequest> request, |
| 745 const Referrer& referrer, | 745 const Referrer& referrer, |
| 746 bool is_content_initiated, | 746 bool is_content_initiated, |
| 747 ResourceContext* context, | 747 ResourceContext* context, |
| 748 int child_id, | 748 int render_process_id, |
| 749 int render_view_route_id, | 749 int render_view_route_id, |
| 750 int render_frame_route_id, | 750 int render_frame_route_id, |
| 751 bool do_not_prompt_for_login) { | 751 bool do_not_prompt_for_login) { |
| 752 if (is_shutdown_) | 752 if (is_shutdown_) |
| 753 return DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN; | 753 return DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN; |
| 754 | 754 |
| 755 const GURL& url = request->original_url(); | 755 const GURL& url = request->original_url(); |
| 756 | 756 |
| 757 // http://crbug.com/90971 | 757 // http://crbug.com/90971 |
| 758 char url_buf[128]; | 758 char url_buf[128]; |
| 759 base::strlcpy(url_buf, url.spec().c_str(), arraysize(url_buf)); | 759 base::strlcpy(url_buf, url.spec().c_str(), arraysize(url_buf)); |
| 760 base::debug::Alias(url_buf); | 760 base::debug::Alias(url_buf); |
| 761 CHECK(ContainsKey(active_resource_contexts_, context)); | 761 CHECK(ContainsKey(active_resource_contexts_, context)); |
| 762 | 762 |
| 763 SetReferrerForRequest(request.get(), referrer); | 763 SetReferrerForRequest(request.get(), referrer); |
| 764 | 764 |
| 765 // We treat a download as a main frame load, and thus update the policy URL on | 765 // We treat a download as a main frame load, and thus update the policy URL on |
| 766 // redirects. | 766 // redirects. |
| 767 // | 767 // |
| 768 // TODO(davidben): Is this correct? If this came from a | 768 // TODO(davidben): Is this correct? If this came from a |
| 769 // ViewHostMsg_DownloadUrl in a frame, should it have first-party URL set | 769 // ViewHostMsg_DownloadUrl in a frame, should it have first-party URL set |
| 770 // appropriately? | 770 // appropriately? |
| 771 request->set_first_party_url_policy( | 771 request->set_first_party_url_policy( |
| 772 net::URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT); | 772 net::URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT); |
| 773 | 773 |
| 774 // Check if the renderer is permitted to request the requested URL. | 774 // Check if the renderer is permitted to request the requested URL. |
| 775 if (!ChildProcessSecurityPolicyImpl::GetInstance()-> | 775 if (!ChildProcessSecurityPolicyImpl::GetInstance()-> |
| 776 CanRequestURL(child_id, url)) { | 776 CanRequestURL(render_process_id, url)) { |
| 777 DVLOG(1) << "Denied unauthorized download request for " | 777 DVLOG(1) << "Denied unauthorized download request for " |
| 778 << url.possibly_invalid_spec(); | 778 << url.possibly_invalid_spec(); |
| 779 return DOWNLOAD_INTERRUPT_REASON_NETWORK_INVALID_REQUEST; | 779 return DOWNLOAD_INTERRUPT_REASON_NETWORK_INVALID_REQUEST; |
| 780 } | 780 } |
| 781 | 781 |
| 782 request_id_--; | 782 request_id_--; |
| 783 | 783 |
| 784 const net::URLRequestContext* request_context = request->context(); | 784 const net::URLRequestContext* request_context = request->context(); |
| 785 if (!request_context->job_factory()->IsHandledURL(url)) { | 785 if (!request_context->job_factory()->IsHandledURL(url)) { |
| 786 DVLOG(1) << "Download request for unsupported protocol: " | 786 DVLOG(1) << "Download request for unsupported protocol: " |
| 787 << url.possibly_invalid_spec(); | 787 << url.possibly_invalid_spec(); |
| 788 return DOWNLOAD_INTERRUPT_REASON_NETWORK_INVALID_REQUEST; | 788 return DOWNLOAD_INTERRUPT_REASON_NETWORK_INVALID_REQUEST; |
| 789 } | 789 } |
| 790 | 790 |
| 791 ResourceRequestInfoImpl* extra_info = | 791 ResourceRequestInfoImpl* extra_info = |
| 792 CreateRequestInfo(child_id, render_view_route_id, | 792 CreateRequestInfo(render_process_id, render_view_route_id, |
| 793 render_frame_route_id, true, context); | 793 render_frame_route_id, true, context); |
| 794 extra_info->set_do_not_prompt_for_login(do_not_prompt_for_login); | 794 extra_info->set_do_not_prompt_for_login(do_not_prompt_for_login); |
| 795 extra_info->AssociateWithRequest(request.get()); // Request takes ownership. | 795 extra_info->AssociateWithRequest(request.get()); // Request takes ownership. |
| 796 | 796 |
| 797 if (request->url().SchemeIs(url::kBlobScheme) && | 797 if (request->url().SchemeIs(url::kBlobScheme) && |
| 798 !storage::BlobProtocolHandler::GetRequestBlobDataHandle(request.get())) { | 798 !storage::BlobProtocolHandler::GetRequestBlobDataHandle(request.get())) { |
| 799 ChromeBlobStorageContext* blob_context = | 799 ChromeBlobStorageContext* blob_context = |
| 800 GetChromeBlobStorageContextForResourceContext(context); | 800 GetChromeBlobStorageContextForResourceContext(context); |
| 801 storage::BlobProtocolHandler::SetRequestedBlobDataHandle( | 801 storage::BlobProtocolHandler::SetRequestedBlobDataHandle( |
| 802 request.get(), | 802 request.get(), |
| (...skipping 1885 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2688 ssl.cert_id = GetCertStore()->StoreCert(ssl_info.cert.get(), child_id); | 2688 ssl.cert_id = GetCertStore()->StoreCert(ssl_info.cert.get(), child_id); |
| 2689 response->head.security_info = SerializeSecurityInfo(ssl); | 2689 response->head.security_info = SerializeSecurityInfo(ssl); |
| 2690 } | 2690 } |
| 2691 | 2691 |
| 2692 CertStore* ResourceDispatcherHostImpl::GetCertStore() { | 2692 CertStore* ResourceDispatcherHostImpl::GetCertStore() { |
| 2693 return cert_store_for_testing_ ? cert_store_for_testing_ | 2693 return cert_store_for_testing_ ? cert_store_for_testing_ |
| 2694 : CertStore::GetInstance(); | 2694 : CertStore::GetInstance(); |
| 2695 } | 2695 } |
| 2696 | 2696 |
| 2697 } // namespace content | 2697 } // namespace content |
| OLD | NEW |