OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "content/child/web_url_loader_impl.h" | 5 #include "content/child/web_url_loader_impl.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
598 (url.has_username() || url.has_password())) { | 598 (url.has_username() || url.has_password())) { |
599 resource_request->do_not_prompt_for_login = true; | 599 resource_request->do_not_prompt_for_login = true; |
600 } | 600 } |
601 resource_request->report_raw_headers = request.reportRawHeaders(); | 601 resource_request->report_raw_headers = request.reportRawHeaders(); |
602 resource_request->previews_state = | 602 resource_request->previews_state = |
603 static_cast<PreviewsState>(request.getPreviewsState()); | 603 static_cast<PreviewsState>(request.getPreviewsState()); |
604 | 604 |
605 // PlzNavigate: during navigation, the renderer should request a stream which | 605 // PlzNavigate: during navigation, the renderer should request a stream which |
606 // contains the body of the response. The network request has already been | 606 // contains the body of the response. The network request has already been |
607 // made by the browser. | 607 // made by the browser. |
| 608 mojo::ScopedDataPipeConsumerHandle consumer_handle; |
608 if (stream_override_.get()) { | 609 if (stream_override_.get()) { |
609 CHECK(IsBrowserSideNavigationEnabled()); | 610 CHECK(IsBrowserSideNavigationEnabled()); |
610 DCHECK(!sync_load_response); | 611 DCHECK(!sync_load_response); |
611 DCHECK_NE(WebURLRequest::FrameTypeNone, request.getFrameType()); | 612 DCHECK_NE(WebURLRequest::FrameTypeNone, request.getFrameType()); |
612 resource_request->resource_body_stream_url = stream_override_->stream_url; | 613 consumer_handle = std::move(stream_override_->consumer_handle); |
613 } | 614 } |
614 | 615 |
615 const RequestExtraData empty_extra_data; | 616 const RequestExtraData empty_extra_data; |
616 const RequestExtraData* extra_data; | 617 const RequestExtraData* extra_data; |
617 if (request.getExtraData()) | 618 if (request.getExtraData()) |
618 extra_data = static_cast<RequestExtraData*>(request.getExtraData()); | 619 extra_data = static_cast<RequestExtraData*>(request.getExtraData()); |
619 else | 620 else |
620 extra_data = &empty_extra_data; | 621 extra_data = &empty_extra_data; |
621 extra_data->CopyToResourceRequest(resource_request.get()); | 622 extra_data->CopyToResourceRequest(resource_request.get()); |
622 | 623 |
623 if (sync_load_response) { | 624 if (sync_load_response) { |
624 DCHECK(defers_loading_ == NOT_DEFERRING); | 625 DCHECK(defers_loading_ == NOT_DEFERRING); |
625 resource_dispatcher_->StartSync( | 626 resource_dispatcher_->StartSync( |
626 std::move(resource_request), request.requestorID(), sync_load_response, | 627 std::move(resource_request), request.requestorID(), sync_load_response, |
627 request.getLoadingIPCType(), url_loader_factory_); | 628 request.getLoadingIPCType(), url_loader_factory_); |
628 return; | 629 return; |
629 } | 630 } |
630 | 631 |
631 TRACE_EVENT_WITH_FLOW0("loading", "WebURLLoaderImpl::Context::Start", this, | 632 TRACE_EVENT_WITH_FLOW0("loading", "WebURLLoaderImpl::Context::Start", this, |
632 TRACE_EVENT_FLAG_FLOW_OUT); | 633 TRACE_EVENT_FLAG_FLOW_OUT); |
633 request_id_ = resource_dispatcher_->StartAsync( | 634 request_id_ = resource_dispatcher_->StartAsync( |
634 std::move(resource_request), request.requestorID(), task_runner_, | 635 std::move(resource_request), request.requestorID(), task_runner_, |
635 extra_data->frame_origin(), | 636 extra_data->frame_origin(), |
636 base::MakeUnique<WebURLLoaderImpl::RequestPeerImpl>(this), | 637 base::MakeUnique<WebURLLoaderImpl::RequestPeerImpl>(this), |
637 request.getLoadingIPCType(), url_loader_factory_); | 638 request.getLoadingIPCType(), url_loader_factory_, |
| 639 std::move(consumer_handle)); |
638 | 640 |
639 if (defers_loading_ != NOT_DEFERRING) | 641 if (defers_loading_ != NOT_DEFERRING) |
640 resource_dispatcher_->SetDefersLoading(request_id_, true); | 642 resource_dispatcher_->SetDefersLoading(request_id_, true); |
641 } | 643 } |
642 | 644 |
643 void WebURLLoaderImpl::Context::SetTaskRunner( | 645 void WebURLLoaderImpl::Context::SetTaskRunner( |
644 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { | 646 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { |
645 task_runner_ = task_runner; | 647 task_runner_ = task_runner; |
646 } | 648 } |
647 | 649 |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
794 client_->didDownloadData(len, encoded_data_length); | 796 client_->didDownloadData(len, encoded_data_length); |
795 } | 797 } |
796 | 798 |
797 void WebURLLoaderImpl::Context::OnReceivedData( | 799 void WebURLLoaderImpl::Context::OnReceivedData( |
798 std::unique_ptr<ReceivedData> data) { | 800 std::unique_ptr<ReceivedData> data) { |
799 const char* payload = data->payload(); | 801 const char* payload = data->payload(); |
800 int data_length = data->length(); | 802 int data_length = data->length(); |
801 if (!client_) | 803 if (!client_) |
802 return; | 804 return; |
803 | 805 |
| 806 if (stream_override_.get()) |
| 807 stream_override_->total_transferred += data_length; |
| 808 |
804 TRACE_EVENT_WITH_FLOW0( | 809 TRACE_EVENT_WITH_FLOW0( |
805 "loading", "WebURLLoaderImpl::Context::OnReceivedData", | 810 "loading", "WebURLLoaderImpl::Context::OnReceivedData", |
806 this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); | 811 this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); |
807 | 812 |
808 if (ftp_listing_delegate_) { | 813 if (ftp_listing_delegate_) { |
809 // The FTP listing delegate will make the appropriate calls to | 814 // The FTP listing delegate will make the appropriate calls to |
810 // client_->didReceiveData and client_->didReceiveResponse. | 815 // client_->didReceiveData and client_->didReceiveResponse. |
811 ftp_listing_delegate_->OnReceivedData(payload, data_length); | 816 ftp_listing_delegate_->OnReceivedData(payload, data_length); |
812 } else { | 817 } else { |
813 // We dispatch the data even when |useStreamOnResponse()| is set, in order | 818 // We dispatch the data even when |useStreamOnResponse()| is set, in order |
(...skipping 22 matching lines...) Expand all Loading... |
836 client_->didReceiveCachedMetadata(data, len); | 841 client_->didReceiveCachedMetadata(data, len); |
837 } | 842 } |
838 | 843 |
839 void WebURLLoaderImpl::Context::OnCompletedRequest( | 844 void WebURLLoaderImpl::Context::OnCompletedRequest( |
840 int error_code, | 845 int error_code, |
841 bool was_ignored_by_handler, | 846 bool was_ignored_by_handler, |
842 bool stale_copy_in_cache, | 847 bool stale_copy_in_cache, |
843 const base::TimeTicks& completion_time, | 848 const base::TimeTicks& completion_time, |
844 int64_t total_transfer_size, | 849 int64_t total_transfer_size, |
845 int64_t encoded_body_size) { | 850 int64_t encoded_body_size) { |
| 851 if (stream_override_.get()) { |
| 852 // XXX This is wrong. |
| 853 total_transfer_size = stream_override_->total_transferred; |
| 854 encoded_body_size = stream_override_->total_transferred; |
| 855 } |
| 856 |
846 if (ftp_listing_delegate_) { | 857 if (ftp_listing_delegate_) { |
847 ftp_listing_delegate_->OnCompletedRequest(); | 858 ftp_listing_delegate_->OnCompletedRequest(); |
848 ftp_listing_delegate_.reset(NULL); | 859 ftp_listing_delegate_.reset(NULL); |
849 } | 860 } |
850 | 861 |
851 if (body_stream_writer_ && error_code != net::OK) | 862 if (body_stream_writer_ && error_code != net::OK) |
852 body_stream_writer_->Fail(); | 863 body_stream_writer_->Fail(); |
853 body_stream_writer_.reset(); | 864 body_stream_writer_.reset(); |
854 | 865 |
855 if (client_) { | 866 if (client_) { |
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1249 int intra_priority_value) { | 1260 int intra_priority_value) { |
1250 context_->DidChangePriority(new_priority, intra_priority_value); | 1261 context_->DidChangePriority(new_priority, intra_priority_value); |
1251 } | 1262 } |
1252 | 1263 |
1253 void WebURLLoaderImpl::setLoadingTaskRunner( | 1264 void WebURLLoaderImpl::setLoadingTaskRunner( |
1254 base::SingleThreadTaskRunner* loading_task_runner) { | 1265 base::SingleThreadTaskRunner* loading_task_runner) { |
1255 context_->SetTaskRunner(loading_task_runner); | 1266 context_->SetTaskRunner(loading_task_runner); |
1256 } | 1267 } |
1257 | 1268 |
1258 } // namespace content | 1269 } // namespace content |
OLD | NEW |