Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Side by Side Diff: content/browser/loader/resource_dispatcher_host_impl.cc

Issue 23851010: Modify ResourceMessageFilter so that it can support attaching to PluginProcessHost. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: sync Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 #include "ipc/ipc_message_start.h" 70 #include "ipc/ipc_message_start.h"
71 #include "net/base/auth.h" 71 #include "net/base/auth.h"
72 #include "net/base/load_flags.h" 72 #include "net/base/load_flags.h"
73 #include "net/base/mime_util.h" 73 #include "net/base/mime_util.h"
74 #include "net/base/net_errors.h" 74 #include "net/base/net_errors.h"
75 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" 75 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
76 #include "net/base/request_priority.h" 76 #include "net/base/request_priority.h"
77 #include "net/base/upload_data_stream.h" 77 #include "net/base/upload_data_stream.h"
78 #include "net/cert/cert_status_flags.h" 78 #include "net/cert/cert_status_flags.h"
79 #include "net/cookies/cookie_monster.h" 79 #include "net/cookies/cookie_monster.h"
80 #include "net/http/http_cache.h"
81 #include "net/http/http_response_headers.h" 80 #include "net/http/http_response_headers.h"
82 #include "net/http/http_response_info.h" 81 #include "net/http/http_response_info.h"
83 #include "net/http/http_transaction_factory.h"
84 #include "net/ssl/ssl_cert_request_info.h" 82 #include "net/ssl/ssl_cert_request_info.h"
85 #include "net/url_request/url_request.h" 83 #include "net/url_request/url_request.h"
86 #include "net/url_request/url_request_context.h" 84 #include "net/url_request/url_request_context.h"
87 #include "net/url_request/url_request_job_factory.h" 85 #include "net/url_request/url_request_job_factory.h"
88 #include "webkit/browser/appcache/appcache_interceptor.h" 86 #include "webkit/browser/appcache/appcache_interceptor.h"
89 #include "webkit/common/blob/blob_data.h" 87 #include "webkit/common/blob/blob_data.h"
90 #include "webkit/browser/blob/blob_data_handle.h" 88 #include "webkit/browser/blob/blob_data_handle.h"
91 #include "webkit/browser/blob/blob_storage_context.h" 89 #include "webkit/browser/blob/blob_storage_context.h"
92 #include "webkit/browser/blob/blob_url_request_job_factory.h" 90 #include "webkit/browser/blob/blob_url_request_job_factory.h"
93 #include "webkit/browser/fileapi/file_permission_policy.h" 91 #include "webkit/browser/fileapi/file_permission_policy.h"
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 filter_ = filter; 826 filter_ = filter;
829 bool handled = true; 827 bool handled = true;
830 IPC_BEGIN_MESSAGE_MAP_EX(ResourceDispatcherHostImpl, message, *message_was_ok) 828 IPC_BEGIN_MESSAGE_MAP_EX(ResourceDispatcherHostImpl, message, *message_was_ok)
831 IPC_MESSAGE_HANDLER(ResourceHostMsg_RequestResource, OnRequestResource) 829 IPC_MESSAGE_HANDLER(ResourceHostMsg_RequestResource, OnRequestResource)
832 IPC_MESSAGE_HANDLER_DELAY_REPLY(ResourceHostMsg_SyncLoad, OnSyncLoad) 830 IPC_MESSAGE_HANDLER_DELAY_REPLY(ResourceHostMsg_SyncLoad, OnSyncLoad)
833 IPC_MESSAGE_HANDLER(ResourceHostMsg_ReleaseDownloadedFile, 831 IPC_MESSAGE_HANDLER(ResourceHostMsg_ReleaseDownloadedFile,
834 OnReleaseDownloadedFile) 832 OnReleaseDownloadedFile)
835 IPC_MESSAGE_HANDLER(ResourceHostMsg_DataDownloaded_ACK, OnDataDownloadedACK) 833 IPC_MESSAGE_HANDLER(ResourceHostMsg_DataDownloaded_ACK, OnDataDownloadedACK)
836 IPC_MESSAGE_HANDLER(ResourceHostMsg_UploadProgress_ACK, OnUploadProgressACK) 834 IPC_MESSAGE_HANDLER(ResourceHostMsg_UploadProgress_ACK, OnUploadProgressACK)
837 IPC_MESSAGE_HANDLER(ResourceHostMsg_CancelRequest, OnCancelRequest) 835 IPC_MESSAGE_HANDLER(ResourceHostMsg_CancelRequest, OnCancelRequest)
838 IPC_MESSAGE_HANDLER(ViewHostMsg_DidLoadResourceFromMemoryCache,
839 OnDidLoadResourceFromMemoryCache)
840 IPC_MESSAGE_UNHANDLED(handled = false) 836 IPC_MESSAGE_UNHANDLED(handled = false)
841 IPC_END_MESSAGE_MAP_EX() 837 IPC_END_MESSAGE_MAP_EX()
842 838
843 if (!handled && IPC_MESSAGE_ID_CLASS(message.type()) == ResourceMsgStart) { 839 if (!handled && IPC_MESSAGE_ID_CLASS(message.type()) == ResourceMsgStart) {
844 PickleIterator iter(message); 840 PickleIterator iter(message);
845 int request_id = -1; 841 int request_id = -1;
846 bool ok = iter.ReadInt(&request_id); 842 bool ok = iter.ReadInt(&request_id);
847 DCHECK(ok); 843 DCHECK(ok);
848 GlobalRequestID id(filter_->child_id(), request_id); 844 GlobalRequestID id(filter_->child_id(), request_id);
849 DelegateMap::iterator it = delegate_map_.find(id); 845 DelegateMap::iterator it = delegate_map_.find(id);
850 if (it != delegate_map_.end()) { 846 if (it != delegate_map_.end()) {
851 ObserverList<ResourceMessageDelegate>::Iterator del_it(*it->second); 847 ObserverList<ResourceMessageDelegate>::Iterator del_it(*it->second);
852 ResourceMessageDelegate* delegate; 848 ResourceMessageDelegate* delegate;
853 while (!handled && (delegate = del_it.GetNext()) != NULL) { 849 while (!handled && (delegate = del_it.GetNext()) != NULL) {
854 handled = delegate->OnMessageReceived(message, message_was_ok); 850 handled = delegate->OnMessageReceived(message, message_was_ok);
855 } 851 }
856 } 852 }
857 } 853 }
858 854
859 if (message.type() == ViewHostMsg_DidLoadResourceFromMemoryCache::ID) {
860 // We just needed to peek at this message. We still want it to reach its
861 // normal destination.
862 handled = false;
863 }
864
865 filter_ = NULL; 855 filter_ = NULL;
866 return handled; 856 return handled;
867 } 857 }
868 858
869 void ResourceDispatcherHostImpl::OnRequestResource( 859 void ResourceDispatcherHostImpl::OnRequestResource(
870 const IPC::Message& message, 860 const IPC::Message& message,
871 int request_id, 861 int request_id,
872 const ResourceHostMsg_Request& request_data) { 862 const ResourceHostMsg_Request& request_data) {
873 BeginRequest(request_id, request_data, NULL, message.routing_id()); 863 BeginRequest(request_id, request_data, NULL, message.routing_id());
874 } 864 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 *deferred_loader->GetRequestInfo()); 915 *deferred_loader->GetRequestInfo());
926 pending_loaders_.erase(it); 916 pending_loaders_.erase(it);
927 } else { 917 } else {
928 RecordAction(UserMetricsAction("BadMessageTerminate_RDH")); 918 RecordAction(UserMetricsAction("BadMessageTerminate_RDH"));
929 filter_->BadMessageReceived(); 919 filter_->BadMessageReceived();
930 return; 920 return;
931 } 921 }
932 } 922 }
933 } 923 }
934 924
935 ResourceContext* resource_context = filter_->resource_context(); 925 ResourceContext* resource_context = NULL;
926 net::URLRequestContext* request_context = NULL;
927 filter_->GetContexts(request_data, &resource_context, &request_context);
936 // http://crbug.com/90971 928 // http://crbug.com/90971
937 CHECK(ContainsKey(active_resource_contexts_, resource_context)); 929 CHECK(ContainsKey(active_resource_contexts_, resource_context));
938 930
939 if (is_shutdown_ || 931 if (is_shutdown_ ||
940 !ShouldServiceRequest(process_type, child_id, request_data, 932 !ShouldServiceRequest(process_type, child_id, request_data,
941 filter_->file_system_context())) { 933 filter_->file_system_context())) {
942 AbortRequestBeforeItStarts(filter_, sync_result, request_id); 934 AbortRequestBeforeItStarts(filter_, sync_result, request_id);
943 return; 935 return;
944 } 936 }
945 937
(...skipping 23 matching lines...) Expand all
969 // Construct the request. 961 // Construct the request.
970 scoped_ptr<net::URLRequest> new_request; 962 scoped_ptr<net::URLRequest> new_request;
971 net::URLRequest* request; 963 net::URLRequest* request;
972 if (deferred_loader.get()) { 964 if (deferred_loader.get()) {
973 request = deferred_loader->request(); 965 request = deferred_loader->request();
974 966
975 // Give the ResourceLoader (or any of the ResourceHandlers held by it) a 967 // Give the ResourceLoader (or any of the ResourceHandlers held by it) a
976 // chance to reset some state before we complete the transfer. 968 // chance to reset some state before we complete the transfer.
977 deferred_loader->WillCompleteTransfer(); 969 deferred_loader->WillCompleteTransfer();
978 } else { 970 } else {
979 net::URLRequestContext* context = 971 new_request.reset(request_context->CreateRequest(request_data.url, NULL));
980 filter_->GetURLRequestContext(request_data.resource_type);
981 new_request.reset(context->CreateRequest(request_data.url, NULL));
982 request = new_request.get(); 972 request = new_request.get();
983 973
984 request->set_method(request_data.method); 974 request->set_method(request_data.method);
985 request->set_first_party_for_cookies(request_data.first_party_for_cookies); 975 request->set_first_party_for_cookies(request_data.first_party_for_cookies);
986 SetReferrerForRequest(request, referrer); 976 SetReferrerForRequest(request, referrer);
987 977
988 net::HttpRequestHeaders headers; 978 net::HttpRequestHeaders headers;
989 headers.AddHeadersFromString(request_data.headers); 979 headers.AddHeadersFromString(request_data.headers);
990 request->SetExtraRequestHeaders(headers); 980 request->SetExtraRequestHeaders(headers);
991 } 981 }
992 982
993 // TODO(darin): Do we really need all of these URLRequest setters in the 983 // TODO(darin): Do we really need all of these URLRequest setters in the
994 // transferred navigation case? 984 // transferred navigation case?
995 985
996 request->set_load_flags(load_flags); 986 request->set_load_flags(load_flags);
997 request->SetPriority(request_data.priority); 987 request->SetPriority(request_data.priority);
998 988
999 // Resolve elements from request_body and prepare upload data. 989 // Resolve elements from request_body and prepare upload data.
1000 if (request_data.request_body.get()) { 990 if (request_data.request_body.get()) {
991 webkit_blob::BlobStorageContext* blob_context = NULL;
992 if (filter_->blob_storage_context())
993 blob_context = filter_->blob_storage_context()->context(),
1001 request->set_upload(UploadDataStreamBuilder::Build( 994 request->set_upload(UploadDataStreamBuilder::Build(
1002 request_data.request_body.get(), 995 request_data.request_body.get(),
1003 filter_->blob_storage_context()->context(), 996 blob_context,
1004 filter_->file_system_context(), 997 filter_->file_system_context(),
1005 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE) 998 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)
1006 .get())); 999 .get()));
1007 } 1000 }
1008 1001
1009 bool allow_download = request_data.allow_download && 1002 bool allow_download = request_data.allow_download &&
1010 ResourceType::IsFrame(request_data.resource_type); 1003 ResourceType::IsFrame(request_data.resource_type);
1011 1004
1012 // Make extra info and read footer (contains request ID). 1005 // Make extra info and read footer (contains request ID).
1013 ResourceRequestInfoImpl* extra_info = 1006 ResourceRequestInfoImpl* extra_info =
(...skipping 29 matching lines...) Expand all
1043 1036
1044 // Have the appcache associate its extra info with the request. 1037 // Have the appcache associate its extra info with the request.
1045 appcache::AppCacheInterceptor::SetExtraRequestInfo( 1038 appcache::AppCacheInterceptor::SetExtraRequestInfo(
1046 request, filter_->appcache_service(), child_id, 1039 request, filter_->appcache_service(), child_id,
1047 request_data.appcache_host_id, request_data.resource_type); 1040 request_data.appcache_host_id, request_data.resource_type);
1048 1041
1049 // Construct the IPC resource handler. 1042 // Construct the IPC resource handler.
1050 scoped_ptr<ResourceHandler> handler; 1043 scoped_ptr<ResourceHandler> handler;
1051 if (sync_result) { 1044 if (sync_result) {
1052 handler.reset(new SyncResourceHandler( 1045 handler.reset(new SyncResourceHandler(
1053 filter_, request, sync_result, this)); 1046 filter_, resource_context, request, sync_result, this));
1054 } else { 1047 } else {
1055 handler.reset(new AsyncResourceHandler(filter_, request, this)); 1048 handler.reset(new AsyncResourceHandler(
1049 filter_, resource_context, request, this));
1056 } 1050 }
1057 1051
1058 // The RedirectToFileResourceHandler depends on being next in the chain. 1052 // The RedirectToFileResourceHandler depends on being next in the chain.
1059 if (request_data.download_to_file) { 1053 if (request_data.download_to_file) {
1060 handler.reset( 1054 handler.reset(
1061 new RedirectToFileResourceHandler(handler.Pass(), child_id, this)); 1055 new RedirectToFileResourceHandler(handler.Pass(), child_id, this));
1062 } 1056 }
1063 1057
1064 // Install a CrossSiteResourceHandler if this request is coming from a 1058 // Install a CrossSiteResourceHandler if this request is coming from a
1065 // RenderViewHost with a pending cross-site request. We only check this for 1059 // RenderViewHost with a pending cross-site request. We only check this for
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
1195 PAGE_TRANSITION_LINK, 1189 PAGE_TRANSITION_LINK,
1196 download, // is_download 1190 download, // is_download
1197 false, // is_stream 1191 false, // is_stream
1198 download, // allow_download 1192 download, // allow_download
1199 false, // has_user_gesture 1193 false, // has_user_gesture
1200 WebKit::WebReferrerPolicyDefault, 1194 WebKit::WebReferrerPolicyDefault,
1201 context, 1195 context,
1202 true); // is_async 1196 true); // is_async
1203 } 1197 }
1204 1198
1205
1206 void ResourceDispatcherHostImpl::OnDidLoadResourceFromMemoryCache(
1207 const GURL& url,
1208 const std::string& security_info,
1209 const std::string& http_method,
1210 const std::string& mime_type,
1211 ResourceType::Type resource_type) {
1212 if (!url.is_valid() || !url.SchemeIsHTTPOrHTTPS())
1213 return;
1214
1215 filter_->GetURLRequestContext(resource_type)->http_transaction_factory()->
1216 GetCache()->OnExternalCacheHit(url, http_method);
1217 }
1218
1219 void ResourceDispatcherHostImpl::OnRenderViewHostCreated( 1199 void ResourceDispatcherHostImpl::OnRenderViewHostCreated(
1220 int child_id, 1200 int child_id,
1221 int route_id) { 1201 int route_id) {
1222 scheduler_->OnClientCreated(child_id, route_id); 1202 scheduler_->OnClientCreated(child_id, route_id);
1223 } 1203 }
1224 1204
1225 void ResourceDispatcherHostImpl::OnRenderViewHostDeleted( 1205 void ResourceDispatcherHostImpl::OnRenderViewHostDeleted(
1226 int child_id, 1206 int child_id,
1227 int route_id) { 1207 int route_id) {
1228 scheduler_->OnClientDeleted(child_id, route_id); 1208 scheduler_->OnClientDeleted(child_id, route_id);
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after
1889 if ((load_flags & net::LOAD_REPORT_RAW_HEADERS) 1869 if ((load_flags & net::LOAD_REPORT_RAW_HEADERS)
1890 && !policy->CanReadRawCookies(child_id)) { 1870 && !policy->CanReadRawCookies(child_id)) {
1891 VLOG(1) << "Denied unauthorized request for raw headers"; 1871 VLOG(1) << "Denied unauthorized request for raw headers";
1892 load_flags &= ~net::LOAD_REPORT_RAW_HEADERS; 1872 load_flags &= ~net::LOAD_REPORT_RAW_HEADERS;
1893 } 1873 }
1894 1874
1895 return load_flags; 1875 return load_flags;
1896 } 1876 }
1897 1877
1898 } // namespace content 1878 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/resource_dispatcher_host_impl.h ('k') | content/browser/loader/resource_dispatcher_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698