Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(624)

Side by Side Diff: components/cronet/android/url_request_adapter.cc

Issue 2261103002: Use modified URLRequest::Read() and delegate methods in components/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@URLRequestRead
Patch Set: comments Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "components/cronet/android/url_request_adapter.h" 5 #include "components/cronet/android/url_request_adapter.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <string.h> 8 #include <string.h>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 203
204 // static 204 // static
205 void URLRequestAdapter::OnDestroyRequest(URLRequestAdapter* self) { 205 void URLRequestAdapter::OnDestroyRequest(URLRequestAdapter* self) {
206 DCHECK(self->OnNetworkThread()); 206 DCHECK(self->OnNetworkThread());
207 VLOG(1) << "Destroying chromium request: " 207 VLOG(1) << "Destroying chromium request: "
208 << self->url_.possibly_invalid_spec(); 208 << self->url_.possibly_invalid_spec();
209 delete self; 209 delete self;
210 } 210 }
211 211
212 // static 212 // static
213 void URLRequestAdapter::OnResponseStarted(net::URLRequest* request) { 213 void URLRequestAdapter::OnResponseStarted(net::URLRequest* request,
214 int net_error) {
215 DCHECK_NE(net::ERR_IO_PENDING, net_error);
214 DCHECK(OnNetworkThread()); 216 DCHECK(OnNetworkThread());
215 if (request->status().status() != net::URLRequestStatus::SUCCESS) { 217
216 OnRequestFailed(); 218 if (net_error != net::OK) {
219 OnRequestFailed(net_error);
217 return; 220 return;
218 } 221 }
219 222
220 http_status_code_ = request->GetResponseCode(); 223 http_status_code_ = request->GetResponseCode();
221 VLOG(1) << "Response started with status: " << http_status_code_; 224 VLOG(1) << "Response started with status: " << http_status_code_;
222 225
223 net::HttpResponseHeaders* headers = request->response_headers(); 226 net::HttpResponseHeaders* headers = request->response_headers();
224 if (headers) 227 if (headers)
225 http_status_text_ = headers->GetStatusText(); 228 http_status_text_ = headers->GetStatusText();
226 229
227 request->GetResponseHeaderByName("Content-Type", &content_type_); 230 request->GetResponseHeaderByName("Content-Type", &content_type_);
228 expected_size_ = request->GetExpectedContentSize(); 231 expected_size_ = request->GetExpectedContentSize();
229 delegate_->OnResponseStarted(this); 232 delegate_->OnResponseStarted(this);
230 233
231 Read(); 234 Read();
232 } 235 }
233 236
234 // Reads all available data or starts an asynchronous read. 237 // Reads all available data or starts an asynchronous read.
235 void URLRequestAdapter::Read() { 238 void URLRequestAdapter::Read() {
236 DCHECK(OnNetworkThread()); 239 DCHECK(OnNetworkThread());
237 if (!read_buffer_.get()) 240 if (!read_buffer_.get())
238 read_buffer_ = new net::IOBufferWithSize(kReadBufferSize); 241 read_buffer_ = new net::IOBufferWithSize(kReadBufferSize);
239 242
240 while(true) { 243 while(true) {
241 int bytes_read = 0; 244 int result = url_request_->Read(read_buffer_.get(), kReadBufferSize);
242 url_request_->Read(read_buffer_.get(), kReadBufferSize, &bytes_read);
243 // If IO is pending, wait for the URLRequest to call OnReadCompleted. 245 // If IO is pending, wait for the URLRequest to call OnReadCompleted.
244 if (url_request_->status().is_io_pending()) 246 if (result == net::ERR_IO_PENDING)
245 return; 247 return;
246 // Stop when request has failed or succeeded. 248 // Stop when request has failed or succeeded.
247 if (!HandleReadResult(bytes_read)) 249 if (!HandleReadResult(result))
248 return; 250 return;
249 } 251 }
250 } 252 }
251 253
252 bool URLRequestAdapter::HandleReadResult(int bytes_read) { 254 bool URLRequestAdapter::HandleReadResult(int result) {
253 DCHECK(OnNetworkThread()); 255 DCHECK(OnNetworkThread());
254 if (!url_request_->status().is_success()) { 256 if (result < 0) {
255 OnRequestFailed(); 257 OnRequestFailed(result);
256 return false; 258 return false;
257 } else if (bytes_read == 0) { 259 }
260
261 if (result == 0) {
258 OnRequestSucceeded(); 262 OnRequestSucceeded();
259 return false; 263 return false;
260 } 264 }
261 265
262 total_bytes_read_ += bytes_read; 266 total_bytes_read_ += result;
263 delegate_->OnBytesRead(this, bytes_read); 267 delegate_->OnBytesRead(this, result);
264 268
265 return true; 269 return true;
266 } 270 }
267 271
268 void URLRequestAdapter::OnReadCompleted(net::URLRequest* request, 272 void URLRequestAdapter::OnReadCompleted(net::URLRequest* request,
269 int bytes_read) { 273 int bytes_read) {
274 DCHECK_NE(net::ERR_IO_PENDING, bytes_read);
270 if (!HandleReadResult(bytes_read)) 275 if (!HandleReadResult(bytes_read))
271 return; 276 return;
272 277
273 Read(); 278 Read();
274 } 279 }
275 280
276 void URLRequestAdapter::OnReceivedRedirect(net::URLRequest* request, 281 void URLRequestAdapter::OnReceivedRedirect(net::URLRequest* request,
277 const net::RedirectInfo& info, 282 const net::RedirectInfo& info,
278 bool* defer_redirect) { 283 bool* defer_redirect) {
279 DCHECK(OnNetworkThread()); 284 DCHECK(OnNetworkThread());
(...skipping 12 matching lines...) Expand all
292 if (canceled_) { 297 if (canceled_) {
293 return; 298 return;
294 } 299 }
295 300
296 VLOG(1) << "Request completed with HTTP status: " << http_status_code_ 301 VLOG(1) << "Request completed with HTTP status: " << http_status_code_
297 << ". Total bytes read: " << total_bytes_read_; 302 << ". Total bytes read: " << total_bytes_read_;
298 303
299 OnRequestCompleted(); 304 OnRequestCompleted();
300 } 305 }
301 306
302 void URLRequestAdapter::OnRequestFailed() { 307 void URLRequestAdapter::OnRequestFailed(int net_error) {
308 DCHECK_LE(net_error, 0);
309 DCHECK_NE(net::ERR_IO_PENDING, net_error);
303 DCHECK(OnNetworkThread()); 310 DCHECK(OnNetworkThread());
304 if (canceled_) { 311 if (canceled_) {
305 return; 312 return;
306 } 313 }
307 314
308 error_code_ = url_request_->status().error(); 315 error_code_ = net_error;
309 VLOG(1) << "Request failed with status: " << url_request_->status().status() 316 VLOG(1) << "Request failed with error: " << net::ErrorToString(error_code_);
310 << " and error: " << net::ErrorToString(error_code_);
311 OnRequestCompleted(); 317 OnRequestCompleted();
312 } 318 }
313 319
314 void URLRequestAdapter::OnRequestCompleted() { 320 void URLRequestAdapter::OnRequestCompleted() {
315 DCHECK(OnNetworkThread()); 321 DCHECK(OnNetworkThread());
316 VLOG(1) << "Completed: " << url_.possibly_invalid_spec(); 322 VLOG(1) << "Completed: " << url_.possibly_invalid_spec();
317 323
318 DCHECK(url_request_ != nullptr); 324 DCHECK(url_request_ != nullptr);
319 325
320 delegate_->OnRequestFinished(this); 326 delegate_->OnRequestFinished(this);
321 url_request_.reset(); 327 url_request_.reset();
322 } 328 }
323 329
324 unsigned char* URLRequestAdapter::Data() const { 330 unsigned char* URLRequestAdapter::Data() const {
325 DCHECK(OnNetworkThread()); 331 DCHECK(OnNetworkThread());
326 return reinterpret_cast<unsigned char*>(read_buffer_->data()); 332 return reinterpret_cast<unsigned char*>(read_buffer_->data());
327 } 333 }
328 334
329 bool URLRequestAdapter::OnNetworkThread() const { 335 bool URLRequestAdapter::OnNetworkThread() const {
330 return context_->GetNetworkTaskRunner()->BelongsToCurrentThread(); 336 return context_->GetNetworkTaskRunner()->BelongsToCurrentThread();
331 } 337 }
332 338
333 } // namespace cronet 339 } // namespace cronet
OLDNEW
« no previous file with comments | « components/cronet/android/url_request_adapter.h ('k') | components/cronet/android/url_request_context_adapter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698