Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(327)

Unified Diff: net/http/http_network_transaction.cc

Issue 1604011: Use HttpRequestHeaders for extra_headers. (Closed)
Patch Set: Address eroman comments. Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/http_network_layer_unittest.cc ('k') | net/http/http_network_transaction_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/http_network_transaction.cc
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
index 467f63c2a81f50b95901167fc4040440964358ee..9ab5bc70d6e5e465b511f195c2c5b36b539d8205 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -51,13 +51,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));
@@ -69,11 +69,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()) {
@@ -114,22 +109,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
@@ -137,21 +121,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);
}
@@ -931,6 +916,7 @@ int HttpNetworkTransaction::DoSendRequest() {
(HaveAuth(HttpAuth::AUTH_SERVER) ||
SelectPreemptiveAuth(HttpAuth::AUTH_SERVER));
+ std::string request_line;
HttpRequestHeaders request_headers;
HttpRequestHeaders authorization_headers;
@@ -943,13 +929,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;
« no previous file with comments | « net/http/http_network_layer_unittest.cc ('k') | net/http/http_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698