| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 #include "chrome/browser/renderer_host/async_resource_handler.h" | 34 #include "chrome/browser/renderer_host/async_resource_handler.h" |
| 35 #include "chrome/browser/renderer_host/buffered_resource_handler.h" | 35 #include "chrome/browser/renderer_host/buffered_resource_handler.h" |
| 36 #include "chrome/browser/renderer_host/cross_site_resource_handler.h" | 36 #include "chrome/browser/renderer_host/cross_site_resource_handler.h" |
| 37 #include "chrome/browser/renderer_host/download_resource_handler.h" | 37 #include "chrome/browser/renderer_host/download_resource_handler.h" |
| 38 #include "chrome/browser/renderer_host/global_request_id.h" | 38 #include "chrome/browser/renderer_host/global_request_id.h" |
| 39 #include "chrome/browser/renderer_host/redirect_to_file_resource_handler.h" | 39 #include "chrome/browser/renderer_host/redirect_to_file_resource_handler.h" |
| 40 #include "chrome/browser/renderer_host/render_view_host.h" | 40 #include "chrome/browser/renderer_host/render_view_host.h" |
| 41 #include "chrome/browser/renderer_host/render_view_host_delegate.h" | 41 #include "chrome/browser/renderer_host/render_view_host_delegate.h" |
| 42 #include "chrome/browser/renderer_host/render_view_host_notification_task.h" | 42 #include "chrome/browser/renderer_host/render_view_host_notification_task.h" |
| 43 #include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h" | 43 #include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h" |
| 44 #include "chrome/browser/renderer_host/resource_message_filter.h" |
| 44 #include "chrome/browser/renderer_host/resource_queue.h" | 45 #include "chrome/browser/renderer_host/resource_queue.h" |
| 45 #include "chrome/browser/renderer_host/resource_request_details.h" | 46 #include "chrome/browser/renderer_host/resource_request_details.h" |
| 46 #include "chrome/browser/renderer_host/safe_browsing_resource_handler.h" | 47 #include "chrome/browser/renderer_host/safe_browsing_resource_handler.h" |
| 47 #include "chrome/browser/renderer_host/save_file_resource_handler.h" | 48 #include "chrome/browser/renderer_host/save_file_resource_handler.h" |
| 48 #include "chrome/browser/renderer_host/sync_resource_handler.h" | 49 #include "chrome/browser/renderer_host/sync_resource_handler.h" |
| 49 #include "chrome/browser/safe_browsing/safe_browsing_service.h" | 50 #include "chrome/browser/safe_browsing/safe_browsing_service.h" |
| 50 #include "chrome/browser/ssl/ssl_client_auth_handler.h" | 51 #include "chrome/browser/ssl/ssl_client_auth_handler.h" |
| 51 #include "chrome/browser/ssl/ssl_manager.h" | 52 #include "chrome/browser/ssl/ssl_manager.h" |
| 52 #include "chrome/browser/ui/login/login_prompt.h" | 53 #include "chrome/browser/ui/login/login_prompt.h" |
| 53 #include "chrome/browser/worker_host/worker_service.h" | 54 #include "chrome/browser/worker_host/worker_service.h" |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 std::vector<int> GetAllNetErrorCodes() { | 188 std::vector<int> GetAllNetErrorCodes() { |
| 188 std::vector<int> all_error_codes; | 189 std::vector<int> all_error_codes; |
| 189 #define NET_ERROR(label, value) all_error_codes.push_back(-(value)); | 190 #define NET_ERROR(label, value) all_error_codes.push_back(-(value)); |
| 190 #include "net/base/net_error_list.h" | 191 #include "net/base/net_error_list.h" |
| 191 #undef NET_ERROR | 192 #undef NET_ERROR |
| 192 return all_error_codes; | 193 return all_error_codes; |
| 193 } | 194 } |
| 194 | 195 |
| 195 } // namespace | 196 } // namespace |
| 196 | 197 |
| 197 ResourceDispatcherHost::Receiver::Receiver(ChildProcessInfo::ProcessType type, | |
| 198 int child_id) | |
| 199 : ChildProcessInfo(type, child_id) { | |
| 200 } | |
| 201 | |
| 202 ResourceDispatcherHost::Receiver::~Receiver() { | |
| 203 } | |
| 204 | |
| 205 ResourceDispatcherHost::ResourceDispatcherHost() | 198 ResourceDispatcherHost::ResourceDispatcherHost() |
| 206 : ALLOW_THIS_IN_INITIALIZER_LIST( | 199 : ALLOW_THIS_IN_INITIALIZER_LIST( |
| 207 download_file_manager_(new DownloadFileManager(this))), | 200 download_file_manager_(new DownloadFileManager(this))), |
| 208 download_request_limiter_(new DownloadRequestLimiter()), | 201 download_request_limiter_(new DownloadRequestLimiter()), |
| 209 ALLOW_THIS_IN_INITIALIZER_LIST( | 202 ALLOW_THIS_IN_INITIALIZER_LIST( |
| 210 save_file_manager_(new SaveFileManager(this))), | 203 save_file_manager_(new SaveFileManager(this))), |
| 211 user_script_listener_(new UserScriptListener(&resource_queue_)), | 204 user_script_listener_(new UserScriptListener(&resource_queue_)), |
| 212 safe_browsing_(SafeBrowsingService::CreateSafeBrowsingService()), | 205 safe_browsing_(SafeBrowsingService::CreateSafeBrowsingService()), |
| 213 webkit_thread_(new WebKitThread), | 206 webkit_thread_(new WebKitThread), |
| 214 request_id_(-1), | 207 request_id_(-1), |
| 215 ALLOW_THIS_IN_INITIALIZER_LIST(method_runner_(this)), | 208 ALLOW_THIS_IN_INITIALIZER_LIST(method_runner_(this)), |
| 216 is_shutdown_(false), | 209 is_shutdown_(false), |
| 217 max_outstanding_requests_cost_per_process_( | 210 max_outstanding_requests_cost_per_process_( |
| 218 kMaxOutstandingRequestsCostPerProcess), | 211 kMaxOutstandingRequestsCostPerProcess), |
| 219 receiver_(NULL) { | 212 filter_(NULL) { |
| 220 ResourceQueue::DelegateSet resource_queue_delegates; | 213 ResourceQueue::DelegateSet resource_queue_delegates; |
| 221 resource_queue_delegates.insert(user_script_listener_.get()); | 214 resource_queue_delegates.insert(user_script_listener_.get()); |
| 222 resource_queue_.Initialize(resource_queue_delegates); | 215 resource_queue_.Initialize(resource_queue_delegates); |
| 223 } | 216 } |
| 224 | 217 |
| 225 ResourceDispatcherHost::~ResourceDispatcherHost() { | 218 ResourceDispatcherHost::~ResourceDispatcherHost() { |
| 226 AsyncResourceHandler::GlobalCleanup(); | 219 AsyncResourceHandler::GlobalCleanup(); |
| 227 STLDeleteValues(&pending_requests_); | 220 STLDeleteValues(&pending_requests_); |
| 228 | 221 |
| 229 user_script_listener_->ShutdownMainThread(); | 222 user_script_listener_->ShutdownMainThread(); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 &ExternalProtocolHandler::LaunchUrl, url, child_id, route_id)); | 285 &ExternalProtocolHandler::LaunchUrl, url, child_id, route_id)); |
| 293 | 286 |
| 294 handler->OnResponseCompleted(request_id, URLRequestStatus( | 287 handler->OnResponseCompleted(request_id, URLRequestStatus( |
| 295 URLRequestStatus::FAILED, | 288 URLRequestStatus::FAILED, |
| 296 net::ERR_ABORTED), | 289 net::ERR_ABORTED), |
| 297 std::string()); // No security info necessary. | 290 std::string()); // No security info necessary. |
| 298 return true; | 291 return true; |
| 299 } | 292 } |
| 300 | 293 |
| 301 bool ResourceDispatcherHost::OnMessageReceived(const IPC::Message& message, | 294 bool ResourceDispatcherHost::OnMessageReceived(const IPC::Message& message, |
| 302 Receiver* receiver, | 295 ResourceMessageFilter* filter, |
| 303 bool* message_was_ok) { | 296 bool* message_was_ok) { |
| 304 if (!IsResourceDispatcherHostMessage(message)) { | 297 filter_ = filter; |
| 305 return false; | 298 bool handled = true; |
| 306 } | |
| 307 | |
| 308 *message_was_ok = true; | |
| 309 receiver_ = receiver; | |
| 310 | |
| 311 IPC_BEGIN_MESSAGE_MAP_EX(ResourceDispatcherHost, message, *message_was_ok) | 299 IPC_BEGIN_MESSAGE_MAP_EX(ResourceDispatcherHost, message, *message_was_ok) |
| 312 IPC_MESSAGE_HANDLER(ViewHostMsg_RequestResource, OnRequestResource) | 300 IPC_MESSAGE_HANDLER(ViewHostMsg_RequestResource, OnRequestResource) |
| 313 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_SyncLoad, OnSyncLoad) | 301 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_SyncLoad, OnSyncLoad) |
| 314 IPC_MESSAGE_HANDLER(ViewHostMsg_ReleaseDownloadedFile, | 302 IPC_MESSAGE_HANDLER(ViewHostMsg_ReleaseDownloadedFile, |
| 315 OnReleaseDownloadedFile) | 303 OnReleaseDownloadedFile) |
| 316 IPC_MESSAGE_HANDLER(ViewHostMsg_DataReceived_ACK, OnDataReceivedACK) | 304 IPC_MESSAGE_HANDLER(ViewHostMsg_DataReceived_ACK, OnDataReceivedACK) |
| 317 IPC_MESSAGE_HANDLER(ViewHostMsg_DataDownloaded_ACK, OnDataDownloadedACK) | 305 IPC_MESSAGE_HANDLER(ViewHostMsg_DataDownloaded_ACK, OnDataDownloadedACK) |
| 318 IPC_MESSAGE_HANDLER(ViewHostMsg_UploadProgress_ACK, OnUploadProgressACK) | 306 IPC_MESSAGE_HANDLER(ViewHostMsg_UploadProgress_ACK, OnUploadProgressACK) |
| 319 IPC_MESSAGE_HANDLER(ViewHostMsg_CancelRequest, OnCancelRequest) | 307 IPC_MESSAGE_HANDLER(ViewHostMsg_CancelRequest, OnCancelRequest) |
| 320 IPC_MESSAGE_HANDLER(ViewHostMsg_FollowRedirect, OnFollowRedirect) | 308 IPC_MESSAGE_HANDLER(ViewHostMsg_FollowRedirect, OnFollowRedirect) |
| 321 IPC_MESSAGE_HANDLER(ViewHostMsg_ClosePage_ACK, OnClosePageACK) | 309 IPC_MESSAGE_HANDLER(ViewHostMsg_ClosePage_ACK, OnClosePageACK) |
| 310 IPC_MESSAGE_UNHANDLED(handled = false) |
| 322 IPC_END_MESSAGE_MAP_EX() | 311 IPC_END_MESSAGE_MAP_EX() |
| 323 | 312 |
| 324 receiver_ = NULL; | 313 filter_ = NULL; |
| 325 | 314 return handled; |
| 326 return true; | |
| 327 } | 315 } |
| 328 | 316 |
| 329 void ResourceDispatcherHost::OnRequestResource( | 317 void ResourceDispatcherHost::OnRequestResource( |
| 330 const IPC::Message& message, | 318 const IPC::Message& message, |
| 331 int request_id, | 319 int request_id, |
| 332 const ViewHostMsg_Resource_Request& request_data) { | 320 const ViewHostMsg_Resource_Request& request_data) { |
| 333 BeginRequest(request_id, request_data, NULL, message.routing_id()); | 321 BeginRequest(request_id, request_data, NULL, message.routing_id()); |
| 334 } | 322 } |
| 335 | 323 |
| 336 // Begins a resource request with the given params on behalf of the specified | 324 // Begins a resource request with the given params on behalf of the specified |
| (...skipping 10 matching lines...) Expand all Loading... |
| 347 IPC::Message* sync_result) { | 335 IPC::Message* sync_result) { |
| 348 BeginRequest(request_id, request_data, sync_result, | 336 BeginRequest(request_id, request_data, sync_result, |
| 349 sync_result->routing_id()); | 337 sync_result->routing_id()); |
| 350 } | 338 } |
| 351 | 339 |
| 352 void ResourceDispatcherHost::BeginRequest( | 340 void ResourceDispatcherHost::BeginRequest( |
| 353 int request_id, | 341 int request_id, |
| 354 const ViewHostMsg_Resource_Request& request_data, | 342 const ViewHostMsg_Resource_Request& request_data, |
| 355 IPC::Message* sync_result, // only valid for sync | 343 IPC::Message* sync_result, // only valid for sync |
| 356 int route_id) { | 344 int route_id) { |
| 357 ChildProcessInfo::ProcessType process_type = receiver_->type(); | 345 ChildProcessInfo::ProcessType process_type = filter_->process_type(); |
| 358 int child_id = receiver_->id(); | 346 int child_id = filter_->child_id(); |
| 359 ChromeURLRequestContext* context = static_cast<ChromeURLRequestContext*>( | 347 |
| 360 receiver_->GetRequestContext(request_id, request_data)); | 348 ChromeURLRequestContext* context = filter_->GetURLRequestContext( |
| 361 if (!context) { | 349 request_id, request_data.resource_type); |
| 362 URLRequestContextGetter* context_getter = | |
| 363 Profile::GetDefaultRequestContext(); | |
| 364 if (context_getter) { | |
| 365 context = static_cast<ChromeURLRequestContext*>( | |
| 366 context_getter->GetURLRequestContext()); | |
| 367 } | |
| 368 } | |
| 369 | 350 |
| 370 // Might need to resolve the blob references in the upload data. | 351 // Might need to resolve the blob references in the upload data. |
| 371 if (request_data.upload_data && context) { | 352 if (request_data.upload_data && context) { |
| 372 context->blob_storage_context()->controller()-> | 353 context->blob_storage_context()->controller()-> |
| 373 ResolveBlobReferencesInUploadData(request_data.upload_data.get()); | 354 ResolveBlobReferencesInUploadData(request_data.upload_data.get()); |
| 374 } | 355 } |
| 375 | 356 |
| 376 if (is_shutdown_ || | 357 if (is_shutdown_ || |
| 377 !ShouldServiceRequest(process_type, child_id, request_data)) { | 358 !ShouldServiceRequest(process_type, child_id, request_data)) { |
| 378 URLRequestStatus status(URLRequestStatus::FAILED, net::ERR_ABORTED); | 359 URLRequestStatus status(URLRequestStatus::FAILED, net::ERR_ABORTED); |
| 379 if (sync_result) { | 360 if (sync_result) { |
| 380 SyncLoadResult result; | 361 SyncLoadResult result; |
| 381 result.status = status; | 362 result.status = status; |
| 382 ViewHostMsg_SyncLoad::WriteReplyParams(sync_result, result); | 363 ViewHostMsg_SyncLoad::WriteReplyParams(sync_result, result); |
| 383 receiver_->Send(sync_result); | 364 filter_->Send(sync_result); |
| 384 } else { | 365 } else { |
| 385 // Tell the renderer that this request was disallowed. | 366 // Tell the renderer that this request was disallowed. |
| 386 receiver_->Send(new ViewMsg_Resource_RequestComplete( | 367 filter_->Send(new ViewMsg_Resource_RequestComplete( |
| 387 route_id, | 368 route_id, |
| 388 request_id, | 369 request_id, |
| 389 status, | 370 status, |
| 390 std::string(), // No security info needed, connection was not | 371 std::string(), // No security info needed, connection was not |
| 391 base::Time())); // established. | 372 base::Time())); // established. |
| 392 } | 373 } |
| 393 return; | 374 return; |
| 394 } | 375 } |
| 395 | 376 |
| 396 // Ensure the Chrome plugins are loaded, as they may intercept network | 377 // Ensure the Chrome plugins are loaded, as they may intercept network |
| 397 // requests. Does nothing if they are already loaded. | 378 // requests. Does nothing if they are already loaded. |
| 398 // TODO(mpcomplete): This takes 200 ms! Investigate parallelizing this by | 379 // TODO(mpcomplete): This takes 200 ms! Investigate parallelizing this by |
| 399 // starting the load earlier in a BG thread. | 380 // starting the load earlier in a BG thread. |
| 400 PluginService::GetInstance()->LoadChromePlugins(this); | 381 PluginService::GetInstance()->LoadChromePlugins(this); |
| 401 | 382 |
| 402 // Construct the event handler. | 383 // Construct the event handler. |
| 403 scoped_refptr<ResourceHandler> handler; | 384 scoped_refptr<ResourceHandler> handler; |
| 404 if (sync_result) { | 385 if (sync_result) { |
| 405 handler = new SyncResourceHandler(receiver_, | 386 handler = new SyncResourceHandler( |
| 406 child_id, | 387 filter_, request_data.url, sync_result, this); |
| 407 request_data.url, | |
| 408 sync_result, | |
| 409 this); | |
| 410 } else { | 388 } else { |
| 411 handler = new AsyncResourceHandler(receiver_, | 389 handler = new AsyncResourceHandler( |
| 412 child_id, | 390 filter_, route_id, request_data.url, this); |
| 413 route_id, | |
| 414 receiver_->handle(), | |
| 415 request_data.url, | |
| 416 this); | |
| 417 } | 391 } |
| 418 | 392 |
| 419 // The RedirectToFileResourceHandler depends on being next in the chain. | 393 // The RedirectToFileResourceHandler depends on being next in the chain. |
| 420 if (request_data.download_to_file) | 394 if (request_data.download_to_file) |
| 421 handler = new RedirectToFileResourceHandler(handler, child_id, this); | 395 handler = new RedirectToFileResourceHandler(handler, child_id, this); |
| 422 | 396 |
| 423 if (HandleExternalProtocol(request_id, child_id, route_id, | 397 if (HandleExternalProtocol(request_id, child_id, route_id, |
| 424 request_data.url, request_data.resource_type, | 398 request_data.url, request_data.resource_type, |
| 425 handler)) { | 399 handler)) { |
| 426 return; | 400 return; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 route_id, | 458 route_id, |
| 485 this); | 459 this); |
| 486 } | 460 } |
| 487 | 461 |
| 488 // Insert a buffered event handler before the actual one. | 462 // Insert a buffered event handler before the actual one. |
| 489 handler = new BufferedResourceHandler(handler, this, request); | 463 handler = new BufferedResourceHandler(handler, this, request); |
| 490 | 464 |
| 491 // Insert safe browsing at the front of the chain, so it gets to decide | 465 // Insert safe browsing at the front of the chain, so it gets to decide |
| 492 // on policies first. | 466 // on policies first. |
| 493 if (safe_browsing_->enabled()) { | 467 if (safe_browsing_->enabled()) { |
| 494 handler = CreateSafeBrowsingResourceHandler(handler, child_id, route_id, | 468 handler = CreateSafeBrowsingResourceHandler(handler, route_id, |
| 495 request_data.resource_type); | 469 request_data.resource_type); |
| 496 } | 470 } |
| 497 | 471 |
| 498 #if defined(OS_CHROMEOS) | 472 #if defined(OS_CHROMEOS) |
| 499 // We check offline first, then check safe browsing so that we still can block | 473 // We check offline first, then check safe browsing so that we still can block |
| 500 // unsafe site after we remove offline page. | 474 // unsafe site after we remove offline page. |
| 501 handler = | 475 handler = |
| 502 new OfflineResourceHandler(handler, child_id, route_id, this, request); | 476 new OfflineResourceHandler(handler, child_id, route_id, this, request); |
| 503 #endif | 477 #endif |
| 504 | 478 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 537 // Have the appcache associate its extra info with the request. | 511 // Have the appcache associate its extra info with the request. |
| 538 appcache::AppCacheInterceptor::SetExtraRequestInfo( | 512 appcache::AppCacheInterceptor::SetExtraRequestInfo( |
| 539 request, context ? context->appcache_service() : NULL, child_id, | 513 request, context ? context->appcache_service() : NULL, child_id, |
| 540 request_data.appcache_host_id, request_data.resource_type); | 514 request_data.appcache_host_id, request_data.resource_type); |
| 541 | 515 |
| 542 BeginRequestInternal(request); | 516 BeginRequestInternal(request); |
| 543 } | 517 } |
| 544 | 518 |
| 545 void ResourceDispatcherHost::OnReleaseDownloadedFile(int request_id) { | 519 void ResourceDispatcherHost::OnReleaseDownloadedFile(int request_id) { |
| 546 DCHECK(pending_requests_.end() == | 520 DCHECK(pending_requests_.end() == |
| 547 pending_requests_.find(GlobalRequestID(receiver_->id(), request_id))); | 521 pending_requests_.find( |
| 548 UnregisterDownloadedTempFile(receiver_->id(), request_id); | 522 GlobalRequestID(filter_->child_id(), request_id))); |
| 523 UnregisterDownloadedTempFile(filter_->child_id(), request_id); |
| 549 } | 524 } |
| 550 | 525 |
| 551 void ResourceDispatcherHost::OnDataReceivedACK(int request_id) { | 526 void ResourceDispatcherHost::OnDataReceivedACK(int request_id) { |
| 552 DataReceivedACK(receiver_->id(), request_id); | 527 DataReceivedACK(filter_->child_id(), request_id); |
| 553 } | 528 } |
| 554 | 529 |
| 555 void ResourceDispatcherHost::DataReceivedACK(int child_id, | 530 void ResourceDispatcherHost::DataReceivedACK(int child_id, |
| 556 int request_id) { | 531 int request_id) { |
| 557 PendingRequestList::iterator i = pending_requests_.find( | 532 PendingRequestList::iterator i = pending_requests_.find( |
| 558 GlobalRequestID(child_id, request_id)); | 533 GlobalRequestID(child_id, request_id)); |
| 559 if (i == pending_requests_.end()) | 534 if (i == pending_requests_.end()) |
| 560 return; | 535 return; |
| 561 | 536 |
| 562 ResourceDispatcherHostRequestInfo* info = InfoForRequest(i->second); | 537 ResourceDispatcherHostRequestInfo* info = InfoForRequest(i->second); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 573 // Resume the request. | 548 // Resume the request. |
| 574 PauseRequest(child_id, request_id, false); | 549 PauseRequest(child_id, request_id, false); |
| 575 } | 550 } |
| 576 } | 551 } |
| 577 | 552 |
| 578 void ResourceDispatcherHost::OnDataDownloadedACK(int request_id) { | 553 void ResourceDispatcherHost::OnDataDownloadedACK(int request_id) { |
| 579 // TODO(michaeln): maybe throttle DataDownloaded messages | 554 // TODO(michaeln): maybe throttle DataDownloaded messages |
| 580 } | 555 } |
| 581 | 556 |
| 582 void ResourceDispatcherHost::RegisterDownloadedTempFile( | 557 void ResourceDispatcherHost::RegisterDownloadedTempFile( |
| 583 int receiver_id, int request_id, DeletableFileReference* reference) { | 558 int child_id, int request_id, DeletableFileReference* reference) { |
| 584 // Note: receiver_id is the child_id is the render_process_id... | 559 registered_temp_files_[child_id][request_id] = reference; |
| 585 registered_temp_files_[receiver_id][request_id] = reference; | |
| 586 ChildProcessSecurityPolicy::GetInstance()->GrantReadFile( | 560 ChildProcessSecurityPolicy::GetInstance()->GrantReadFile( |
| 587 receiver_id, reference->path()); | 561 child_id, reference->path()); |
| 588 } | 562 } |
| 589 | 563 |
| 590 void ResourceDispatcherHost::UnregisterDownloadedTempFile( | 564 void ResourceDispatcherHost::UnregisterDownloadedTempFile( |
| 591 int receiver_id, int request_id) { | 565 int child_id, int request_id) { |
| 592 DeletableFilesMap& map = registered_temp_files_[receiver_id]; | 566 DeletableFilesMap& map = registered_temp_files_[child_id]; |
| 593 DeletableFilesMap::iterator found = map.find(request_id); | 567 DeletableFilesMap::iterator found = map.find(request_id); |
| 594 if (found == map.end()) | 568 if (found == map.end()) |
| 595 return; | 569 return; |
| 596 | 570 |
| 597 ChildProcessSecurityPolicy::GetInstance()->RevokeAllPermissionsForFile( | 571 ChildProcessSecurityPolicy::GetInstance()->RevokeAllPermissionsForFile( |
| 598 receiver_id, found->second->path()); | 572 child_id, found->second->path()); |
| 599 map.erase(found); | 573 map.erase(found); |
| 600 } | 574 } |
| 601 | 575 |
| 602 bool ResourceDispatcherHost::Send(IPC::Message* message) { | 576 bool ResourceDispatcherHost::Send(IPC::Message* message) { |
| 603 delete message; | 577 delete message; |
| 604 return false; | 578 return false; |
| 605 } | 579 } |
| 606 | 580 |
| 607 void ResourceDispatcherHost::OnUploadProgressACK(int request_id) { | 581 void ResourceDispatcherHost::OnUploadProgressACK(int request_id) { |
| 608 int child_id = receiver_->id(); | 582 int child_id = filter_->child_id(); |
| 609 PendingRequestList::iterator i = pending_requests_.find( | 583 PendingRequestList::iterator i = pending_requests_.find( |
| 610 GlobalRequestID(child_id, request_id)); | 584 GlobalRequestID(child_id, request_id)); |
| 611 if (i == pending_requests_.end()) | 585 if (i == pending_requests_.end()) |
| 612 return; | 586 return; |
| 613 | 587 |
| 614 ResourceDispatcherHostRequestInfo* info = InfoForRequest(i->second); | 588 ResourceDispatcherHostRequestInfo* info = InfoForRequest(i->second); |
| 615 info->set_waiting_for_upload_progress_ack(false); | 589 info->set_waiting_for_upload_progress_ack(false); |
| 616 } | 590 } |
| 617 | 591 |
| 618 void ResourceDispatcherHost::OnCancelRequest(int request_id) { | 592 void ResourceDispatcherHost::OnCancelRequest(int request_id) { |
| 619 CancelRequest(receiver_->id(), request_id, true); | 593 CancelRequest(filter_->child_id(), request_id, true); |
| 620 } | 594 } |
| 621 | 595 |
| 622 void ResourceDispatcherHost::OnFollowRedirect( | 596 void ResourceDispatcherHost::OnFollowRedirect( |
| 623 int request_id, | 597 int request_id, |
| 624 bool has_new_first_party_for_cookies, | 598 bool has_new_first_party_for_cookies, |
| 625 const GURL& new_first_party_for_cookies) { | 599 const GURL& new_first_party_for_cookies) { |
| 626 FollowDeferredRedirect(receiver_->id(), request_id, | 600 FollowDeferredRedirect(filter_->child_id(), request_id, |
| 627 has_new_first_party_for_cookies, | 601 has_new_first_party_for_cookies, |
| 628 new_first_party_for_cookies); | 602 new_first_party_for_cookies); |
| 629 } | 603 } |
| 630 | 604 |
| 631 ResourceHandler* ResourceDispatcherHost::CreateSafeBrowsingResourceHandler( | 605 ResourceHandler* ResourceDispatcherHost::CreateSafeBrowsingResourceHandler( |
| 632 ResourceHandler* handler, int child_id, int route_id, | 606 ResourceHandler* handler, int route_id, ResourceType::Type resource_type) { |
| 633 ResourceType::Type resource_type) { | 607 return new SafeBrowsingResourceHandler( |
| 634 return new SafeBrowsingResourceHandler(handler, | 608 handler, route_id, resource_type, safe_browsing_, this, filter_); |
| 635 child_id, | |
| 636 route_id, | |
| 637 resource_type, | |
| 638 safe_browsing_, | |
| 639 this, | |
| 640 receiver_); | |
| 641 } | 609 } |
| 642 | 610 |
| 643 ResourceDispatcherHostRequestInfo* | 611 ResourceDispatcherHostRequestInfo* |
| 644 ResourceDispatcherHost::CreateRequestInfoForBrowserRequest( | 612 ResourceDispatcherHost::CreateRequestInfoForBrowserRequest( |
| 645 ResourceHandler* handler, int child_id, int route_id, bool download) { | 613 ResourceHandler* handler, int child_id, int route_id, bool download) { |
| 646 return new ResourceDispatcherHostRequestInfo(handler, | 614 return new ResourceDispatcherHostRequestInfo(handler, |
| 647 ChildProcessInfo::RENDER_PROCESS, | 615 ChildProcessInfo::RENDER_PROCESS, |
| 648 child_id, | 616 child_id, |
| 649 route_id, | 617 route_id, |
| 650 request_id_, | 618 request_id_, |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 715 child_id, | 683 child_id, |
| 716 route_id, | 684 route_id, |
| 717 request_id_, | 685 request_id_, |
| 718 url, | 686 url, |
| 719 download_file_manager_.get(), | 687 download_file_manager_.get(), |
| 720 request, | 688 request, |
| 721 prompt_for_save_location, | 689 prompt_for_save_location, |
| 722 save_info)); | 690 save_info)); |
| 723 | 691 |
| 724 if (safe_browsing_->enabled()) { | 692 if (safe_browsing_->enabled()) { |
| 725 handler = CreateSafeBrowsingResourceHandler(handler, child_id, route_id, | 693 handler = CreateSafeBrowsingResourceHandler(handler, route_id, |
| 726 ResourceType::MAIN_FRAME); | 694 ResourceType::MAIN_FRAME); |
| 727 } | 695 } |
| 728 | 696 |
| 729 if (!net::URLRequest::IsHandledURL(url)) { | 697 if (!net::URLRequest::IsHandledURL(url)) { |
| 730 VLOG(1) << "Download request for unsupported protocol: " | 698 VLOG(1) << "Download request for unsupported protocol: " |
| 731 << url.possibly_invalid_spec(); | 699 << url.possibly_invalid_spec(); |
| 732 return; | 700 return; |
| 733 } | 701 } |
| 734 | 702 |
| 735 request->set_method("GET"); | 703 request->set_method("GET"); |
| (...skipping 1123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1859 bool ResourceDispatcherHost::IsValidRequest(net::URLRequest* request) { | 1827 bool ResourceDispatcherHost::IsValidRequest(net::URLRequest* request) { |
| 1860 if (!request) | 1828 if (!request) |
| 1861 return false; | 1829 return false; |
| 1862 ResourceDispatcherHostRequestInfo* info = InfoForRequest(request); | 1830 ResourceDispatcherHostRequestInfo* info = InfoForRequest(request); |
| 1863 return pending_requests_.find( | 1831 return pending_requests_.find( |
| 1864 GlobalRequestID(info->child_id(), info->request_id())) != | 1832 GlobalRequestID(info->child_id(), info->request_id())) != |
| 1865 pending_requests_.end(); | 1833 pending_requests_.end(); |
| 1866 } | 1834 } |
| 1867 | 1835 |
| 1868 // static | 1836 // static |
| 1869 bool ResourceDispatcherHost::IsResourceDispatcherHostMessage( | |
| 1870 const IPC::Message& message) { | |
| 1871 switch (message.type()) { | |
| 1872 case ViewHostMsg_RequestResource::ID: | |
| 1873 case ViewHostMsg_CancelRequest::ID: | |
| 1874 case ViewHostMsg_FollowRedirect::ID: | |
| 1875 case ViewHostMsg_ClosePage_ACK::ID: | |
| 1876 case ViewHostMsg_ReleaseDownloadedFile::ID: | |
| 1877 case ViewHostMsg_DataReceived_ACK::ID: | |
| 1878 case ViewHostMsg_DataDownloaded_ACK::ID: | |
| 1879 case ViewHostMsg_UploadProgress_ACK::ID: | |
| 1880 case ViewHostMsg_SyncLoad::ID: | |
| 1881 return true; | |
| 1882 | |
| 1883 default: | |
| 1884 break; | |
| 1885 } | |
| 1886 | |
| 1887 return false; | |
| 1888 } | |
| 1889 | |
| 1890 // static | |
| 1891 void ResourceDispatcherHost::ApplyExtensionLocalizationFilter( | 1837 void ResourceDispatcherHost::ApplyExtensionLocalizationFilter( |
| 1892 const GURL& url, | 1838 const GURL& url, |
| 1893 const ResourceType::Type& resource_type, | 1839 const ResourceType::Type& resource_type, |
| 1894 ResourceDispatcherHostRequestInfo* request_info) { | 1840 ResourceDispatcherHostRequestInfo* request_info) { |
| 1895 // Apply filter to chrome extension CSS files. | 1841 // Apply filter to chrome extension CSS files. |
| 1896 if (url.SchemeIs(chrome::kExtensionScheme) && | 1842 if (url.SchemeIs(chrome::kExtensionScheme) && |
| 1897 resource_type == ResourceType::STYLESHEET) | 1843 resource_type == ResourceType::STYLESHEET) |
| 1898 request_info->set_replace_extension_localization_templates(); | 1844 request_info->set_replace_extension_localization_templates(); |
| 1899 } | 1845 } |
| 1900 | 1846 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1957 return is_prefetch_enabled_; | 1903 return is_prefetch_enabled_; |
| 1958 } | 1904 } |
| 1959 | 1905 |
| 1960 // static | 1906 // static |
| 1961 void ResourceDispatcherHost::set_is_prefetch_enabled(bool value) { | 1907 void ResourceDispatcherHost::set_is_prefetch_enabled(bool value) { |
| 1962 is_prefetch_enabled_ = value; | 1908 is_prefetch_enabled_ = value; |
| 1963 } | 1909 } |
| 1964 | 1910 |
| 1965 // static | 1911 // static |
| 1966 bool ResourceDispatcherHost::is_prefetch_enabled_ = false; | 1912 bool ResourceDispatcherHost::is_prefetch_enabled_ = false; |
| OLD | NEW |