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 |