| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "chrome/browser/renderer_host/resource_dispatcher_host.h" | 7 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/message_loop.h" | 11 #include "base/message_loop.h" |
| 12 #include "base/scoped_ptr.h" | 12 #include "base/scoped_ptr.h" |
| 13 #include "base/time.h" | 13 #include "base/time.h" |
| 14 #include "chrome/browser/cert_store.h" | 14 #include "chrome/browser/cert_store.h" |
| 15 #include "chrome/browser/cross_site_request_manager.h" | 15 #include "chrome/browser/cross_site_request_manager.h" |
| 16 #include "chrome/browser/download/download_file.h" | 16 #include "chrome/browser/download/download_file.h" |
| 17 #include "chrome/browser/download/download_manager.h" | 17 #include "chrome/browser/download/download_manager.h" |
| 18 #include "chrome/browser/download/download_request_manager.h" | 18 #include "chrome/browser/download/download_request_manager.h" |
| 19 #include "chrome/browser/download/save_file_manager.h" | 19 #include "chrome/browser/download/save_file_manager.h" |
| 20 #include "chrome/browser/plugin_service.h" | 20 #include "chrome/browser/plugin_service.h" |
| 21 #include "chrome/browser/renderer_host/async_resource_handler.h" | 21 #include "chrome/browser/renderer_host/async_resource_handler.h" |
| 22 #include "chrome/browser/renderer_host/buffered_resource_handler.h" | 22 #include "chrome/browser/renderer_host/buffered_resource_handler.h" |
| 23 #include "chrome/browser/renderer_host/cross_site_resource_handler.h" | 23 #include "chrome/browser/renderer_host/cross_site_resource_handler.h" |
| 24 #include "chrome/browser/renderer_host/download_resource_handler.h" | 24 #include "chrome/browser/renderer_host/download_resource_handler.h" |
| 25 #include "chrome/browser/renderer_host/media_resource_handler.h" |
| 25 #include "chrome/browser/renderer_host/render_view_host.h" | 26 #include "chrome/browser/renderer_host/render_view_host.h" |
| 26 #include "chrome/browser/renderer_host/renderer_security_policy.h" | 27 #include "chrome/browser/renderer_host/renderer_security_policy.h" |
| 27 #include "chrome/browser/renderer_host/resource_request_details.h" | 28 #include "chrome/browser/renderer_host/resource_request_details.h" |
| 28 #include "chrome/browser/renderer_host/safe_browsing_resource_handler.h" | 29 #include "chrome/browser/renderer_host/safe_browsing_resource_handler.h" |
| 29 #include "chrome/browser/renderer_host/save_file_resource_handler.h" | 30 #include "chrome/browser/renderer_host/save_file_resource_handler.h" |
| 30 #include "chrome/browser/renderer_host/sync_resource_handler.h" | 31 #include "chrome/browser/renderer_host/sync_resource_handler.h" |
| 31 #include "chrome/browser/tab_contents/tab_util.h" | 32 #include "chrome/browser/tab_contents/tab_util.h" |
| 32 #include "chrome/browser/tab_contents/web_contents.h" | 33 #include "chrome/browser/tab_contents/web_contents.h" |
| 33 #include "chrome/common/notification_service.h" | 34 #include "chrome/common/notification_service.h" |
| 34 #include "chrome/common/render_messages.h" | 35 #include "chrome/common/render_messages.h" |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 scoped_refptr<ResourceHandler> handler; | 242 scoped_refptr<ResourceHandler> handler; |
| 242 if (sync_result) { | 243 if (sync_result) { |
| 243 handler = new SyncResourceHandler(receiver, request_data.url, sync_result); | 244 handler = new SyncResourceHandler(receiver, request_data.url, sync_result); |
| 244 } else { | 245 } else { |
| 245 handler = new AsyncResourceHandler(receiver, | 246 handler = new AsyncResourceHandler(receiver, |
| 246 process_id, | 247 process_id, |
| 247 route_id, | 248 route_id, |
| 248 process_handle, | 249 process_handle, |
| 249 request_data.url, | 250 request_data.url, |
| 250 this); | 251 this); |
| 252 // If the resource type is ResourceType::MEDIA and LOAD_ENABLE_DOWNLOAD_FILE |
| 253 // is enabled we insert a media resource handler. |
| 254 if (request_data.resource_type == ResourceType::MEDIA && |
| 255 (request_data.load_flags & net::LOAD_ENABLE_DOWNLOAD_FILE)) { |
| 256 handler = new MediaResourceHandler(handler, |
| 257 receiver, |
| 258 process_id, |
| 259 route_id, |
| 260 process_handle, |
| 261 this); |
| 262 } |
| 251 } | 263 } |
| 252 | 264 |
| 253 if (HandleExternalProtocol(request_id, process_id, route_id, | 265 if (HandleExternalProtocol(request_id, process_id, route_id, |
| 254 request_data.url, request_data.resource_type, | 266 request_data.url, request_data.resource_type, |
| 255 handler)) { | 267 handler)) { |
| 256 return; | 268 return; |
| 257 } | 269 } |
| 258 | 270 |
| 259 // Construct the request. | 271 // Construct the request. |
| 260 URLRequest* request = new URLRequest(request_data.url, this); | 272 URLRequest* request = new URLRequest(request_data.url, this); |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 506 if (info->pending_data_count == kMaxPendingDataMessages) { | 518 if (info->pending_data_count == kMaxPendingDataMessages) { |
| 507 // Decrement the pending data count one more time because we also | 519 // Decrement the pending data count one more time because we also |
| 508 // incremented it before pausing the request. | 520 // incremented it before pausing the request. |
| 509 info->pending_data_count--; | 521 info->pending_data_count--; |
| 510 | 522 |
| 511 // Resume the request. | 523 // Resume the request. |
| 512 PauseRequest(process_id, request_id, false); | 524 PauseRequest(process_id, request_id, false); |
| 513 } | 525 } |
| 514 } | 526 } |
| 515 | 527 |
| 528 void ResourceDispatcherHost::OnDownloadProgressACK(int process_id, |
| 529 int request_id) { |
| 530 // TODO(hclam): do something to help rate limiting the message. |
| 531 } |
| 532 |
| 516 void ResourceDispatcherHost::OnUploadProgressACK(int process_id, | 533 void ResourceDispatcherHost::OnUploadProgressACK(int process_id, |
| 517 int request_id) { | 534 int request_id) { |
| 518 PendingRequestList::iterator i = pending_requests_.find( | 535 PendingRequestList::iterator i = pending_requests_.find( |
| 519 GlobalRequestID(process_id, request_id)); | 536 GlobalRequestID(process_id, request_id)); |
| 520 if (i == pending_requests_.end()) | 537 if (i == pending_requests_.end()) |
| 521 return; | 538 return; |
| 522 | 539 |
| 523 ExtraRequestInfo* info = ExtraInfoForRequest(i->second); | 540 ExtraRequestInfo* info = ExtraInfoForRequest(i->second); |
| 524 info->waiting_for_upload_progress_ack = false; | 541 info->waiting_for_upload_progress_ack = false; |
| 525 } | 542 } |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 804 | 821 |
| 805 response->response_head.status = request->status(); | 822 response->response_head.status = request->status(); |
| 806 response->response_head.request_time = request->request_time(); | 823 response->response_head.request_time = request->request_time(); |
| 807 response->response_head.response_time = request->response_time(); | 824 response->response_head.response_time = request->response_time(); |
| 808 response->response_head.headers = request->response_headers(); | 825 response->response_head.headers = request->response_headers(); |
| 809 request->GetCharset(&response->response_head.charset); | 826 request->GetCharset(&response->response_head.charset); |
| 810 response->response_head.filter_policy = info->filter_policy; | 827 response->response_head.filter_policy = info->filter_policy; |
| 811 response->response_head.content_length = request->GetExpectedContentSize(); | 828 response->response_head.content_length = request->GetExpectedContentSize(); |
| 812 request->GetMimeType(&response->response_head.mime_type); | 829 request->GetMimeType(&response->response_head.mime_type); |
| 813 | 830 |
| 831 // Make sure we don't get a file handle if LOAD_ENABLE_FILE is not set. |
| 832 DCHECK((request->load_flags() & net::LOAD_ENABLE_DOWNLOAD_FILE) || |
| 833 request->response_data_file() == base::kInvalidPlatformFileValue); |
| 834 #if defined(OS_POSIX) |
| 835 response->response_head.response_data_file.fd = request->response_data_file(); |
| 836 #elif defined(OS_WIN) |
| 837 response->response_head.response_data_file = request->response_data_file(); |
| 838 #endif |
| 839 |
| 814 if (request->ssl_info().cert) { | 840 if (request->ssl_info().cert) { |
| 815 int cert_id = | 841 int cert_id = |
| 816 CertStore::GetSharedInstance()->StoreCert( | 842 CertStore::GetSharedInstance()->StoreCert( |
| 817 request->ssl_info().cert, | 843 request->ssl_info().cert, |
| 818 info->process_id); | 844 info->process_id); |
| 819 int cert_status = request->ssl_info().cert_status; | 845 int cert_status = request->ssl_info().cert_status; |
| 820 // EV certificate verification could be expensive. We don't want to spend | 846 // EV certificate verification could be expensive. We don't want to spend |
| 821 // time performing EV certificate verification on all resources because | 847 // time performing EV certificate verification on all resources because |
| 822 // EV status is irrelevant to sub-frames and sub-resources. So we call | 848 // EV status is irrelevant to sub-frames and sub-resources. So we call |
| 823 // IsEV here rather than in the network layer because the network layer | 849 // IsEV here rather than in the network layer because the network layer |
| (...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1425 IncrementOutstandingRequestsMemoryCost(-1 * info->memory_cost, | 1451 IncrementOutstandingRequestsMemoryCost(-1 * info->memory_cost, |
| 1426 info->process_id); | 1452 info->process_id); |
| 1427 if (cancel_requests) | 1453 if (cancel_requests) |
| 1428 delete req_iter->url_request; | 1454 delete req_iter->url_request; |
| 1429 else | 1455 else |
| 1430 BeginRequestInternal(req_iter->url_request, req_iter->mixed_content); | 1456 BeginRequestInternal(req_iter->url_request, req_iter->mixed_content); |
| 1431 } | 1457 } |
| 1432 | 1458 |
| 1433 delete requests; | 1459 delete requests; |
| 1434 } | 1460 } |
| OLD | NEW |