Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 580 } else { | 580 } else { |
| 581 rv = net::ERR_FAILED; | 581 rv = net::ERR_FAILED; |
| 582 } | 582 } |
| 583 | 583 |
| 584 // The transaction started synchronously, but we need to notify the | 584 // The transaction started synchronously, but we need to notify the |
| 585 // URLRequest delegate via the message loop. | 585 // URLRequest delegate via the message loop. |
| 586 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( | 586 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( |
| 587 this, &URLRequestHttpJob::OnStartCompleted, rv)); | 587 this, &URLRequestHttpJob::OnStartCompleted, rv)); |
| 588 } | 588 } |
| 589 | 589 |
| 590 // Helper. If |*headers| already contains |header_name| do nothing, | |
| 591 // otherwise add <header_name> ": " <header_value> to the end of the list. | |
| 592 static void AppendHeaderIfMissing(const char* header_name, | |
| 593 const std::string& header_value, | |
| 594 std::string* headers) { | |
| 595 if (header_value.empty()) | |
| 596 return; | |
| 597 if (net::HttpUtil::HasHeader(*headers, header_name)) | |
| 598 return; | |
| 599 *headers += std::string(header_name) + ": " + header_value + "\r\n"; | |
| 600 } | |
| 601 | |
| 590 void URLRequestHttpJob::AddExtraHeaders() { | 602 void URLRequestHttpJob::AddExtraHeaders() { |
| 591 // TODO(jar): Consider optimizing away SDCH advertising bytes when the URL is | 603 // TODO(jar): Consider optimizing away SDCH advertising bytes when the URL is |
| 592 // probably an img or such (and SDCH encoding is not likely). | 604 // probably an img or such (and SDCH encoding is not likely). |
| 593 bool advertise_sdch = SdchManager::Global() && | 605 bool advertise_sdch = SdchManager::Global() && |
| 594 SdchManager::Global()->IsInSupportedDomain(request_->url()); | 606 SdchManager::Global()->IsInSupportedDomain(request_->url()); |
| 595 std::string avail_dictionaries; | 607 std::string avail_dictionaries; |
| 596 if (advertise_sdch) { | 608 if (advertise_sdch) { |
| 597 SdchManager::Global()->GetAvailDictionaryList(request_->url(), | 609 SdchManager::Global()->GetAvailDictionaryList(request_->url(), |
| 598 &avail_dictionaries); | 610 &avail_dictionaries); |
| 599 | 611 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 636 // a response. When done, we'll record histograms via SDCH_DECODE or | 648 // a response. When done, we'll record histograms via SDCH_DECODE or |
| 637 // SDCH_PASSTHROUGH. Hence we need to record packet arrival times. | 649 // SDCH_PASSTHROUGH. Hence we need to record packet arrival times. |
| 638 EnablePacketCounting(kSdchPacketHistogramCount); | 650 EnablePacketCounting(kSdchPacketHistogramCount); |
| 639 } | 651 } |
| 640 } | 652 } |
| 641 | 653 |
| 642 URLRequestContext* context = request_->context(); | 654 URLRequestContext* context = request_->context(); |
| 643 if (context) { | 655 if (context) { |
| 644 if (context->AllowSendingCookies(request_)) | 656 if (context->AllowSendingCookies(request_)) |
| 645 request_info_.extra_headers += AssembleRequestCookies(); | 657 request_info_.extra_headers += AssembleRequestCookies(); |
| 646 if (!context->accept_language().empty()) | 658 |
| 647 request_info_.extra_headers += "Accept-Language: " + | 659 // Only add default Accept-Language and Accept-Charset if the request |
| 648 context->accept_language() + "\r\n"; | 660 // didn't have them specifically specified. |
|
eroman
2009/09/24 02:19:32
nit: slightly redundant wording; can probably omit
| |
| 649 if (!context->accept_charset().empty()) | 661 AppendHeaderIfMissing("Accept-Language", |
| 650 request_info_.extra_headers += "Accept-Charset: " + | 662 context->accept_language(), |
| 651 context->accept_charset() + "\r\n"; | 663 &request_info_.extra_headers); |
| 664 AppendHeaderIfMissing("Accept-Charset", | |
| 665 context->accept_charset(), | |
| 666 &request_info_.extra_headers); | |
| 652 } | 667 } |
| 653 } | 668 } |
| 654 | 669 |
| 655 std::string URLRequestHttpJob::AssembleRequestCookies() { | 670 std::string URLRequestHttpJob::AssembleRequestCookies() { |
| 656 if (request_info_.load_flags & net::LOAD_DO_NOT_SEND_COOKIES) | 671 if (request_info_.load_flags & net::LOAD_DO_NOT_SEND_COOKIES) |
| 657 return std::string(); | 672 return std::string(); |
| 658 | 673 |
| 659 URLRequestContext* context = request_->context(); | 674 URLRequestContext* context = request_->context(); |
| 660 if (context) { | 675 if (context) { |
| 661 // Add in the cookie header. TODO might we need more than one header? | 676 // Add in the cookie header. TODO might we need more than one header? |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 704 | 719 |
| 705 std::string name = "Strict-Transport-Security"; | 720 std::string name = "Strict-Transport-Security"; |
| 706 std::string value; | 721 std::string value; |
| 707 | 722 |
| 708 void* iter = NULL; | 723 void* iter = NULL; |
| 709 while (response_info_->headers->EnumerateHeader(&iter, name, &value)) { | 724 while (response_info_->headers->EnumerateHeader(&iter, name, &value)) { |
| 710 ctx->strict_transport_security_state()->DidReceiveHeader( | 725 ctx->strict_transport_security_state()->DidReceiveHeader( |
| 711 request_info_.url, value); | 726 request_info_.url, value); |
| 712 } | 727 } |
| 713 } | 728 } |
| OLD | NEW |