diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/http/http_util.cc | 10 | ||||
-rw-r--r-- | net/http/http_util.h | 6 | ||||
-rw-r--r-- | net/tools/testserver/testserver.py | 18 | ||||
-rw-r--r-- | net/url_request/url_request_http_job.cc | 24 | ||||
-rw-r--r-- | net/url_request/url_request_unittest.cc | 6 |
5 files changed, 43 insertions, 21 deletions
diff --git a/net/http/http_util.cc b/net/http/http_util.cc index 72c7737e..5ea46d0 100644 --- a/net/http/http_util.cc +++ b/net/http/http_util.cc @@ -596,6 +596,16 @@ std::string HttpUtil::GenerateAcceptCharsetHeader(const std::string& charset) { return charset_with_q; } +void HttpUtil::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"; +} + // BNF from section 4.2 of RFC 2616: // // message-header = field-name ":" [ field-value ] diff --git a/net/http/http_util.h b/net/http/http_util.h index a3b0def..c630cfe 100644 --- a/net/http/http_util.h +++ b/net/http/http_util.h @@ -144,6 +144,12 @@ class HttpUtil { // 'euc-jp,utf-8;q=0.7,*;q=0.3'. static std::string GenerateAcceptCharsetHeader(const std::string& charset); + // 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); + // Used to iterate over the name/value pairs of HTTP headers. To iterate // over the values in a multi-value header, use ValuesIterator. // See AssembleRawHeaders for joining line continuations (this iterator diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py index b80a939..98d5bbc 100644 --- a/net/tools/testserver/testserver.py +++ b/net/tools/testserver/testserver.py @@ -113,6 +113,7 @@ class TestPageHandler(BaseHTTPServer.BaseHTTPRequestHandler): self.DownloadHandler, self.DownloadFinishHandler, self.EchoHeader, + self.EchoHeaderOverride, self.EchoAllHandler, self.FileHandler, self.RealFileWithCommonHeaderHandler, @@ -408,8 +409,23 @@ class TestPageHandler(BaseHTTPServer.BaseHTTPRequestHandler): def EchoHeader(self): """This handler echoes back the value of a specific request header.""" + """The only difference between this function and the EchoHeaderOverride""" + """function is in the parameter being passed to the helper function""" + return self.EchoHeaderHelper("/echoheader") - if not self._ShouldHandleRequest("/echoheader"): + def EchoHeaderOverride(self): + """This handler echoes back the value of a specific request header.""" + """The UrlRequest unit tests also execute for ChromeFrame which uses""" + """IE to issue HTTP requests using the host network stack.""" + """The Accept and Charset tests which expect the server to echo back""" + """the corresponding headers fail here as IE returns cached responses""" + """The EchoHeaderOverride parameter is an easy way to ensure that IE""" + """treats this request as a new request and does not cache it.""" + return self.EchoHeaderHelper("/echoheaderoverride") + + def EchoHeaderHelper(self, echo_header): + """This function echoes back the value of the request header passed in.""" + if not self._ShouldHandleRequest(echo_header): return False query_char = self.path.find('?') diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc index aa75574..84d5709 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc @@ -584,18 +584,6 @@ 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). @@ -655,12 +643,12 @@ void URLRequestHttpJob::AddExtraHeaders() { // 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); + net::HttpUtil::AppendHeaderIfMissing("Accept-Language", + context->accept_language(), + &request_info_.extra_headers); + net::HttpUtil::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 0693ac1..6aee61a 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc @@ -2177,7 +2177,8 @@ TEST_F(URLRequestTestHTTP, DefaultAcceptLanguage) { TEST_F(URLRequestTestHTTP, OverrideAcceptLanguage) { ASSERT_TRUE(NULL != server_.get()); TestDelegate d; - TestURLRequest req(server_->TestServerPage("echoheader?Accept-Language"), &d); + TestURLRequest + req(server_->TestServerPage("echoheaderoverride?Accept-Language"), &d); req.set_context(new URLRequestTestContext()); req.SetExtraRequestHeaders("Accept-Language: ru"); req.Start(); @@ -2201,7 +2202,8 @@ TEST_F(URLRequestTestHTTP, DefaultAcceptCharset) { TEST_F(URLRequestTestHTTP, OverrideAcceptCharset) { ASSERT_TRUE(NULL != server_.get()); TestDelegate d; - TestURLRequest req(server_->TestServerPage("echoheader?Accept-Charset"), &d); + TestURLRequest + req(server_->TestServerPage("echoheaderoverride?Accept-Charset"), &d); req.set_context(new URLRequestTestContext()); req.SetExtraRequestHeaders("Accept-Charset: koi-8r"); req.Start(); |