Chromium Code Reviews| Index: net/http/proxy_client_socket.cc |
| diff --git a/net/http/proxy_client_socket.cc b/net/http/proxy_client_socket.cc |
| index dcfae037ce721c92bd95dfa3aeded77bd2f6bf62..1bbb7000173806460706f8751ff09d5c819312ba 100644 |
| --- a/net/http/proxy_client_socket.cc |
| +++ b/net/http/proxy_client_socket.cc |
| @@ -72,22 +72,48 @@ void ProxyClientSocket::LogBlockedTunnelResponse(int http_status_code, |
| } |
| // static |
| -bool ProxyClientSocket::SanitizeProxyRedirect(HttpResponseInfo* response, |
| - const GURL& url) { |
| +bool ProxyClientSocket::SanitizeProxyAuth(HttpResponseInfo* response) { |
| + DCHECK(response && response->headers.get()); |
| + |
| + const char* kHeaderName = "Proxy-Authenticate"; |
| + void* iter = NULL; |
| + std::string auth, ignored; |
| + // Make sure there is one Proxy-Authenticate header... |
| + if (!response->headers->EnumerateHeader(&iter, kHeaderName, &auth)) |
| + return false; |
| + // ...but not more than one. |
|
Ryan Sleevi
2014/12/08 22:04:39
BUG: This is NOT required by the spec. Per RFC 723
|
| + if (response->headers->EnumerateHeader(&iter, kHeaderName, &ignored)) |
| + return false; |
| + |
| + std::string fake_response_headers = base::StringPrintf( |
| + "HTTP/1.1 407 Proxy Authentication Required\n" |
| + "Proxy-Authenticate: %s\n" |
| + "Content-Length: 0\n" |
|
Ryan Hamilton
2014/12/08 22:51:59
Looks like the content-length should not be 0, sin
Deprecated (see juliatuttle)
2014/12/09 15:31:15
The goal was to avoid providing the response body,
Ryan Hamilton
2014/12/10 19:53:42
Oh! I'm sorry. I misread line 94 to be appending a
Deprecated (see juliatuttle)
2014/12/10 20:38:40
I've removed the content-length header entirely, s
|
| + "Connection: close\n" |
|
Ryan Hamilton
2014/12/08 22:51:59
I'm not sure that you want to make this connection
Deprecated (see juliatuttle)
2014/12/09 15:31:15
Sigh, okay.
Deprecated (see juliatuttle)
2014/12/10 20:38:40
I've passed along Connection headers along with th
|
| + "\n", |
| + auth.c_str()); |
| + std::string raw_headers = HttpUtil::AssembleRawHeaders( |
| + fake_response_headers.data(), fake_response_headers.length()); |
| + response->headers = new HttpResponseHeaders(raw_headers); |
| + return true; |
| +} |
| + |
| +// static |
| +bool ProxyClientSocket::SanitizeProxyRedirect(HttpResponseInfo* response) { |
| DCHECK(response && response->headers.get()); |
| std::string location; |
| if (!response->headers->IsRedirect(&location)) |
| return false; |
| - // Return minimal headers; set "Content-length: 0" to ignore response body. |
| - std::string fake_response_headers = |
| - base::StringPrintf("HTTP/1.0 302 Found\n" |
| - "Location: %s\n" |
| - "Content-length: 0\n" |
| - "Connection: close\n" |
| - "\n", |
| - location.c_str()); |
| + // Return minimal headers; set "Content-Length: 0" to ignore response body. |
| + std::string fake_response_headers = base::StringPrintf( |
| + "HTTP/1.1 302 Found\n" |
|
Ryan Sleevi
2014/12/08 22:04:40
Note: While this may seem trivial, it's going to r
Ryan Hamilton
2014/12/08 22:53:48
From my reading, I think there are no required res
Deprecated (see juliatuttle)
2014/12/09 15:31:15
I can make them both 1.0, but that would break kee
|
| + "Location: %s\n" |
| + "Content-Length: 0\n" |
| + "Connection: close\n" |
| + "\n", |
| + location.c_str()); |
| std::string raw_headers = |
| HttpUtil::AssembleRawHeaders(fake_response_headers.data(), |
| fake_response_headers.length()); |