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 560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 571 RequestPeer* new_peer = | 571 RequestPeer* new_peer = |
| 572 delegate_->OnRequestComplete( | 572 delegate_->OnRequestComplete( |
| 573 request_info->peer, request_info->resource_type, | 573 request_info->peer, request_info->resource_type, |
| 574 request_complete_data.error_code); | 574 request_complete_data.error_code); |
| 575 if (new_peer) | 575 if (new_peer) |
| 576 request_info->peer = new_peer; | 576 request_info->peer = new_peer; |
| 577 } | 577 } |
| 578 | 578 |
| 579 base::TimeTicks renderer_completion_time = ToRendererCompletionTime( | 579 base::TimeTicks renderer_completion_time = ToRendererCompletionTime( |
| 580 *request_info, request_complete_data.completion_time); | 580 *request_info, request_complete_data.completion_time); |
| 581 | |
| 582 // If we have a threaded data provider, this message needs to bounce off the | |
| 583 // background thread before it's returned to this thread and handled, | |
| 584 // to make sure it's processed after all incoming data. | |
| 585 if (request_info->threaded_data_provider) { | |
| 586 request_info->threaded_data_provider->OnRequestCompleteForegroundThread( | |
| 587 weak_factory_.GetWeakPtr(), request_complete_data, | |
| 588 renderer_completion_time); | |
| 589 return; | |
| 590 } | |
| 591 | |
| 581 // The request ID will be removed from our pending list in the destructor. | 592 // The request ID will be removed from our pending list in the destructor. |
| 582 // Normally, dispatching this message causes the reference-counted request to | 593 // Normally, dispatching this message causes the reference-counted request to |
| 583 // die immediately. | 594 // die immediately. |
| 584 peer->OnCompletedRequest(request_complete_data.error_code, | 595 peer->OnCompletedRequest(request_complete_data.error_code, |
| 585 request_complete_data.was_ignored_by_handler, | 596 request_complete_data.was_ignored_by_handler, |
| 586 request_complete_data.exists_in_cache, | 597 request_complete_data.exists_in_cache, |
| 587 request_complete_data.security_info, | 598 request_complete_data.security_info, |
| 588 renderer_completion_time, | 599 renderer_completion_time, |
| 589 request_complete_data.encoded_data_length); | 600 request_complete_data.encoded_data_length); |
| 590 } | 601 } |
| 591 | 602 |
| 603 void ResourceDispatcher::CompletedRequestAfterBackgroundThreadFlush( | |
|
davidben
2015/01/23 19:46:43
Huh. I never failed a separate bug for this, but w
oystein (OOO til 10th of July)
2015/01/23 21:23:47
Interesting! It actually might, though it depends
davidben
2015/01/26 21:53:12
Yeah, I think that stop was triggered by ResourceC
| |
| 604 int request_id, | |
| 605 const ResourceMsg_RequestCompleteData& request_complete_data, | |
| 606 const base::TimeTicks& renderer_completion_time) { | |
| 607 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id); | |
| 608 if (!request_info) | |
| 609 return; | |
| 610 | |
| 611 RequestPeer* peer = request_info->peer; | |
| 612 peer->OnCompletedRequest(request_complete_data.error_code, | |
| 613 request_complete_data.was_ignored_by_handler, | |
| 614 request_complete_data.exists_in_cache, | |
| 615 request_complete_data.security_info, | |
| 616 renderer_completion_time, | |
| 617 request_complete_data.encoded_data_length); | |
| 618 } | |
| 619 | |
| 592 int ResourceDispatcher::AddPendingRequest(RequestPeer* callback, | 620 int ResourceDispatcher::AddPendingRequest(RequestPeer* callback, |
| 593 ResourceType resource_type, | 621 ResourceType resource_type, |
| 594 int origin_pid, | 622 int origin_pid, |
| 595 const GURL& frame_origin, | 623 const GURL& frame_origin, |
| 596 const GURL& request_url, | 624 const GURL& request_url, |
| 597 bool download_to_file) { | 625 bool download_to_file) { |
| 598 // Compute a unique request_id for this renderer process. | 626 // Compute a unique request_id for this renderer process. |
| 599 int id = MakeRequestID(); | 627 int id = MakeRequestID(); |
| 600 pending_requests_[id] = PendingRequestInfo(callback, | 628 pending_requests_[id] = PendingRequestInfo(callback, |
| 601 resource_type, | 629 resource_type, |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 896 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { | 924 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { |
| 897 while (!queue->empty()) { | 925 while (!queue->empty()) { |
| 898 IPC::Message* message = queue->front(); | 926 IPC::Message* message = queue->front(); |
| 899 ReleaseResourcesInDataMessage(*message); | 927 ReleaseResourcesInDataMessage(*message); |
| 900 queue->pop_front(); | 928 queue->pop_front(); |
| 901 delete message; | 929 delete message; |
| 902 } | 930 } |
| 903 } | 931 } |
| 904 | 932 |
| 905 } // namespace content | 933 } // namespace content |
| OLD | NEW |