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 |