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 // 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 |
(...skipping 29 matching lines...) Expand all Loading... |
40 class SocketStreamDispatcherHost; | 40 class SocketStreamDispatcherHost; |
41 class SSLClientAuthHandler; | 41 class SSLClientAuthHandler; |
42 class UserScriptListener; | 42 class UserScriptListener; |
43 class URLRequestContext; | 43 class URLRequestContext; |
44 class WebKitThread; | 44 class WebKitThread; |
45 struct DownloadSaveInfo; | 45 struct DownloadSaveInfo; |
46 struct GlobalRequestID; | 46 struct GlobalRequestID; |
47 struct ViewHostMsg_Resource_Request; | 47 struct ViewHostMsg_Resource_Request; |
48 struct ViewMsg_ClosePage_Params; | 48 struct ViewMsg_ClosePage_Params; |
49 | 49 |
50 namespace webkit_blob { | |
51 class DeletableFileReference; | |
52 } | |
53 | |
54 class ResourceDispatcherHost : public URLRequest::Delegate { | 50 class ResourceDispatcherHost : public URLRequest::Delegate { |
55 public: | 51 public: |
56 // Implemented by the client of ResourceDispatcherHost to receive messages in | 52 // Implemented by the client of ResourceDispatcherHost to receive messages in |
57 // response to a resource load. The messages are intended to be forwarded to | 53 // response to a resource load. The messages are intended to be forwarded to |
58 // the ResourceDispatcher in the child process via an IPC channel that the | 54 // the ResourceDispatcher in the child process via an IPC channel that the |
59 // client manages. | 55 // client manages. |
60 // | 56 // |
61 // NOTE: This class unfortunately cannot be named 'Delegate' because that | 57 // NOTE: This class unfortunately cannot be named 'Delegate' because that |
62 // conflicts with the name of ResourceDispatcherHost's base class. | 58 // conflicts with the name of ResourceDispatcherHost's base class. |
63 // | 59 // |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 void ResumeBlockedRequestsForRoute(int process_unique_id, int route_id); | 257 void ResumeBlockedRequestsForRoute(int process_unique_id, int route_id); |
262 | 258 |
263 // Cancels any blocked request for the specified route id. | 259 // Cancels any blocked request for the specified route id. |
264 void CancelBlockedRequestsForRoute(int process_unique_id, int route_id); | 260 void CancelBlockedRequestsForRoute(int process_unique_id, int route_id); |
265 | 261 |
266 // Decrements the pending_data_count for the request and resumes | 262 // Decrements the pending_data_count for the request and resumes |
267 // the request if it was paused due to too many pending data | 263 // the request if it was paused due to too many pending data |
268 // messages sent. | 264 // messages sent. |
269 void DataReceivedACK(int process_unique_id, int request_id); | 265 void DataReceivedACK(int process_unique_id, int request_id); |
270 | 266 |
271 // Maintains a collection of temp files created in support of | |
272 // the download_to_file capability. Used to grant access to the | |
273 // child process and to defer deletion of the file until it's | |
274 // no longer needed. | |
275 void RegisterDownloadedTempFile( | |
276 int receiver_id, int request_id, | |
277 webkit_blob::DeletableFileReference* reference); | |
278 void UnregisterDownloadedTempFile(int receiver_id, int request_id); | |
279 | |
280 // Needed for the sync IPC message dispatcher macros. | 267 // Needed for the sync IPC message dispatcher macros. |
281 bool Send(IPC::Message* message); | 268 bool Send(IPC::Message* message); |
282 | 269 |
283 // Controls if we launch or squash prefetch requests as they arrive | 270 // Controls if we launch or squash prefetch requests as they arrive |
284 // from renderers. | 271 // from renderers. |
285 static bool is_prefetch_enabled(); | 272 static bool is_prefetch_enabled(); |
286 static void set_is_prefetch_enabled(bool value); | 273 static void set_is_prefetch_enabled(bool value); |
287 | 274 |
288 private: | 275 private: |
289 FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest, | 276 FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest, |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 int request_id, | 390 int request_id, |
404 const ViewHostMsg_Resource_Request& request_data); | 391 const ViewHostMsg_Resource_Request& request_data); |
405 void OnSyncLoad(int request_id, | 392 void OnSyncLoad(int request_id, |
406 const ViewHostMsg_Resource_Request& request_data, | 393 const ViewHostMsg_Resource_Request& request_data, |
407 IPC::Message* sync_result); | 394 IPC::Message* sync_result); |
408 void BeginRequest(int request_id, | 395 void BeginRequest(int request_id, |
409 const ViewHostMsg_Resource_Request& request_data, | 396 const ViewHostMsg_Resource_Request& request_data, |
410 IPC::Message* sync_result, // only valid for sync | 397 IPC::Message* sync_result, // only valid for sync |
411 int route_id); // only valid for async | 398 int route_id); // only valid for async |
412 void OnDataReceivedACK(int request_id); | 399 void OnDataReceivedACK(int request_id); |
413 void OnDataDownloadedACK(int request_id); | |
414 void OnUploadProgressACK(int request_id); | 400 void OnUploadProgressACK(int request_id); |
415 void OnCancelRequest(int request_id); | 401 void OnCancelRequest(int request_id); |
416 void OnFollowRedirect(int request_id, | 402 void OnFollowRedirect(int request_id, |
417 bool has_new_first_party_for_cookies, | 403 bool has_new_first_party_for_cookies, |
418 const GURL& new_first_party_for_cookies); | 404 const GURL& new_first_party_for_cookies); |
419 void OnResourceLoaderDeleted(int request_id); | |
420 | 405 |
421 ResourceHandler* CreateSafeBrowsingResourceHandler( | 406 ResourceHandler* CreateSafeBrowsingResourceHandler( |
422 ResourceHandler* handler, int child_id, int route_id, | 407 ResourceHandler* handler, int child_id, int route_id, |
423 ResourceType::Type resource_type); | 408 ResourceType::Type resource_type); |
424 | 409 |
425 // Creates ResourceDispatcherHostRequestInfo for a browser-initiated request | 410 // Creates ResourceDispatcherHostRequestInfo for a browser-initiated request |
426 // (a download or a page save). |download| should be true if the request | 411 // (a download or a page save). |download| should be true if the request |
427 // is a file download. | 412 // is a file download. |
428 ResourceDispatcherHostRequestInfo* CreateRequestInfoForBrowserRequest( | 413 ResourceDispatcherHostRequestInfo* CreateRequestInfoForBrowserRequest( |
429 ResourceHandler* handler, int child_id, int route_id, bool download); | 414 ResourceHandler* handler, int child_id, int route_id, bool download); |
(...skipping 10 matching lines...) Expand all Loading... |
440 const GURL& url, | 425 const GURL& url, |
441 const ResourceType::Type& resource_type, | 426 const ResourceType::Type& resource_type, |
442 ResourceDispatcherHostRequestInfo* request_info); | 427 ResourceDispatcherHostRequestInfo* request_info); |
443 | 428 |
444 // Determine request priority based on how critical this resource typically | 429 // Determine request priority based on how critical this resource typically |
445 // is to user-perceived page load performance. | 430 // is to user-perceived page load performance. |
446 static net::RequestPriority DetermineRequestPriority(ResourceType::Type type); | 431 static net::RequestPriority DetermineRequestPriority(ResourceType::Type type); |
447 | 432 |
448 PendingRequestList pending_requests_; | 433 PendingRequestList pending_requests_; |
449 | 434 |
450 // Collection of temp files downloaded for child processes via | |
451 // the download_to_file mechanism. We avoid deleting them until | |
452 // the loader in the client has been deleted. | |
453 typedef std::map<int, scoped_refptr<webkit_blob::DeletableFileReference> > | |
454 DeletableFilesMap; // key is request id | |
455 typedef std::map<int, DeletableFilesMap> | |
456 RegisteredTempFiles; // key is child process id | |
457 RegisteredTempFiles registered_temp_files_; | |
458 | |
459 // A timer that periodically calls UpdateLoadStates while pending_requests_ | 435 // A timer that periodically calls UpdateLoadStates while pending_requests_ |
460 // is not empty. | 436 // is not empty. |
461 base::RepeatingTimer<ResourceDispatcherHost> update_load_states_timer_; | 437 base::RepeatingTimer<ResourceDispatcherHost> update_load_states_timer_; |
462 | 438 |
463 // Handles the resource requests from the moment we want to start them. | 439 // Handles the resource requests from the moment we want to start them. |
464 ResourceQueue resource_queue_; | 440 ResourceQueue resource_queue_; |
465 | 441 |
466 // We own the download file writing thread and manager | 442 // We own the download file writing thread and manager |
467 scoped_refptr<DownloadFileManager> download_file_manager_; | 443 scoped_refptr<DownloadFileManager> download_file_manager_; |
468 | 444 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 // Used during IPC message dispatching so that the handlers can get a pointer | 497 // Used during IPC message dispatching so that the handlers can get a pointer |
522 // to the source of the message. | 498 // to the source of the message. |
523 Receiver* receiver_; | 499 Receiver* receiver_; |
524 | 500 |
525 static bool is_prefetch_enabled_; | 501 static bool is_prefetch_enabled_; |
526 | 502 |
527 DISALLOW_COPY_AND_ASSIGN(ResourceDispatcherHost); | 503 DISALLOW_COPY_AND_ASSIGN(ResourceDispatcherHost); |
528 }; | 504 }; |
529 | 505 |
530 #endif // CHROME_BROWSER_RENDERER_HOST_RESOURCE_DISPATCHER_HOST_H_ | 506 #endif // CHROME_BROWSER_RENDERER_HOST_RESOURCE_DISPATCHER_HOST_H_ |
OLD | NEW |