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 <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
613 response->encoded_body_length = result.encoded_body_length; | 613 response->encoded_body_length = result.encoded_body_length; |
614 } | 614 } |
615 | 615 |
616 int ResourceDispatcher::StartAsync( | 616 int ResourceDispatcher::StartAsync( |
617 std::unique_ptr<ResourceRequest> request, | 617 std::unique_ptr<ResourceRequest> request, |
618 int routing_id, | 618 int routing_id, |
619 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner, | 619 scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner, |
620 const url::Origin& frame_origin, | 620 const url::Origin& frame_origin, |
621 std::unique_ptr<RequestPeer> peer, | 621 std::unique_ptr<RequestPeer> peer, |
622 blink::WebURLRequest::LoadingIPCType ipc_type, | 622 blink::WebURLRequest::LoadingIPCType ipc_type, |
623 mojom::URLLoaderFactory* url_loader_factory) { | 623 mojom::URLLoaderFactory* url_loader_factory, |
624 mojo::ScopedDataPipeConsumerHandle consumer_handle) { | |
624 CheckSchemeForReferrerPolicy(*request); | 625 CheckSchemeForReferrerPolicy(*request); |
625 | 626 |
626 // Compute a unique request_id for this renderer process. | 627 // Compute a unique request_id for this renderer process. |
627 int request_id = MakeRequestID(); | 628 int request_id = MakeRequestID(); |
628 pending_requests_[request_id] = base::MakeUnique<PendingRequestInfo>( | 629 pending_requests_[request_id] = base::MakeUnique<PendingRequestInfo>( |
629 std::move(peer), request->resource_type, request->origin_pid, | 630 std::move(peer), request->resource_type, request->origin_pid, |
630 frame_origin, request->url, request->download_to_file); | 631 frame_origin, request->url, request->download_to_file); |
631 | 632 |
632 if (resource_scheduling_filter_.get() && loading_task_runner) { | 633 if (resource_scheduling_filter_.get() && loading_task_runner) { |
633 resource_scheduling_filter_->SetRequestIdTaskRunner(request_id, | 634 resource_scheduling_filter_->SetRequestIdTaskRunner(request_id, |
634 loading_task_runner); | 635 loading_task_runner); |
635 } | 636 } |
636 | 637 |
638 scoped_refptr<base::SingleThreadTaskRunner> task_runner = | |
639 loading_task_runner ? loading_task_runner : main_thread_task_runner_; | |
640 | |
641 if (consumer_handle.is_valid()) { | |
642 std::unique_ptr<URLLoaderClientImpl> client( | |
643 new URLLoaderClientImpl(request_id, this, task_runner)); | |
644 pending_requests_[request_id]->url_loader_client = std::move(client); | |
dcheng
2017/04/12 21:18:16
Nit:
pending_requested_[request_id]->url_loader_cl
scottmg
2017/04/12 21:28:50
Done.
| |
645 | |
646 task_runner->PostTask(FROM_HERE, | |
647 base::Bind(&ResourceDispatcher::ContinueForNavigation, | |
648 weak_factory_.GetWeakPtr(), request_id, | |
649 base::Passed(std::move(consumer_handle)))); | |
650 | |
651 return request_id; | |
652 } | |
653 | |
637 if (ipc_type == blink::WebURLRequest::LoadingIPCType::kMojo) { | 654 if (ipc_type == blink::WebURLRequest::LoadingIPCType::kMojo) { |
638 scoped_refptr<base::SingleThreadTaskRunner> task_runner = | 655 scoped_refptr<base::SingleThreadTaskRunner> task_runner = |
639 loading_task_runner ? loading_task_runner : main_thread_task_runner_; | 656 loading_task_runner ? loading_task_runner : main_thread_task_runner_; |
640 std::unique_ptr<URLLoaderClientImpl> client( | 657 std::unique_ptr<URLLoaderClientImpl> client( |
641 new URLLoaderClientImpl(request_id, this, std::move(task_runner))); | 658 new URLLoaderClientImpl(request_id, this, std::move(task_runner))); |
642 mojom::URLLoaderAssociatedPtr url_loader; | 659 mojom::URLLoaderAssociatedPtr url_loader; |
643 mojom::URLLoaderClientPtr client_ptr; | 660 mojom::URLLoaderClientPtr client_ptr; |
644 client->Bind(&client_ptr); | 661 client->Bind(&client_ptr); |
645 url_loader_factory->CreateLoaderAndStart(MakeRequest(&url_loader), | 662 url_loader_factory->CreateLoaderAndStart(MakeRequest(&url_loader), |
646 routing_id, request_id, *request, | 663 routing_id, request_id, *request, |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
728 } | 745 } |
729 | 746 |
730 base::TimeTicks ResourceDispatcher::ConsumeIOTimestamp() { | 747 base::TimeTicks ResourceDispatcher::ConsumeIOTimestamp() { |
731 if (io_timestamp_ == base::TimeTicks()) | 748 if (io_timestamp_ == base::TimeTicks()) |
732 return base::TimeTicks::Now(); | 749 return base::TimeTicks::Now(); |
733 base::TimeTicks result = io_timestamp_; | 750 base::TimeTicks result = io_timestamp_; |
734 io_timestamp_ = base::TimeTicks(); | 751 io_timestamp_ = base::TimeTicks(); |
735 return result; | 752 return result; |
736 } | 753 } |
737 | 754 |
755 void ResourceDispatcher::ContinueForNavigation( | |
756 int request_id, | |
757 mojo::ScopedDataPipeConsumerHandle consumer_handle) { | |
758 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id); | |
759 if (!request_info) | |
760 return; | |
761 | |
762 URLLoaderClientImpl* client_ptr = request_info->url_loader_client.get(); | |
763 | |
764 // Short circuiting call to OnReceivedResponse to immediately start | |
765 // the request. ResourceResponseHead can be empty here because we | |
766 // pull the StreamOverride's one in | |
767 // WebURLLoaderImpl::Context::OnReceivedResponse. | |
768 client_ptr->OnReceiveResponse(ResourceResponseHead(), | |
769 mojom::DownloadedTempFilePtr()); | |
770 // Start streaming now. | |
771 client_ptr->OnStartLoadingResponseBody(std::move(consumer_handle)); | |
772 | |
773 // Call OnComplete now too, as it won't get called on the client. | |
774 // TODO(kinuko): Fill this properly. | |
775 ResourceRequestCompletionStatus completion_status; | |
776 completion_status.error_code = net::OK; | |
777 completion_status.was_ignored_by_handler = false; | |
778 completion_status.exists_in_cache = false; | |
779 completion_status.completion_time = base::TimeTicks::Now(); | |
780 completion_status.encoded_data_length = -1; | |
781 completion_status.encoded_body_length = -1; | |
782 client_ptr->OnComplete(completion_status); | |
783 } | |
784 | |
738 // static | 785 // static |
739 bool ResourceDispatcher::IsResourceDispatcherMessage( | 786 bool ResourceDispatcher::IsResourceDispatcherMessage( |
740 const IPC::Message& message) { | 787 const IPC::Message& message) { |
741 switch (message.type()) { | 788 switch (message.type()) { |
742 case ResourceMsg_UploadProgress::ID: | 789 case ResourceMsg_UploadProgress::ID: |
743 case ResourceMsg_ReceivedResponse::ID: | 790 case ResourceMsg_ReceivedResponse::ID: |
744 case ResourceMsg_ReceivedCachedMetadata::ID: | 791 case ResourceMsg_ReceivedCachedMetadata::ID: |
745 case ResourceMsg_ReceivedRedirect::ID: | 792 case ResourceMsg_ReceivedRedirect::ID: |
746 case ResourceMsg_SetDataBuffer::ID: | 793 case ResourceMsg_SetDataBuffer::ID: |
747 case ResourceMsg_DataReceived::ID: | 794 case ResourceMsg_DataReceived::ID: |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
788 delete message; | 835 delete message; |
789 } | 836 } |
790 } | 837 } |
791 | 838 |
792 void ResourceDispatcher::SetResourceSchedulingFilter( | 839 void ResourceDispatcher::SetResourceSchedulingFilter( |
793 scoped_refptr<ResourceSchedulingFilter> resource_scheduling_filter) { | 840 scoped_refptr<ResourceSchedulingFilter> resource_scheduling_filter) { |
794 resource_scheduling_filter_ = resource_scheduling_filter; | 841 resource_scheduling_filter_ = resource_scheduling_filter; |
795 } | 842 } |
796 | 843 |
797 } // namespace content | 844 } // namespace content |
OLD | NEW |