summaryrefslogtreecommitdiffstats
path: root/net/http/http_network_transaction.cc
diff options
context:
space:
mode:
authorwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-20 22:15:43 +0000
committerwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-20 22:15:43 +0000
commit8c76ae2ff868d7968c850f06822e2f8353bd87e1 (patch)
tree0051ecbee24c9b48fc46ae914aedd8b7a1ab0c25 /net/http/http_network_transaction.cc
parent1e507001a1f4b7e9f96ad4faffd0448a586ac304 (diff)
downloadchromium_src-8c76ae2ff868d7968c850f06822e2f8353bd87e1.zip
chromium_src-8c76ae2ff868d7968c850f06822e2f8353bd87e1.tar.gz
chromium_src-8c76ae2ff868d7968c850f06822e2f8353bd87e1.tar.bz2
Use HttpRequestHeaders for extra_headers.
BUG=22588 Review URL: http://codereview.chromium.org/1604011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45096 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http/http_network_transaction.cc')
-rw-r--r--net/http/http_network_transaction.cc52
1 files changed, 20 insertions, 32 deletions
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
index 64c4fd9..39111f4 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -57,13 +57,13 @@ void BuildRequestHeaders(const HttpRequestInfo* request_info,
const HttpRequestHeaders& authorization_headers,
const UploadDataStream* upload_data_stream,
bool using_proxy,
+ std::string* request_line,
HttpRequestHeaders* request_headers) {
const std::string path = using_proxy ?
HttpUtil::SpecForRequest(request_info->url) :
HttpUtil::PathForRequest(request_info->url);
- request_headers->SetRequestLine(
- request_info->method, path, "1.1");
-
+ *request_line = StringPrintf(
+ "%s %s HTTP/1.1\r\n", request_info->method.c_str(), path.c_str());
request_headers->SetHeader(HttpRequestHeaders::kHost,
GetHostAndOptionalPort(request_info->url));
@@ -75,11 +75,6 @@ void BuildRequestHeaders(const HttpRequestInfo* request_info,
request_headers->SetHeader(HttpRequestHeaders::kConnection, "keep-alive");
}
- if (!request_info->user_agent.empty()) {
- request_headers->SetHeader(HttpRequestHeaders::kUserAgent,
- request_info->user_agent);
- }
-
// Our consumer should have made sure that this is a safe referrer. See for
// instance WebCore::FrameLoader::HideReferrer.
if (request_info->referrer.is_valid()) {
@@ -120,22 +115,11 @@ void BuildRequestHeaders(const HttpRequestInfo* request_info,
"Referer"
};
- // TODO(willchan): Change HttpRequestInfo::extra_headers to be a
- // HttpRequestHeaders.
-
- std::vector<std::string> extra_headers_vector;
- Tokenize(request_info->extra_headers, "\r\n", &extra_headers_vector);
- HttpRequestHeaders extra_headers;
- if (!extra_headers_vector.empty()) {
- for (std::vector<std::string>::const_iterator it =
- extra_headers_vector.begin(); it != extra_headers_vector.end(); ++it)
- extra_headers.AddHeaderFromString(*it);
-
+ HttpRequestHeaders stripped_extra_headers;
+ stripped_extra_headers.CopyFrom(request_info->extra_headers);
for (size_t i = 0; i < arraysize(kExtraHeadersToBeStripped); ++i)
- extra_headers.RemoveHeader(kExtraHeadersToBeStripped[i]);
-
- request_headers->MergeFrom(extra_headers);
- }
+ stripped_extra_headers.RemoveHeader(kExtraHeadersToBeStripped[i]);
+ request_headers->MergeFrom(stripped_extra_headers);
}
// The HTTP CONNECT method for establishing a tunnel connection is documented
@@ -143,21 +127,22 @@ void BuildRequestHeaders(const HttpRequestInfo* request_info,
// 5.3.
void BuildTunnelRequest(const HttpRequestInfo* request_info,
const HttpRequestHeaders& authorization_headers,
+ std::string* request_line,
HttpRequestHeaders* request_headers) {
// RFC 2616 Section 9 says the Host request-header field MUST accompany all
// HTTP/1.1 requests. Add "Proxy-Connection: keep-alive" for compat with
// HTTP/1.0 proxies such as Squid (required for NTLM authentication).
- request_headers->SetRequestLine(
- "CONNECT", GetHostAndPort(request_info->url), "1.1");
+ *request_line = StringPrintf(
+ "CONNECT %s HTTP/1.1\r\n", GetHostAndPort(request_info->url).c_str());
request_headers->SetHeader(HttpRequestHeaders::kHost,
GetHostAndOptionalPort(request_info->url));
request_headers->SetHeader(HttpRequestHeaders::kProxyConnection,
"keep-alive");
- if (!request_info->user_agent.empty()) {
- request_headers->SetHeader(HttpRequestHeaders::kUserAgent,
- request_info->user_agent);
- }
+ std::string user_agent;
+ if (request_info->extra_headers.GetHeader(HttpRequestHeaders::kUserAgent,
+ &user_agent))
+ request_headers->SetHeader(HttpRequestHeaders::kUserAgent, user_agent);
request_headers->MergeFrom(authorization_headers);
}
@@ -962,6 +947,7 @@ int HttpNetworkTransaction::DoSendRequest() {
(HaveAuth(HttpAuth::AUTH_SERVER) ||
SelectPreemptiveAuth(HttpAuth::AUTH_SERVER));
+ std::string request_line;
HttpRequestHeaders request_headers;
HttpRequestHeaders authorization_headers;
@@ -974,13 +960,15 @@ int HttpNetworkTransaction::DoSendRequest() {
AddAuthorizationHeader(HttpAuth::AUTH_SERVER, &authorization_headers);
if (establishing_tunnel_) {
- BuildTunnelRequest(request_, authorization_headers, &request_headers);
+ BuildTunnelRequest(request_, authorization_headers, &request_line,
+ &request_headers);
} else {
BuildRequestHeaders(request_, authorization_headers, request_body,
- proxy_mode_ == kHTTPProxy, &request_headers);
+ proxy_mode_ == kHTTPProxy, &request_line,
+ &request_headers);
}
- request_headers_ = request_headers.ToString();
+ request_headers_ = request_line + request_headers.ToString();
}
headers_valid_ = false;