summaryrefslogtreecommitdiffstats
path: root/net/url_request
diff options
context:
space:
mode:
authordimich@google.com <dimich@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-24 18:01:33 +0000
committerdimich@google.com <dimich@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-24 18:01:33 +0000
commit09a362d359bce661c21ebf92342fae61e8d4558a (patch)
tree31879c534a935ad7d98d428a5017d7eb76ba9322 /net/url_request
parent334e5ff3c29a2887f766c2a95517547633da989e (diff)
downloadchromium_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.cc27
-rw-r--r--net/url_request/url_request_unittest.cc51
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());
+}
+