| 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..3c539c6895e295a98f9645070e4258bbf78b5d73 100644
|
| --- a/net/http/proxy_client_socket.cc
|
| +++ b/net/http/proxy_client_socket.cc
|
| @@ -17,6 +17,20 @@
|
|
|
| namespace net {
|
|
|
| +namespace {
|
| +
|
| +void CopyHeaderValues(scoped_refptr<HttpResponseHeaders> source,
|
| + scoped_refptr<HttpResponseHeaders> dest,
|
| + const std::string& header_name) {
|
| + void* iter = NULL;
|
| + std::string header_value;
|
| +
|
| + while (source->EnumerateHeader(&iter, header_name, &header_value))
|
| + dest->AddHeader(header_name + ": " + header_value);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| // static
|
| void ProxyClientSocket::BuildTunnelRequest(
|
| const HttpRequestInfo& request_info,
|
| @@ -72,22 +86,39 @@ 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());
|
| +
|
| + scoped_refptr<HttpResponseHeaders> old_headers = response->headers;
|
| +
|
| + const char kHeaders[] = "HTTP/1.1 407 Proxy Authentication Required\n\n";
|
| + scoped_refptr<HttpResponseHeaders> new_headers = new HttpResponseHeaders(
|
| + HttpUtil::AssembleRawHeaders(kHeaders, arraysize(kHeaders)));
|
| +
|
| + new_headers->ReplaceStatusLine(old_headers->GetStatusLine());
|
| + CopyHeaderValues(old_headers, new_headers, "Connection");
|
| + CopyHeaderValues(old_headers, new_headers, "Proxy-Authenticate");
|
| +
|
| + response->headers = new_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.0 302 Found\n"
|
| + "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());
|
|
|