| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/url_loader_client_impl.h" | 5 #include "content/child/url_loader_client_impl.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/single_thread_task_runner.h" | 8 #include "base/single_thread_task_runner.h" |
| 9 #include "content/child/resource_dispatcher.h" | 9 #include "content/child/resource_dispatcher.h" |
| 10 #include "content/child/url_response_body_consumer.h" | 10 #include "content/child/url_response_body_consumer.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 DCHECK_EQ(messages.back().type(), | 107 DCHECK_EQ(messages.back().type(), |
| 108 static_cast<uint32_t>(ResourceMsg_RequestComplete::ID)); | 108 static_cast<uint32_t>(ResourceMsg_RequestComplete::ID)); |
| 109 Dispatch(messages.back()); | 109 Dispatch(messages.back()); |
| 110 } | 110 } |
| 111 } | 111 } |
| 112 | 112 |
| 113 void URLLoaderClientImpl::OnReceiveResponse( | 113 void URLLoaderClientImpl::OnReceiveResponse( |
| 114 const ResourceResponseHead& response_head, | 114 const ResourceResponseHead& response_head, |
| 115 mojom::DownloadedTempFilePtr downloaded_file) { | 115 mojom::DownloadedTempFilePtr downloaded_file) { |
| 116 has_received_response_ = true; | 116 has_received_response_ = true; |
| 117 if (body_consumer_) | |
| 118 body_consumer_->Start(); | |
| 119 downloaded_file_ = std::move(downloaded_file); | 117 downloaded_file_ = std::move(downloaded_file); |
| 120 Dispatch(ResourceMsg_ReceivedResponse(request_id_, response_head)); | 118 Dispatch(ResourceMsg_ReceivedResponse(request_id_, response_head)); |
| 121 } | 119 } |
| 122 | 120 |
| 123 void URLLoaderClientImpl::OnReceiveRedirect( | 121 void URLLoaderClientImpl::OnReceiveRedirect( |
| 124 const net::RedirectInfo& redirect_info, | 122 const net::RedirectInfo& redirect_info, |
| 125 const ResourceResponseHead& response_head) { | 123 const ResourceResponseHead& response_head) { |
| 126 DCHECK(!has_received_response_); | 124 DCHECK(!has_received_response_); |
| 127 DCHECK(!body_consumer_); | 125 DCHECK(!body_consumer_); |
| 128 Dispatch( | 126 Dispatch( |
| (...skipping 10 matching lines...) Expand all Loading... |
| 139 accumulated_transfer_size_diff_during_deferred_ += transfer_size_diff; | 137 accumulated_transfer_size_diff_during_deferred_ += transfer_size_diff; |
| 140 } else { | 138 } else { |
| 141 resource_dispatcher_->OnTransferSizeUpdated(request_id_, | 139 resource_dispatcher_->OnTransferSizeUpdated(request_id_, |
| 142 transfer_size_diff); | 140 transfer_size_diff); |
| 143 } | 141 } |
| 144 } | 142 } |
| 145 | 143 |
| 146 void URLLoaderClientImpl::OnStartLoadingResponseBody( | 144 void URLLoaderClientImpl::OnStartLoadingResponseBody( |
| 147 mojo::ScopedDataPipeConsumerHandle body) { | 145 mojo::ScopedDataPipeConsumerHandle body) { |
| 148 DCHECK(!body_consumer_); | 146 DCHECK(!body_consumer_); |
| 147 DCHECK(has_received_response_); |
| 149 body_consumer_ = new URLResponseBodyConsumer( | 148 body_consumer_ = new URLResponseBodyConsumer( |
| 150 request_id_, resource_dispatcher_, std::move(body), task_runner_); | 149 request_id_, resource_dispatcher_, std::move(body), task_runner_); |
| 151 if (has_received_response_) | |
| 152 body_consumer_->Start(); | |
| 153 if (is_deferred_) | 150 if (is_deferred_) |
| 154 body_consumer_->SetDefersLoading(); | 151 body_consumer_->SetDefersLoading(); |
| 155 } | 152 } |
| 156 | 153 |
| 157 void URLLoaderClientImpl::OnComplete( | 154 void URLLoaderClientImpl::OnComplete( |
| 158 const ResourceRequestCompletionStatus& status) { | 155 const ResourceRequestCompletionStatus& status) { |
| 159 if (!body_consumer_) { | 156 if (!body_consumer_) { |
| 160 Dispatch(ResourceMsg_RequestComplete(request_id_, status)); | 157 Dispatch(ResourceMsg_RequestComplete(request_id_, status)); |
| 161 return; | 158 return; |
| 162 } | 159 } |
| 163 body_consumer_->OnComplete(status); | 160 body_consumer_->OnComplete(status); |
| 164 } | 161 } |
| 165 | 162 |
| 166 void URLLoaderClientImpl::Dispatch(const IPC::Message& message) { | 163 void URLLoaderClientImpl::Dispatch(const IPC::Message& message) { |
| 167 if (is_deferred_) { | 164 if (is_deferred_) { |
| 168 deferred_messages_.push_back(message); | 165 deferred_messages_.push_back(message); |
| 169 } else if (deferred_messages_.size() > 0) { | 166 } else if (deferred_messages_.size() > 0) { |
| 170 deferred_messages_.push_back(message); | 167 deferred_messages_.push_back(message); |
| 171 FlushDeferredMessages(); | 168 FlushDeferredMessages(); |
| 172 } else { | 169 } else { |
| 173 resource_dispatcher_->DispatchMessage(message); | 170 resource_dispatcher_->DispatchMessage(message); |
| 174 } | 171 } |
| 175 } | 172 } |
| 176 | 173 |
| 177 } // namespace content | 174 } // namespace content |
| OLD | NEW |