| 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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 #include "content/browser/loader/sync_resource_handler.h" | 62 #include "content/browser/loader/sync_resource_handler.h" |
| 63 #include "content/browser/loader/throttling_resource_handler.h" | 63 #include "content/browser/loader/throttling_resource_handler.h" |
| 64 #include "content/browser/loader/upload_data_stream_builder.h" | 64 #include "content/browser/loader/upload_data_stream_builder.h" |
| 65 #include "content/browser/resource_context_impl.h" | 65 #include "content/browser/resource_context_impl.h" |
| 66 #include "content/browser/service_worker/foreign_fetch_request_handler.h" | 66 #include "content/browser/service_worker/foreign_fetch_request_handler.h" |
| 67 #include "content/browser/service_worker/link_header_support.h" | 67 #include "content/browser/service_worker/link_header_support.h" |
| 68 #include "content/browser/service_worker/service_worker_request_handler.h" | 68 #include "content/browser/service_worker/service_worker_request_handler.h" |
| 69 #include "content/browser/streams/stream.h" | 69 #include "content/browser/streams/stream.h" |
| 70 #include "content/browser/streams/stream_context.h" | 70 #include "content/browser/streams/stream_context.h" |
| 71 #include "content/browser/streams/stream_registry.h" | 71 #include "content/browser/streams/stream_registry.h" |
| 72 #include "content/browser/web_contents/web_contents_impl.h" | |
| 73 #include "content/common/navigation_params.h" | 72 #include "content/common/navigation_params.h" |
| 74 #include "content/common/net/url_request_service_worker_data.h" | 73 #include "content/common/net/url_request_service_worker_data.h" |
| 75 #include "content/common/resource_messages.h" | 74 #include "content/common/resource_messages.h" |
| 76 #include "content/common/resource_request.h" | 75 #include "content/common/resource_request.h" |
| 77 #include "content/common/resource_request_body_impl.h" | 76 #include "content/common/resource_request_body_impl.h" |
| 78 #include "content/common/resource_request_completion_status.h" | 77 #include "content/common/resource_request_completion_status.h" |
| 79 #include "content/common/site_isolation_policy.h" | 78 #include "content/common/site_isolation_policy.h" |
| 80 #include "content/common/ssl_status_serialization.h" | 79 #include "content/common/ssl_status_serialization.h" |
| 81 #include "content/common/view_messages.h" | 80 #include "content/common/view_messages.h" |
| 82 #include "content/public/browser/browser_thread.h" | 81 #include "content/public/browser/browser_thread.h" |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 ChildProcessSecurityPolicyImpl::GetInstance()->RevokeAllPermissionsForFile( | 355 ChildProcessSecurityPolicyImpl::GetInstance()->RevokeAllPermissionsForFile( |
| 357 child_id, path); | 356 child_id, path); |
| 358 } | 357 } |
| 359 | 358 |
| 360 int GetCertID(CertStore* cert_store, net::URLRequest* request, int child_id) { | 359 int GetCertID(CertStore* cert_store, net::URLRequest* request, int child_id) { |
| 361 if (request->ssl_info().cert.get()) | 360 if (request->ssl_info().cert.get()) |
| 362 return cert_store->StoreCert(request->ssl_info().cert.get(), child_id); | 361 return cert_store->StoreCert(request->ssl_info().cert.get(), child_id); |
| 363 return 0; | 362 return 0; |
| 364 } | 363 } |
| 365 | 364 |
| 366 void NotifyRedirectOnUI(int render_process_id, | |
| 367 int render_frame_host, | |
| 368 std::unique_ptr<ResourceRedirectDetails> details) { | |
| 369 RenderFrameHostImpl* host = | |
| 370 RenderFrameHostImpl::FromID(render_process_id, render_frame_host); | |
| 371 WebContentsImpl* web_contents = | |
| 372 static_cast<WebContentsImpl*>(WebContents::FromRenderFrameHost(host)); | |
| 373 if (!web_contents) | |
| 374 return; | |
| 375 web_contents->DidGetRedirectForResourceRequest(host, *details.get()); | |
| 376 } | |
| 377 | |
| 378 void NotifyResponseOnUI(int render_process_id, | |
| 379 int render_frame_host, | |
| 380 std::unique_ptr<ResourceRequestDetails> details) { | |
| 381 RenderFrameHostImpl* host = | |
| 382 RenderFrameHostImpl::FromID(render_process_id, render_frame_host); | |
| 383 WebContentsImpl* web_contents = | |
| 384 static_cast<WebContentsImpl*>(WebContents::FromRenderFrameHost(host)); | |
| 385 if (!web_contents) | |
| 386 return; | |
| 387 web_contents->DidGetResourceResponseStart(*details.get()); | |
| 388 } | |
| 389 | |
| 390 bool IsValidatedSCT( | 365 bool IsValidatedSCT( |
| 391 const net::SignedCertificateTimestampAndStatus& sct_status) { | 366 const net::SignedCertificateTimestampAndStatus& sct_status) { |
| 392 return sct_status.status == net::ct::SCT_STATUS_OK; | 367 return sct_status.status == net::ct::SCT_STATUS_OK; |
| 393 } | 368 } |
| 394 | 369 |
| 395 storage::BlobStorageContext* GetBlobStorageContext( | 370 storage::BlobStorageContext* GetBlobStorageContext( |
| 396 ChromeBlobStorageContext* blob_storage_context) { | 371 ChromeBlobStorageContext* blob_storage_context) { |
| 397 if (!blob_storage_context) | 372 if (!blob_storage_context) |
| 398 return NULL; | 373 return NULL; |
| 399 return blob_storage_context->context(); | 374 return blob_storage_context->context(); |
| (...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 936 // downloads; they aren't really associated with the Webcontents. | 911 // downloads; they aren't really associated with the Webcontents. |
| 937 // Note that not all downloads are known before content sniffing. | 912 // Note that not all downloads are known before content sniffing. |
| 938 if (info->IsDownload()) | 913 if (info->IsDownload()) |
| 939 return; | 914 return; |
| 940 | 915 |
| 941 // Notify the observers on the UI thread. | 916 // Notify the observers on the UI thread. |
| 942 std::unique_ptr<ResourceRedirectDetails> detail(new ResourceRedirectDetails( | 917 std::unique_ptr<ResourceRedirectDetails> detail(new ResourceRedirectDetails( |
| 943 loader->request(), | 918 loader->request(), |
| 944 GetCertID(GetCertStore(), loader->request(), info->GetChildID()), | 919 GetCertID(GetCertStore(), loader->request(), info->GetChildID()), |
| 945 new_url)); | 920 new_url)); |
| 946 BrowserThread::PostTask( | 921 loader_delegate_->DidGetRedirectForResourceRequest( |
| 947 BrowserThread::UI, FROM_HERE, | 922 render_process_id, render_frame_host, std::move(detail)); |
| 948 base::Bind( | |
| 949 &NotifyRedirectOnUI, | |
| 950 render_process_id, render_frame_host, base::Passed(&detail))); | |
| 951 } | 923 } |
| 952 | 924 |
| 953 void ResourceDispatcherHostImpl::DidReceiveResponse(ResourceLoader* loader) { | 925 void ResourceDispatcherHostImpl::DidReceiveResponse(ResourceLoader* loader) { |
| 954 ResourceRequestInfoImpl* info = loader->GetRequestInfo(); | 926 ResourceRequestInfoImpl* info = loader->GetRequestInfo(); |
| 955 net::URLRequest* request = loader->request(); | 927 net::URLRequest* request = loader->request(); |
| 956 if (request->was_fetched_via_proxy() && | 928 if (request->was_fetched_via_proxy() && |
| 957 request->was_fetched_via_spdy() && | 929 request->was_fetched_via_spdy() && |
| 958 request->url().SchemeIs(url::kHttpScheme)) { | 930 request->url().SchemeIs(url::kHttpScheme)) { |
| 959 scheduler_->OnReceivedSpdyProxiedHttpResponse( | 931 scheduler_->OnReceivedSpdyProxiedHttpResponse( |
| 960 info->GetChildID(), info->GetRouteID()); | 932 info->GetChildID(), info->GetRouteID()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 974 | 946 |
| 975 // Don't notify WebContents observers for requests known to be | 947 // Don't notify WebContents observers for requests known to be |
| 976 // downloads; they aren't really associated with the Webcontents. | 948 // downloads; they aren't really associated with the Webcontents. |
| 977 // Note that not all downloads are known before content sniffing. | 949 // Note that not all downloads are known before content sniffing. |
| 978 if (info->IsDownload()) | 950 if (info->IsDownload()) |
| 979 return; | 951 return; |
| 980 | 952 |
| 981 // Notify the observers on the UI thread. | 953 // Notify the observers on the UI thread. |
| 982 std::unique_ptr<ResourceRequestDetails> detail(new ResourceRequestDetails( | 954 std::unique_ptr<ResourceRequestDetails> detail(new ResourceRequestDetails( |
| 983 request, GetCertID(GetCertStore(), request, info->GetChildID()))); | 955 request, GetCertID(GetCertStore(), request, info->GetChildID()))); |
| 984 BrowserThread::PostTask( | 956 loader_delegate_->DidGetResourceResponseStart( |
| 985 BrowserThread::UI, FROM_HERE, | 957 render_process_id, render_frame_host, std::move(detail)); |
| 986 base::Bind( | |
| 987 &NotifyResponseOnUI, | |
| 988 render_process_id, render_frame_host, base::Passed(&detail))); | |
| 989 } | 958 } |
| 990 | 959 |
| 991 void ResourceDispatcherHostImpl::DidFinishLoading(ResourceLoader* loader) { | 960 void ResourceDispatcherHostImpl::DidFinishLoading(ResourceLoader* loader) { |
| 992 ResourceRequestInfoImpl* info = loader->GetRequestInfo(); | 961 ResourceRequestInfoImpl* info = loader->GetRequestInfo(); |
| 993 | 962 |
| 994 // Record final result of all resource loads. | 963 // Record final result of all resource loads. |
| 995 if (info->GetResourceType() == RESOURCE_TYPE_MAIN_FRAME) { | 964 if (info->GetResourceType() == RESOURCE_TYPE_MAIN_FRAME) { |
| 996 // This enumeration has "3" appended to its name to distinguish it from | 965 // This enumeration has "3" appended to its name to distinguish it from |
| 997 // older versions. | 966 // older versions. |
| 998 UMA_HISTOGRAM_SPARSE_SLOWLY( | 967 UMA_HISTOGRAM_SPARSE_SLOWLY( |
| (...skipping 1392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2391 tracked_objects::ScopedTracker tracking_profile( | 2360 tracked_objects::ScopedTracker tracking_profile( |
| 2392 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 2361 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 2393 "456331 ResourceDispatcherHostImpl::StartLoading")); | 2362 "456331 ResourceDispatcherHostImpl::StartLoading")); |
| 2394 | 2363 |
| 2395 ResourceLoader* loader_ptr = loader.get(); | 2364 ResourceLoader* loader_ptr = loader.get(); |
| 2396 pending_loaders_[info->GetGlobalRequestID()] = std::move(loader); | 2365 pending_loaders_[info->GetGlobalRequestID()] = std::move(loader); |
| 2397 | 2366 |
| 2398 loader_ptr->StartRequest(); | 2367 loader_ptr->StartRequest(); |
| 2399 } | 2368 } |
| 2400 | 2369 |
| 2401 void ResourceDispatcherHostImpl::OnUserGesture(WebContentsImpl* contents) { | 2370 void ResourceDispatcherHostImpl::OnUserGesture() { |
| 2402 last_user_gesture_time_ = TimeTicks::Now(); | 2371 last_user_gesture_time_ = TimeTicks::Now(); |
| 2403 } | 2372 } |
| 2404 | 2373 |
| 2405 net::URLRequest* ResourceDispatcherHostImpl::GetURLRequest( | 2374 net::URLRequest* ResourceDispatcherHostImpl::GetURLRequest( |
| 2406 const GlobalRequestID& id) { | 2375 const GlobalRequestID& id) { |
| 2407 ResourceLoader* loader = GetLoader(id); | 2376 ResourceLoader* loader = GetLoader(id); |
| 2408 if (!loader) | 2377 if (!loader) |
| 2409 return NULL; | 2378 return NULL; |
| 2410 | 2379 |
| 2411 return loader->request(); | 2380 return loader->request(); |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2636 ssl.cert_id = GetCertStore()->StoreCert(ssl_info.cert.get(), child_id); | 2605 ssl.cert_id = GetCertStore()->StoreCert(ssl_info.cert.get(), child_id); |
| 2637 response->head.security_info = SerializeSecurityInfo(ssl); | 2606 response->head.security_info = SerializeSecurityInfo(ssl); |
| 2638 } | 2607 } |
| 2639 | 2608 |
| 2640 CertStore* ResourceDispatcherHostImpl::GetCertStore() { | 2609 CertStore* ResourceDispatcherHostImpl::GetCertStore() { |
| 2641 return cert_store_for_testing_ ? cert_store_for_testing_ | 2610 return cert_store_for_testing_ ? cert_store_for_testing_ |
| 2642 : CertStore::GetInstance(); | 2611 : CertStore::GetInstance(); |
| 2643 } | 2612 } |
| 2644 | 2613 |
| 2645 } // namespace content | 2614 } // namespace content |
| OLD | NEW |