| 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 17 matching lines...) Expand all Loading... |
| 146 accumulated_transfer_size_diff_during_deferred_ += transfer_size_diff; | 144 accumulated_transfer_size_diff_during_deferred_ += transfer_size_diff; |
| 147 } else { | 145 } else { |
| 148 resource_dispatcher_->OnTransferSizeUpdated(request_id_, | 146 resource_dispatcher_->OnTransferSizeUpdated(request_id_, |
| 149 transfer_size_diff); | 147 transfer_size_diff); |
| 150 } | 148 } |
| 151 } | 149 } |
| 152 | 150 |
| 153 void URLLoaderClientImpl::OnStartLoadingResponseBody( | 151 void URLLoaderClientImpl::OnStartLoadingResponseBody( |
| 154 mojo::ScopedDataPipeConsumerHandle body) { | 152 mojo::ScopedDataPipeConsumerHandle body) { |
| 155 DCHECK(!body_consumer_); | 153 DCHECK(!body_consumer_); |
| 154 DCHECK(has_received_response_); |
| 156 body_consumer_ = new URLResponseBodyConsumer( | 155 body_consumer_ = new URLResponseBodyConsumer( |
| 157 request_id_, resource_dispatcher_, std::move(body), task_runner_); | 156 request_id_, resource_dispatcher_, std::move(body), task_runner_); |
| 158 if (has_received_response_) | |
| 159 body_consumer_->Start(); | |
| 160 if (is_deferred_) | 157 if (is_deferred_) |
| 161 body_consumer_->SetDefersLoading(); | 158 body_consumer_->SetDefersLoading(); |
| 162 } | 159 } |
| 163 | 160 |
| 164 void URLLoaderClientImpl::OnComplete( | 161 void URLLoaderClientImpl::OnComplete( |
| 165 const ResourceRequestCompletionStatus& status) { | 162 const ResourceRequestCompletionStatus& status) { |
| 166 if (!body_consumer_) { | 163 if (!body_consumer_) { |
| 167 Dispatch(ResourceMsg_RequestComplete(request_id_, status)); | 164 Dispatch(ResourceMsg_RequestComplete(request_id_, status)); |
| 168 return; | 165 return; |
| 169 } | 166 } |
| 170 body_consumer_->OnComplete(status); | 167 body_consumer_->OnComplete(status); |
| 171 } | 168 } |
| 172 | 169 |
| 173 void URLLoaderClientImpl::Dispatch(const IPC::Message& message) { | 170 void URLLoaderClientImpl::Dispatch(const IPC::Message& message) { |
| 174 if (is_deferred_) { | 171 if (is_deferred_) { |
| 175 deferred_messages_.push_back(message); | 172 deferred_messages_.push_back(message); |
| 176 } else if (deferred_messages_.size() > 0) { | 173 } else if (deferred_messages_.size() > 0) { |
| 177 deferred_messages_.push_back(message); | 174 deferred_messages_.push_back(message); |
| 178 FlushDeferredMessages(); | 175 FlushDeferredMessages(); |
| 179 } else { | 176 } else { |
| 180 resource_dispatcher_->DispatchMessage(message); | 177 resource_dispatcher_->DispatchMessage(message); |
| 181 } | 178 } |
| 182 } | 179 } |
| 183 | 180 |
| 184 } // namespace content | 181 } // namespace content |
| OLD | NEW |