diff options
author | dimich@google.com <dimich@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-24 18:01:33 +0000 |
---|---|---|
committer | dimich@google.com <dimich@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-24 18:01:33 +0000 |
commit | 09a362d359bce661c21ebf92342fae61e8d4558a (patch) | |
tree | 31879c534a935ad7d98d428a5017d7eb76ba9322 /net/url_request | |
parent | 334e5ff3c29a2887f766c2a95517547633da989e (diff) | |
download | chromium_src-09a362d359bce661c21ebf92342fae61e8d4558a.zip chromium_src-09a362d359bce661c21ebf92342fae61e8d4558a.tar.gz chromium_src-09a362d359bce661c21ebf92342fae61e8d4558a.tar.bz2 |
Don't add default Accept-Language and Accept-Charset headers if specific ones were set in URLRequest
BUG=20894
TEST=enabled layout test LayoutTests/http/tests/xmlhttprequest/access-control-basic-whitelist-request-headers.html
Review URL: http://codereview.chromium.org/218015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27090 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/url_request')
-rw-r--r-- | net/url_request/url_request_http_job.cc | 27 | ||||
-rw-r--r-- | net/url_request/url_request_unittest.cc | 51 |
2 files changed, 72 insertions, 6 deletions
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc index 387f488..aa75574 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc @@ -584,6 +584,18 @@ void URLRequestHttpJob::StartTransaction() { this, &URLRequestHttpJob::OnStartCompleted, rv)); } +// Helper. If |*headers| already contains |header_name| do nothing, +// otherwise add <header_name> ": " <header_value> to the end of the list. +static void AppendHeaderIfMissing(const char* header_name, + const std::string& header_value, + std::string* headers) { + if (header_value.empty()) + return; + if (net::HttpUtil::HasHeader(*headers, header_name)) + return; + *headers += std::string(header_name) + ": " + header_value + "\r\n"; +} + void URLRequestHttpJob::AddExtraHeaders() { // TODO(jar): Consider optimizing away SDCH advertising bytes when the URL is // probably an img or such (and SDCH encoding is not likely). @@ -640,12 +652,15 @@ void URLRequestHttpJob::AddExtraHeaders() { if (context) { if (context->AllowSendingCookies(request_)) request_info_.extra_headers += AssembleRequestCookies(); - if (!context->accept_language().empty()) - request_info_.extra_headers += "Accept-Language: " + - context->accept_language() + "\r\n"; - if (!context->accept_charset().empty()) - request_info_.extra_headers += "Accept-Charset: " + - context->accept_charset() + "\r\n"; + + // Only add default Accept-Language and Accept-Charset if the request + // didn't have them specified. + AppendHeaderIfMissing("Accept-Language", + context->accept_language(), + &request_info_.extra_headers); + AppendHeaderIfMissing("Accept-Charset", + context->accept_charset(), + &request_info_.extra_headers); } } diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index 0926c30..9a9d61b 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc @@ -62,6 +62,8 @@ class URLRequestTestContext : public URLRequestContext { disk_cache::CreateInMemoryCacheBackend(0)); // In-memory cookie store. cookie_store_ = new net::CookieMonster(); + accept_language_ = "en-us,fr"; + accept_charset_ = "iso-8859-1,*,utf-8"; } virtual ~URLRequestTestContext() { @@ -2219,3 +2221,52 @@ TEST_F(URLRequestTestFTP, FTPCacheLoginBoxCredentials) { EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); } } + +// Check that default A-L header is sent. +TEST_F(URLRequestTestHTTP, DefaultAcceptLanguage) { + ASSERT_TRUE(NULL != server_.get()); + TestDelegate d; + TestURLRequest req(server_->TestServerPage("echoheader?Accept-Language"), &d); + req.set_context(new URLRequestTestContext()); + req.Start(); + MessageLoop::current()->Run(); + EXPECT_EQ(req.context()->accept_language(), d.data_received()); +} + +// Check that if request overrides the A-L header, the default is not appended. +// See http://crbug.com/20894 +TEST_F(URLRequestTestHTTP, OverrideAcceptLanguage) { + ASSERT_TRUE(NULL != server_.get()); + TestDelegate d; + TestURLRequest req(server_->TestServerPage("echoheader?Accept-Language"), &d); + req.set_context(new URLRequestTestContext()); + req.SetExtraRequestHeaders("Accept-Language: ru"); + req.Start(); + MessageLoop::current()->Run(); + EXPECT_EQ(std::string("ru"), d.data_received()); +} + +// Check that default A-C header is sent. +TEST_F(URLRequestTestHTTP, DefaultAcceptCharset) { + ASSERT_TRUE(NULL != server_.get()); + TestDelegate d; + TestURLRequest req(server_->TestServerPage("echoheader?Accept-Charset"), &d); + req.set_context(new URLRequestTestContext()); + req.Start(); + MessageLoop::current()->Run(); + EXPECT_EQ(req.context()->accept_charset(), d.data_received()); +} + +// Check that if request overrides the A-C header, the default is not appended. +// See http://crbug.com/20894 +TEST_F(URLRequestTestHTTP, OverrideAcceptCharset) { + ASSERT_TRUE(NULL != server_.get()); + TestDelegate d; + TestURLRequest req(server_->TestServerPage("echoheader?Accept-Charset"), &d); + req.set_context(new URLRequestTestContext()); + req.SetExtraRequestHeaders("Accept-Charset: koi-8r"); + req.Start(); + MessageLoop::current()->Run(); + EXPECT_EQ(std::string("koi-8r"), d.data_received()); +} + |