Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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_http_job.h" | 5 #include "net/url_request/url_request_http_job.h" |
| 6 | 6 |
| 7 #include "base/base_switches.h" | 7 #include "base/base_switches.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 91 this, &URLRequestHttpJob::OnStartCompleted)), | 91 this, &URLRequestHttpJob::OnStartCompleted)), |
| 92 ALLOW_THIS_IN_INITIALIZER_LIST(read_callback_( | 92 ALLOW_THIS_IN_INITIALIZER_LIST(read_callback_( |
| 93 this, &URLRequestHttpJob::OnReadCompleted)), | 93 this, &URLRequestHttpJob::OnReadCompleted)), |
| 94 read_in_progress_(false), | 94 read_in_progress_(false), |
| 95 transaction_(NULL), | 95 transaction_(NULL), |
| 96 throttling_entry_(net::URLRequestThrottlerManager::GetInstance()-> | 96 throttling_entry_(net::URLRequestThrottlerManager::GetInstance()-> |
| 97 RegisterRequestUrl(request->url())), | 97 RegisterRequestUrl(request->url())), |
| 98 sdch_dictionary_advertised_(false), | 98 sdch_dictionary_advertised_(false), |
| 99 sdch_test_activated_(false), | 99 sdch_test_activated_(false), |
| 100 sdch_test_control_(false), | 100 sdch_test_control_(false), |
| 101 is_cached_content_(false) { | 101 is_cached_content_(false), |
| 102 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { | |
| 102 } | 103 } |
| 103 | 104 |
| 104 URLRequestHttpJob::~URLRequestHttpJob() { | 105 URLRequestHttpJob::~URLRequestHttpJob() { |
| 105 DCHECK(!sdch_test_control_ || !sdch_test_activated_); | 106 DCHECK(!sdch_test_control_ || !sdch_test_activated_); |
| 106 if (!IsCachedContent()) { | 107 if (!IsCachedContent()) { |
| 107 if (sdch_test_control_) | 108 if (sdch_test_control_) |
| 108 RecordPacketStats(SDCH_EXPERIMENT_HOLDBACK); | 109 RecordPacketStats(SDCH_EXPERIMENT_HOLDBACK); |
| 109 if (sdch_test_activated_) | 110 if (sdch_test_activated_) |
| 110 RecordPacketStats(SDCH_EXPERIMENT_DECODE); | 111 RecordPacketStats(SDCH_EXPERIMENT_DECODE); |
| 111 } | 112 } |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 362 response_cookies_.clear(); | 363 response_cookies_.clear(); |
| 363 | 364 |
| 364 // OK, let the consumer read the error page... | 365 // OK, let the consumer read the error page... |
| 365 // | 366 // |
| 366 // Because we set the AUTH_STATE_CANCELED flag, NeedsAuth will return false, | 367 // Because we set the AUTH_STATE_CANCELED flag, NeedsAuth will return false, |
| 367 // which will cause the consumer to receive OnResponseStarted instead of | 368 // which will cause the consumer to receive OnResponseStarted instead of |
| 368 // OnAuthRequired. | 369 // OnAuthRequired. |
| 369 // | 370 // |
| 370 // We have to do this via InvokeLater to avoid "recursing" the consumer. | 371 // We have to do this via InvokeLater to avoid "recursing" the consumer. |
| 371 // | 372 // |
| 372 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( | 373 MessageLoop::current()->PostTask( |
| 373 this, &URLRequestHttpJob::OnStartCompleted, net::OK)); | 374 FROM_HERE, |
| 375 method_factory_.NewRunnableMethod( | |
| 376 &URLRequestHttpJob::OnStartCompleted, net::OK)); | |
|
eroman
2010/12/03 06:03:19
nit: indent by 4
| |
| 374 } | 377 } |
| 375 | 378 |
| 376 void URLRequestHttpJob::ContinueWithCertificate( | 379 void URLRequestHttpJob::ContinueWithCertificate( |
| 377 net::X509Certificate* client_cert) { | 380 net::X509Certificate* client_cert) { |
| 378 DCHECK(transaction_.get()); | 381 DCHECK(transaction_.get()); |
| 379 | 382 |
| 380 DCHECK(!response_info_) << "should not have a response yet"; | 383 DCHECK(!response_info_) << "should not have a response yet"; |
| 381 | 384 |
| 382 // No matter what, we want to report our status as IO pending since we will | 385 // No matter what, we want to report our status as IO pending since we will |
| 383 // be notifying our consumer asynchronously via OnStartCompleted. | 386 // be notifying our consumer asynchronously via OnStartCompleted. |
| 384 SetStatus(URLRequestStatus(URLRequestStatus::IO_PENDING, 0)); | 387 SetStatus(URLRequestStatus(URLRequestStatus::IO_PENDING, 0)); |
| 385 | 388 |
| 386 int rv = transaction_->RestartWithCertificate(client_cert, &start_callback_); | 389 int rv = transaction_->RestartWithCertificate(client_cert, &start_callback_); |
| 387 if (rv == net::ERR_IO_PENDING) | 390 if (rv == net::ERR_IO_PENDING) |
| 388 return; | 391 return; |
| 389 | 392 |
| 390 // The transaction started synchronously, but we need to notify the | 393 // The transaction started synchronously, but we need to notify the |
| 391 // net::URLRequest delegate via the message loop. | 394 // net::URLRequest delegate via the message loop. |
| 392 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( | 395 MessageLoop::current()->PostTask( |
| 393 this, &URLRequestHttpJob::OnStartCompleted, rv)); | 396 FROM_HERE, |
| 397 method_factory_.NewRunnableMethod( | |
| 398 &URLRequestHttpJob::OnStartCompleted, rv)); | |
| 394 } | 399 } |
| 395 | 400 |
| 396 void URLRequestHttpJob::ContinueDespiteLastError() { | 401 void URLRequestHttpJob::ContinueDespiteLastError() { |
| 397 // If the transaction was destroyed, then the job was cancelled. | 402 // If the transaction was destroyed, then the job was cancelled. |
| 398 if (!transaction_.get()) | 403 if (!transaction_.get()) |
| 399 return; | 404 return; |
| 400 | 405 |
| 401 DCHECK(!response_info_) << "should not have a response yet"; | 406 DCHECK(!response_info_) << "should not have a response yet"; |
| 402 | 407 |
| 403 // No matter what, we want to report our status as IO pending since we will | 408 // No matter what, we want to report our status as IO pending since we will |
| 404 // be notifying our consumer asynchronously via OnStartCompleted. | 409 // be notifying our consumer asynchronously via OnStartCompleted. |
| 405 SetStatus(URLRequestStatus(URLRequestStatus::IO_PENDING, 0)); | 410 SetStatus(URLRequestStatus(URLRequestStatus::IO_PENDING, 0)); |
| 406 | 411 |
| 407 int rv = transaction_->RestartIgnoringLastError(&start_callback_); | 412 int rv = transaction_->RestartIgnoringLastError(&start_callback_); |
| 408 if (rv == net::ERR_IO_PENDING) | 413 if (rv == net::ERR_IO_PENDING) |
| 409 return; | 414 return; |
| 410 | 415 |
| 411 // The transaction started synchronously, but we need to notify the | 416 // The transaction started synchronously, but we need to notify the |
| 412 // net::URLRequest delegate via the message loop. | 417 // net::URLRequest delegate via the message loop. |
| 413 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( | 418 MessageLoop::current()->PostTask( |
| 414 this, &URLRequestHttpJob::OnStartCompleted, rv)); | 419 FROM_HERE, |
| 420 method_factory_.NewRunnableMethod( | |
| 421 &URLRequestHttpJob::OnStartCompleted, rv)); | |
| 415 } | 422 } |
| 416 | 423 |
| 417 bool URLRequestHttpJob::ReadRawData(net::IOBuffer* buf, int buf_size, | 424 bool URLRequestHttpJob::ReadRawData(net::IOBuffer* buf, int buf_size, |
| 418 int *bytes_read) { | 425 int *bytes_read) { |
| 419 DCHECK_NE(buf_size, 0); | 426 DCHECK_NE(buf_size, 0); |
| 420 DCHECK(bytes_read); | 427 DCHECK(bytes_read); |
| 421 DCHECK(!read_in_progress_); | 428 DCHECK(!read_in_progress_); |
| 422 | 429 |
| 423 int rv = transaction_->Read(buf, buf_size, &read_callback_); | 430 int rv = transaction_->Read(buf, buf_size, &read_callback_); |
| 424 if (rv >= 0) { | 431 if (rv >= 0) { |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 653 // transaction. | 660 // transaction. |
| 654 context_ = request_->context(); | 661 context_ = request_->context(); |
| 655 } | 662 } |
| 656 } | 663 } |
| 657 | 664 |
| 658 if (rv == net::ERR_IO_PENDING) | 665 if (rv == net::ERR_IO_PENDING) |
| 659 return; | 666 return; |
| 660 | 667 |
| 661 // The transaction started synchronously, but we need to notify the | 668 // The transaction started synchronously, but we need to notify the |
| 662 // net::URLRequest delegate via the message loop. | 669 // net::URLRequest delegate via the message loop. |
| 663 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( | 670 MessageLoop::current()->PostTask( |
| 664 this, &URLRequestHttpJob::OnStartCompleted, rv)); | 671 FROM_HERE, |
| 672 method_factory_.NewRunnableMethod( | |
| 673 &URLRequestHttpJob::OnStartCompleted, rv)); | |
| 665 } | 674 } |
| 666 | 675 |
| 667 void URLRequestHttpJob::AddExtraHeaders() { | 676 void URLRequestHttpJob::AddExtraHeaders() { |
| 668 // TODO(jar): Consider optimizing away SDCH advertising bytes when the URL is | 677 // TODO(jar): Consider optimizing away SDCH advertising bytes when the URL is |
| 669 // probably an img or such (and SDCH encoding is not likely). | 678 // probably an img or such (and SDCH encoding is not likely). |
| 670 bool advertise_sdch = SdchManager::Global() && | 679 bool advertise_sdch = SdchManager::Global() && |
| 671 SdchManager::Global()->IsInSupportedDomain(request_->url()); | 680 SdchManager::Global()->IsInSupportedDomain(request_->url()); |
| 672 std::string avail_dictionaries; | 681 std::string avail_dictionaries; |
| 673 if (advertise_sdch) { | 682 if (advertise_sdch) { |
| 674 SdchManager::Global()->GetAvailDictionaryList(request_->url(), | 683 SdchManager::Global()->GetAvailDictionaryList(request_->url(), |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 934 HTTPSProberDelegate* delegate = | 943 HTTPSProberDelegate* delegate = |
| 935 new HTTPSProberDelegate(request_info_.url.host(), max_age, | 944 new HTTPSProberDelegate(request_info_.url.host(), max_age, |
| 936 include_subdomains, | 945 include_subdomains, |
| 937 ctx->transport_security_state()); | 946 ctx->transport_security_state()); |
| 938 if (!prober->ProbeHost(request_info_.url.host(), request()->context(), | 947 if (!prober->ProbeHost(request_info_.url.host(), request()->context(), |
| 939 delegate)) { | 948 delegate)) { |
| 940 delete delegate; | 949 delete delegate; |
| 941 } | 950 } |
| 942 } | 951 } |
| 943 } | 952 } |
| OLD | NEW |