| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "net/url_request/url_request_job.h" | 5 #include "net/url_request/url_request_job.h" |
| 6 | 6 |
| 7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "googleurl/src/gurl.h" | 9 #include "googleurl/src/gurl.h" |
| 10 #include "net/base/auth.h" | 10 #include "net/base/auth.h" |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 // Reference the |ref| directly out of the original URL to avoid a | 330 // Reference the |ref| directly out of the original URL to avoid a |
| 331 // malloc. | 331 // malloc. |
| 332 replacements.SetRef(url.spec().data(), | 332 replacements.SetRef(url.spec().data(), |
| 333 url.parsed_for_possibly_invalid_spec().ref); | 333 url.parsed_for_possibly_invalid_spec().ref); |
| 334 new_location = new_location.ReplaceComponents(replacements); | 334 new_location = new_location.ReplaceComponents(replacements); |
| 335 } | 335 } |
| 336 | 336 |
| 337 // Toggle this flag to true so the consumer can access response headers. | 337 // Toggle this flag to true so the consumer can access response headers. |
| 338 // Then toggle it back if we choose to follow the redirect. | 338 // Then toggle it back if we choose to follow the redirect. |
| 339 has_handled_response_ = true; | 339 has_handled_response_ = true; |
| 340 request_->delegate()->OnReceivedRedirect(request_, new_location); | 340 request_->ReceivedRedirect(new_location); |
| 341 | 341 |
| 342 // Ensure that the request wasn't destroyed in OnReceivedRedirect | 342 // Ensure that the request wasn't detached or destroyed in ReceivedRedirect |
| 343 if (!request_ || !request_->delegate()) | 343 if (!request_ || !request_->delegate()) |
| 344 return; | 344 return; |
| 345 | 345 |
| 346 // If we were not cancelled, then follow the redirect. | 346 // If we were not cancelled, then follow the redirect. |
| 347 if (request_->status().is_success()) { | 347 if (request_->status().is_success()) { |
| 348 has_handled_response_ = false; | 348 has_handled_response_ = false; |
| 349 FollowRedirect(new_location, http_status_code); | 349 FollowRedirect(new_location, http_status_code); |
| 350 return; | 350 return; |
| 351 } | 351 } |
| 352 } else if (NeedsAuth()) { | 352 } else if (NeedsAuth()) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 365 if (request_->status().is_success()) | 365 if (request_->status().is_success()) |
| 366 SetupFilter(); | 366 SetupFilter(); |
| 367 | 367 |
| 368 if (!filter_.get()) { | 368 if (!filter_.get()) { |
| 369 std::string content_length; | 369 std::string content_length; |
| 370 request_->GetResponseHeaderByName("content-length", &content_length); | 370 request_->GetResponseHeaderByName("content-length", &content_length); |
| 371 if (!content_length.empty()) | 371 if (!content_length.empty()) |
| 372 expected_content_size_ = StringToInt64(content_length); | 372 expected_content_size_ = StringToInt64(content_length); |
| 373 } | 373 } |
| 374 | 374 |
| 375 request_->delegate()->OnResponseStarted(request_); | 375 request_->ResponseStarted(); |
| 376 } | 376 } |
| 377 | 377 |
| 378 void URLRequestJob::NotifyStartError(const URLRequestStatus &status) { | 378 void URLRequestJob::NotifyStartError(const URLRequestStatus &status) { |
| 379 DCHECK(!has_handled_response_); | 379 DCHECK(!has_handled_response_); |
| 380 has_handled_response_ = true; | 380 has_handled_response_ = true; |
| 381 if (request_) { | 381 if (request_) { |
| 382 request_->set_status(status); | 382 request_->set_status(status); |
| 383 if (request_->delegate()) | 383 request_->ResponseStarted(); |
| 384 request_->delegate()->OnResponseStarted(request_); | |
| 385 } | 384 } |
| 386 } | 385 } |
| 387 | 386 |
| 388 void URLRequestJob::NotifyReadComplete(int bytes_read) { | 387 void URLRequestJob::NotifyReadComplete(int bytes_read) { |
| 389 if (!request_ || !request_->delegate()) | 388 if (!request_ || !request_->delegate()) |
| 390 return; // The request was destroyed, so there is no more work to do. | 389 return; // The request was destroyed, so there is no more work to do. |
| 391 | 390 |
| 392 // TODO(darin): Bug 1004233. Re-enable this test once all of the chrome | 391 // TODO(darin): Bug 1004233. Re-enable this test once all of the chrome |
| 393 // unit_tests have been fixed to not trip this. | 392 // unit_tests have been fixed to not trip this. |
| 394 //DCHECK(!request_->status().is_io_pending()); | 393 //DCHECK(!request_->status().is_io_pending()); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 if (request_ && | 474 if (request_ && |
| 476 !request_->status().is_success() && | 475 !request_->status().is_success() && |
| 477 request_->delegate()) { | 476 request_->delegate()) { |
| 478 // We report the error differently depending on whether we've called | 477 // We report the error differently depending on whether we've called |
| 479 // OnResponseStarted yet. | 478 // OnResponseStarted yet. |
| 480 if (has_handled_response_) { | 479 if (has_handled_response_) { |
| 481 // We signal the error by calling OnReadComplete with a bytes_read of -1. | 480 // We signal the error by calling OnReadComplete with a bytes_read of -1. |
| 482 request_->delegate()->OnReadCompleted(request_, -1); | 481 request_->delegate()->OnReadCompleted(request_, -1); |
| 483 } else { | 482 } else { |
| 484 has_handled_response_ = true; | 483 has_handled_response_ = true; |
| 485 request_->delegate()->OnResponseStarted(request_); | 484 request_->ResponseStarted(); |
| 486 } | 485 } |
| 487 } | 486 } |
| 488 } | 487 } |
| 489 | 488 |
| 490 void URLRequestJob::NotifyCanceled() { | 489 void URLRequestJob::NotifyCanceled() { |
| 491 if (!done_) { | 490 if (!done_) { |
| 492 NotifyDone(URLRequestStatus(URLRequestStatus::CANCELED, | 491 NotifyDone(URLRequestStatus(URLRequestStatus::CANCELED, |
| 493 net::ERR_ABORTED)); | 492 net::ERR_ABORTED)); |
| 494 } | 493 } |
| 495 } | 494 } |
| 496 | 495 |
| 496 void URLRequestJob::NotifyRestartRequired() { |
| 497 DCHECK(!has_handled_response_); |
| 498 if (GetStatus().status() != URLRequestStatus::CANCELED) |
| 499 request_->Restart(); |
| 500 } |
| 501 |
| 497 bool URLRequestJob::FilterHasData() { | 502 bool URLRequestJob::FilterHasData() { |
| 498 return filter_.get() && filter_->stream_data_len(); | 503 return filter_.get() && filter_->stream_data_len(); |
| 499 } | 504 } |
| 500 | 505 |
| 501 void URLRequestJob::FollowRedirect(const GURL& location, | 506 void URLRequestJob::FollowRedirect(const GURL& location, |
| 502 int http_status_code) { | 507 int http_status_code) { |
| 503 g_url_request_job_tracker.OnJobRedirect(this, location, http_status_code); | 508 g_url_request_job_tracker.OnJobRedirect(this, location, http_status_code); |
| 504 Kill(); | 509 Kill(); |
| 505 // Kill could have notified the Delegate and destroyed the request. | 510 // Kill could have notified the Delegate and destroyed the request. |
| 506 if (!request_) | 511 if (!request_) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 525 return request_->status(); | 530 return request_->status(); |
| 526 // If the request is gone, we must be cancelled. | 531 // If the request is gone, we must be cancelled. |
| 527 return URLRequestStatus(URLRequestStatus::CANCELED, | 532 return URLRequestStatus(URLRequestStatus::CANCELED, |
| 528 net::ERR_ABORTED); | 533 net::ERR_ABORTED); |
| 529 } | 534 } |
| 530 | 535 |
| 531 void URLRequestJob::SetStatus(const URLRequestStatus &status) { | 536 void URLRequestJob::SetStatus(const URLRequestStatus &status) { |
| 532 if (request_) | 537 if (request_) |
| 533 request_->set_status(status); | 538 request_->set_status(status); |
| 534 } | 539 } |
| OLD | NEW |