| 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 // This is the browser side of the resource dispatcher, it receives requests | 5 // This is the browser side of the resource dispatcher, it receives requests |
| 6 // from the child process (i.e. [Renderer, Plugin, Worker]ProcessHost), and | 6 // from the child process (i.e. [Renderer, Plugin, Worker]ProcessHost), and |
| 7 // dispatches them to URLRequests. It then forwards the messages from the | 7 // dispatches them to URLRequests. It then forwards the messages from the |
| 8 // URLRequests back to the correct process for handling. | 8 // URLRequests back to the correct process for handling. |
| 9 // | 9 // |
| 10 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc
e-loading | 10 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc
e-loading |
| 11 | 11 |
| 12 #ifndef CONTENT_BROWSER_LOADER_RESOURCE_DISPATCHER_HOST_IMPL_H_ | 12 #ifndef CONTENT_BROWSER_LOADER_RESOURCE_DISPATCHER_HOST_IMPL_H_ |
| 13 #define CONTENT_BROWSER_LOADER_RESOURCE_DISPATCHER_HOST_IMPL_H_ | 13 #define CONTENT_BROWSER_LOADER_RESOURCE_DISPATCHER_HOST_IMPL_H_ |
| 14 | 14 |
| 15 #include <map> | 15 #include <map> |
| 16 #include <set> | 16 #include <set> |
| 17 #include <string> | 17 #include <string> |
| 18 #include <utility> |
| 18 #include <vector> | 19 #include <vector> |
| 19 | 20 |
| 20 #include "base/basictypes.h" | 21 #include "base/basictypes.h" |
| 21 #include "base/gtest_prod_util.h" | 22 #include "base/gtest_prod_util.h" |
| 22 #include "base/memory/linked_ptr.h" | 23 #include "base/memory/linked_ptr.h" |
| 23 #include "base/memory/scoped_ptr.h" | 24 #include "base/memory/scoped_ptr.h" |
| 24 #include "base/observer_list.h" | 25 #include "base/observer_list.h" |
| 25 #include "base/time/time.h" | 26 #include "base/time/time.h" |
| 26 #include "base/timer/timer.h" | 27 #include "base/timer/timer.h" |
| 27 #include "content/browser/download/download_resource_handler.h" | 28 #include "content/browser/download/download_resource_handler.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 39 #include "content/public/browser/resource_dispatcher_host.h" | 40 #include "content/public/browser/resource_dispatcher_host.h" |
| 40 #include "content/public/common/resource_type.h" | 41 #include "content/public/common/resource_type.h" |
| 41 #include "ipc/ipc_message.h" | 42 #include "ipc/ipc_message.h" |
| 42 #include "net/cookies/canonical_cookie.h" | 43 #include "net/cookies/canonical_cookie.h" |
| 43 #include "net/url_request/url_request.h" | 44 #include "net/url_request/url_request.h" |
| 44 | 45 |
| 45 class ResourceHandler; | 46 class ResourceHandler; |
| 46 struct ResourceHostMsg_Request; | 47 struct ResourceHostMsg_Request; |
| 47 | 48 |
| 48 namespace net { | 49 namespace net { |
| 50 class URLRequestContext; |
| 49 class URLRequestJobFactory; | 51 class URLRequestJobFactory; |
| 52 class HttpCache; |
| 50 } | 53 } |
| 51 | 54 |
| 52 namespace storage { | 55 namespace storage { |
| 53 class ShareableFileReference; | 56 class ShareableFileReference; |
| 54 } | 57 } |
| 55 | 58 |
| 56 namespace content { | 59 namespace content { |
| 57 class AppCacheService; | 60 class AppCacheService; |
| 58 class NavigationURLLoaderImplCore; | 61 class NavigationURLLoaderImplCore; |
| 59 class ResourceContext; | 62 class ResourceContext; |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 int route_id, | 418 int route_id, |
| 416 int request_id, | 419 int request_id, |
| 417 const ResourceHostMsg_Request& request_data, | 420 const ResourceHostMsg_Request& request_data, |
| 418 const linked_ptr<ResourceLoader>& loader); | 421 const linked_ptr<ResourceLoader>& loader); |
| 419 | 422 |
| 420 void BeginRequest(int request_id, | 423 void BeginRequest(int request_id, |
| 421 const ResourceHostMsg_Request& request_data, | 424 const ResourceHostMsg_Request& request_data, |
| 422 IPC::Message* sync_result, // only valid for sync | 425 IPC::Message* sync_result, // only valid for sync |
| 423 int route_id); // only valid for async | 426 int route_id); // only valid for async |
| 424 | 427 |
| 428 void BeginRequestFromData(int request_id, |
| 429 const ResourceHostMsg_Request& request_data, |
| 430 IPC::Message* sync_result, |
| 431 int process_type, |
| 432 int child_id, |
| 433 int route_id, |
| 434 bool is_async_revalidation, |
| 435 net::URLRequestContext* request_context, |
| 436 ResourceContext* resource_context); |
| 437 |
| 425 // Creates a ResourceHandler to be used by BeginRequest() for normal resource | 438 // Creates a ResourceHandler to be used by BeginRequest() for normal resource |
| 426 // loading. | 439 // loading. |
| 427 scoped_ptr<ResourceHandler> CreateResourceHandler( | 440 scoped_ptr<ResourceHandler> CreateResourceHandler( |
| 428 net::URLRequest* request, | 441 net::URLRequest* request, |
| 429 const ResourceHostMsg_Request& request_data, | 442 const ResourceHostMsg_Request& request_data, |
| 430 IPC::Message* sync_result, | 443 IPC::Message* sync_result, |
| 431 int route_id, | 444 int route_id, |
| 432 int process_type, | 445 int process_type, |
| 433 int child_id, | 446 int child_id, |
| 447 bool is_async_revalidation, |
| 434 ResourceContext* resource_context); | 448 ResourceContext* resource_context); |
| 435 | 449 |
| 450 // Wraps |handler| in the BufferedResourceHandler, enabling mime-type sniffing |
| 451 // and redirecting to download or plugins as appropriate. |
| 452 scoped_ptr<ResourceHandler> AddBufferedResourceHandler( |
| 453 net::URLRequest* request, |
| 454 scoped_ptr<ResourceHandler> handler); |
| 455 |
| 436 // Wraps |handler| in the standard resource handlers for normal resource | 456 // Wraps |handler| in the standard resource handlers for normal resource |
| 437 // loading and navigation requests. This adds BufferedResourceHandler and | 457 // loading and navigation requests. This adds ResourceThrottles. |
| 438 // ResourceThrottles. | 458 scoped_ptr<ResourceHandler> AddThrottlesAndSchedule( |
| 439 scoped_ptr<ResourceHandler> AddStandardHandlers( | |
| 440 net::URLRequest* request, | 459 net::URLRequest* request, |
| 441 ResourceType resource_type, | 460 ResourceType resource_type, |
| 442 ResourceContext* resource_context, | 461 ResourceContext* resource_context, |
| 443 AppCacheService* appcache_service, | 462 AppCacheService* appcache_service, |
| 444 int child_id, | 463 int child_id, |
| 445 int route_id, | 464 int route_id, |
| 446 scoped_ptr<ResourceHandler> handler); | 465 scoped_ptr<ResourceHandler> handler); |
| 447 | 466 |
| 448 void OnDataDownloadedACK(int request_id); | 467 void OnDataDownloadedACK(int request_id); |
| 449 void OnUploadProgressACK(int request_id); | 468 void OnUploadProgressACK(int request_id); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 // specified |id|. | 503 // specified |id|. |
| 485 void RegisterResourceMessageDelegate(const GlobalRequestID& id, | 504 void RegisterResourceMessageDelegate(const GlobalRequestID& id, |
| 486 ResourceMessageDelegate* delegate); | 505 ResourceMessageDelegate* delegate); |
| 487 void UnregisterResourceMessageDelegate(const GlobalRequestID& id, | 506 void UnregisterResourceMessageDelegate(const GlobalRequestID& id, |
| 488 ResourceMessageDelegate* delegate); | 507 ResourceMessageDelegate* delegate); |
| 489 | 508 |
| 490 int BuildLoadFlagsForRequest(const ResourceHostMsg_Request& request_data, | 509 int BuildLoadFlagsForRequest(const ResourceHostMsg_Request& request_data, |
| 491 int child_id, | 510 int child_id, |
| 492 bool is_sync_load); | 511 bool is_sync_load); |
| 493 | 512 |
| 513 void BeginAsyncRevalidation(net::URLRequest* for_request); |
| 514 |
| 494 LoaderMap pending_loaders_; | 515 LoaderMap pending_loaders_; |
| 495 | 516 |
| 496 // Collection of temp files downloaded for child processes via | 517 // Collection of temp files downloaded for child processes via |
| 497 // the download_to_file mechanism. We avoid deleting them until | 518 // the download_to_file mechanism. We avoid deleting them until |
| 498 // the client no longer needs them. | 519 // the client no longer needs them. |
| 499 typedef std::map<int, scoped_refptr<storage::ShareableFileReference> > | 520 typedef std::map<int, scoped_refptr<storage::ShareableFileReference> > |
| 500 DeletableFilesMap; // key is request id | 521 DeletableFilesMap; // key is request id |
| 501 typedef std::map<int, DeletableFilesMap> | 522 typedef std::map<int, DeletableFilesMap> |
| 502 RegisteredTempFiles; // key is child process id | 523 RegisteredTempFiles; // key is child process id |
| 503 RegisteredTempFiles registered_temp_files_; | 524 RegisteredTempFiles registered_temp_files_; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 base::TimeTicks last_user_gesture_time_; | 583 base::TimeTicks last_user_gesture_time_; |
| 563 | 584 |
| 564 // Used during IPC message dispatching so that the handlers can get a pointer | 585 // Used during IPC message dispatching so that the handlers can get a pointer |
| 565 // to the source of the message. | 586 // to the source of the message. |
| 566 ResourceMessageFilter* filter_; | 587 ResourceMessageFilter* filter_; |
| 567 | 588 |
| 568 ResourceDispatcherHostDelegate* delegate_; | 589 ResourceDispatcherHostDelegate* delegate_; |
| 569 | 590 |
| 570 bool allow_cross_origin_auth_prompt_; | 591 bool allow_cross_origin_auth_prompt_; |
| 571 | 592 |
| 593 // stale-while-revalidate is enabled either via experiment or command-line |
| 594 // flag. |
| 595 bool async_revalidation_enabled_; |
| 596 |
| 597 // In progress async revalidations. |
| 598 std::set<std::pair<net::HttpCache*, std::string>> |
| 599 in_progress_async_revalidations_; |
| 600 |
| 572 // http://crbug.com/90971 - Assists in tracking down use-after-frees on | 601 // http://crbug.com/90971 - Assists in tracking down use-after-frees on |
| 573 // shutdown. | 602 // shutdown. |
| 574 std::set<const ResourceContext*> active_resource_contexts_; | 603 std::set<const ResourceContext*> active_resource_contexts_; |
| 575 | 604 |
| 576 typedef std::map<GlobalRequestID, | 605 typedef std::map<GlobalRequestID, |
| 577 ObserverList<ResourceMessageDelegate>*> DelegateMap; | 606 ObserverList<ResourceMessageDelegate>*> DelegateMap; |
| 578 DelegateMap delegate_map_; | 607 DelegateMap delegate_map_; |
| 579 | 608 |
| 580 scoped_ptr<ResourceScheduler> scheduler_; | 609 scoped_ptr<ResourceScheduler> scheduler_; |
| 581 | 610 |
| 582 DISALLOW_COPY_AND_ASSIGN(ResourceDispatcherHostImpl); | 611 DISALLOW_COPY_AND_ASSIGN(ResourceDispatcherHostImpl); |
| 583 }; | 612 }; |
| 584 | 613 |
| 585 } // namespace content | 614 } // namespace content |
| 586 | 615 |
| 587 #endif // CONTENT_BROWSER_LOADER_RESOURCE_DISPATCHER_HOST_IMPL_H_ | 616 #endif // CONTENT_BROWSER_LOADER_RESOURCE_DISPATCHER_HOST_IMPL_H_ |
| OLD | NEW |