Chromium Code Reviews| 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 // 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/child/resource_dispatcher.h" | 7 #include "content/child/resource_dispatcher.h" |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 107 if (!request_info->deferred_message_queue.empty()) { | 107 if (!request_info->deferred_message_queue.empty()) { |
| 108 FlushDeferredMessages(request_id); | 108 FlushDeferredMessages(request_id); |
| 109 request_info = GetPendingRequestInfo(request_id); | 109 request_info = GetPendingRequestInfo(request_id); |
| 110 DCHECK(request_info); | 110 DCHECK(request_info); |
| 111 if (request_info->is_deferred) { | 111 if (request_info->is_deferred) { |
| 112 request_info->deferred_message_queue.push_back(new IPC::Message(message)); | 112 request_info->deferred_message_queue.push_back(new IPC::Message(message)); |
| 113 return true; | 113 return true; |
| 114 } | 114 } |
| 115 } | 115 } |
| 116 | 116 |
| 117 DispatchMessage(message); | 117 // If the request is associated with a specific loading task queue then |
| 118 // dispatch the message there, otherwise dispatch it here. | |
|
Sami
2015/09/25 13:31:27
I guess the other alternative would be to dispatch
alex clarke (OOO till 29th)
2015/09/28 17:24:53
Done. Turned out to be much less invasive than I'd
| |
| 119 if (request_info->loading_task_queue) { | |
| 120 request_info->loading_task_queue->PostTask( | |
| 121 FROM_HERE, base::Bind(&ResourceDispatcher::DispatchMessage, | |
| 122 base::Unretained(this), message)); | |
| 123 } else { | |
| 124 DispatchMessage(message); | |
| 125 } | |
| 118 return true; | 126 return true; |
| 119 } | 127 } |
| 120 | 128 |
| 121 ResourceDispatcher::PendingRequestInfo* | 129 ResourceDispatcher::PendingRequestInfo* |
| 122 ResourceDispatcher::GetPendingRequestInfo(int request_id) { | 130 ResourceDispatcher::GetPendingRequestInfo(int request_id) { |
| 123 PendingRequestList::iterator it = pending_requests_.find(request_id); | 131 PendingRequestList::iterator it = pending_requests_.find(request_id); |
| 124 if (it == pending_requests_.end()) { | 132 if (it == pending_requests_.end()) { |
| 125 // This might happen for kill()ed requests on the webkit end. | 133 // This might happen for kill()ed requests on the webkit end. |
| 126 return NULL; | 134 return NULL; |
| 127 } | 135 } |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 473 download_to_file(false), | 481 download_to_file(false), |
| 474 buffer_size(0) { | 482 buffer_size(0) { |
| 475 } | 483 } |
| 476 | 484 |
| 477 ResourceDispatcher::PendingRequestInfo::PendingRequestInfo( | 485 ResourceDispatcher::PendingRequestInfo::PendingRequestInfo( |
| 478 RequestPeer* peer, | 486 RequestPeer* peer, |
| 479 ResourceType resource_type, | 487 ResourceType resource_type, |
| 480 int origin_pid, | 488 int origin_pid, |
| 481 const GURL& frame_origin, | 489 const GURL& frame_origin, |
| 482 const GURL& request_url, | 490 const GURL& request_url, |
| 483 bool download_to_file) | 491 bool download_to_file, |
| 492 scoped_refptr<base::SingleThreadTaskRunner> loading_task_queue) | |
| 484 : peer(peer), | 493 : peer(peer), |
| 485 threaded_data_provider(NULL), | 494 threaded_data_provider(NULL), |
| 486 resource_type(resource_type), | 495 resource_type(resource_type), |
| 487 origin_pid(origin_pid), | 496 origin_pid(origin_pid), |
| 488 is_deferred(false), | 497 is_deferred(false), |
| 489 url(request_url), | 498 url(request_url), |
| 490 frame_origin(frame_origin), | 499 frame_origin(frame_origin), |
| 491 response_url(request_url), | 500 response_url(request_url), |
| 492 download_to_file(download_to_file), | 501 download_to_file(download_to_file), |
| 493 request_start(base::TimeTicks::Now()) { | 502 request_start(base::TimeTicks::Now()), |
| 503 loading_task_queue(loading_task_queue) { | |
| 494 } | 504 } |
| 495 | 505 |
| 496 ResourceDispatcher::PendingRequestInfo::~PendingRequestInfo() { | 506 ResourceDispatcher::PendingRequestInfo::~PendingRequestInfo() { |
| 497 if (threaded_data_provider) | 507 if (threaded_data_provider) |
| 498 threaded_data_provider->Stop(); | 508 threaded_data_provider->Stop(); |
| 499 } | 509 } |
| 500 | 510 |
| 501 void ResourceDispatcher::DispatchMessage(const IPC::Message& message) { | 511 void ResourceDispatcher::DispatchMessage(const IPC::Message& message) { |
| 502 IPC_BEGIN_MESSAGE_MAP(ResourceDispatcher, message) | 512 IPC_BEGIN_MESSAGE_MAP(ResourceDispatcher, message) |
| 503 IPC_MESSAGE_HANDLER(ResourceMsg_UploadProgress, OnUploadProgress) | 513 IPC_MESSAGE_HANDLER(ResourceMsg_UploadProgress, OnUploadProgress) |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 581 CreateRequest(request_info, request_body, &frame_origin); | 591 CreateRequest(request_info, request_body, &frame_origin); |
| 582 | 592 |
| 583 // Compute a unique request_id for this renderer process. | 593 // Compute a unique request_id for this renderer process. |
| 584 int request_id = MakeRequestID(); | 594 int request_id = MakeRequestID(); |
| 585 pending_requests_[request_id] = | 595 pending_requests_[request_id] = |
| 586 PendingRequestInfo(peer, | 596 PendingRequestInfo(peer, |
| 587 request->resource_type, | 597 request->resource_type, |
| 588 request->origin_pid, | 598 request->origin_pid, |
| 589 frame_origin, | 599 frame_origin, |
| 590 request->url, | 600 request->url, |
| 591 request_info.download_to_file); | 601 request_info.download_to_file, |
| 602 request_info.loading_task_queue); | |
| 592 | 603 |
| 593 message_sender_->Send(new ResourceHostMsg_RequestResource( | 604 message_sender_->Send(new ResourceHostMsg_RequestResource( |
| 594 request_info.routing_id, request_id, *request)); | 605 request_info.routing_id, request_id, *request)); |
| 595 | 606 |
| 596 return request_id; | 607 return request_id; |
| 597 } | 608 } |
| 598 | 609 |
| 599 void ResourceDispatcher::ToResourceResponseInfo( | 610 void ResourceDispatcher::ToResourceResponseInfo( |
| 600 const PendingRequestInfo& request_info, | 611 const PendingRequestInfo& request_info, |
| 601 const ResourceResponseHead& browser_info, | 612 const ResourceResponseHead& browser_info, |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 790 extra_data->transferred_request_request_id(); | 801 extra_data->transferred_request_request_id(); |
| 791 request->service_worker_provider_id = | 802 request->service_worker_provider_id = |
| 792 extra_data->service_worker_provider_id(); | 803 extra_data->service_worker_provider_id(); |
| 793 request->request_body = request_body; | 804 request->request_body = request_body; |
| 794 if (frame_origin) | 805 if (frame_origin) |
| 795 *frame_origin = extra_data->frame_origin(); | 806 *frame_origin = extra_data->frame_origin(); |
| 796 return request.Pass(); | 807 return request.Pass(); |
| 797 } | 808 } |
| 798 | 809 |
| 799 } // namespace content | 810 } // namespace content |
| OLD | NEW |