| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/http/proxy_client_socket.h" | 5 #include "net/http/proxy_client_socket.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram_macros.h" | 7 #include "base/metrics/histogram_macros.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "net/base/host_port_pair.h" | 9 #include "net/base/host_port_pair.h" |
| 10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 : host_and_port); | 50 : host_and_port); |
| 51 request_headers->SetHeader(HttpRequestHeaders::kProxyConnection, | 51 request_headers->SetHeader(HttpRequestHeaders::kProxyConnection, |
| 52 "keep-alive"); | 52 "keep-alive"); |
| 53 if (!user_agent.empty()) | 53 if (!user_agent.empty()) |
| 54 request_headers->SetHeader(HttpRequestHeaders::kUserAgent, user_agent); | 54 request_headers->SetHeader(HttpRequestHeaders::kUserAgent, user_agent); |
| 55 | 55 |
| 56 request_headers->MergeFrom(auth_headers); | 56 request_headers->MergeFrom(auth_headers); |
| 57 } | 57 } |
| 58 | 58 |
| 59 // static | 59 // static |
| 60 int ProxyClientSocket::HandleProxyAuthChallenge(HttpAuthController* auth, | |
| 61 HttpResponseInfo* response, | |
| 62 const BoundNetLog& net_log) { | |
| 63 DCHECK(response->headers.get()); | |
| 64 int rv = auth->HandleAuthChallenge(response->headers, false, true, net_log); | |
| 65 response->auth_challenge = auth->auth_info(); | |
| 66 if (rv == OK) | |
| 67 return ERR_PROXY_AUTH_REQUESTED; | |
| 68 return rv; | |
| 69 } | |
| 70 | |
| 71 // static | |
| 72 void ProxyClientSocket::LogBlockedTunnelResponse(int http_status_code, | 60 void ProxyClientSocket::LogBlockedTunnelResponse(int http_status_code, |
| 73 bool is_https_proxy) { | 61 bool is_https_proxy) { |
| 74 if (is_https_proxy) { | 62 if (is_https_proxy) { |
| 75 UMA_HISTOGRAM_CUSTOM_ENUMERATION( | 63 UMA_HISTOGRAM_CUSTOM_ENUMERATION( |
| 76 "Net.BlockedTunnelResponse.HttpsProxy", | 64 "Net.BlockedTunnelResponse.HttpsProxy", |
| 77 HttpUtil::MapStatusCodeForHistogram(http_status_code), | 65 HttpUtil::MapStatusCodeForHistogram(http_status_code), |
| 78 HttpUtil::GetStatusCodesForHistogram()); | 66 HttpUtil::GetStatusCodesForHistogram()); |
| 79 } else { | 67 } else { |
| 80 UMA_HISTOGRAM_CUSTOM_ENUMERATION( | 68 UMA_HISTOGRAM_CUSTOM_ENUMERATION( |
| 81 "Net.BlockedTunnelResponse.HttpProxy", | 69 "Net.BlockedTunnelResponse.HttpProxy", |
| (...skipping 14 matching lines...) Expand all Loading... |
| 96 | 84 |
| 97 // Copy status line and all hop-by-hop headers to preserve keep-alive | 85 // Copy status line and all hop-by-hop headers to preserve keep-alive |
| 98 // behavior. | 86 // behavior. |
| 99 new_headers->ReplaceStatusLine(old_headers->GetStatusLine()); | 87 new_headers->ReplaceStatusLine(old_headers->GetStatusLine()); |
| 100 CopyHeaderValues(old_headers, new_headers, "connection"); | 88 CopyHeaderValues(old_headers, new_headers, "connection"); |
| 101 CopyHeaderValues(old_headers, new_headers, "proxy-connection"); | 89 CopyHeaderValues(old_headers, new_headers, "proxy-connection"); |
| 102 CopyHeaderValues(old_headers, new_headers, "keep-alive"); | 90 CopyHeaderValues(old_headers, new_headers, "keep-alive"); |
| 103 CopyHeaderValues(old_headers, new_headers, "trailer"); | 91 CopyHeaderValues(old_headers, new_headers, "trailer"); |
| 104 CopyHeaderValues(old_headers, new_headers, "transfer-encoding"); | 92 CopyHeaderValues(old_headers, new_headers, "transfer-encoding"); |
| 105 CopyHeaderValues(old_headers, new_headers, "upgrade"); | 93 CopyHeaderValues(old_headers, new_headers, "upgrade"); |
| 106 | |
| 107 CopyHeaderValues(old_headers, new_headers, "content-length"); | 94 CopyHeaderValues(old_headers, new_headers, "content-length"); |
| 108 | |
| 109 CopyHeaderValues(old_headers, new_headers, "proxy-authenticate"); | 95 CopyHeaderValues(old_headers, new_headers, "proxy-authenticate"); |
| 110 | 96 |
| 111 response->headers = new_headers; | 97 response->headers = new_headers; |
| 112 return true; | 98 return true; |
| 113 } | 99 } |
| 114 | 100 |
| 115 // static | 101 // static |
| 116 bool ProxyClientSocket::SanitizeProxyRedirect(HttpResponseInfo* response) { | 102 bool ProxyClientSocket::SanitizeProxyRedirect(HttpResponseInfo* response) { |
| 117 DCHECK(response && response->headers.get()); | 103 DCHECK(response && response->headers.get()); |
| 118 | 104 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 130 location.c_str()); | 116 location.c_str()); |
| 131 std::string raw_headers = | 117 std::string raw_headers = |
| 132 HttpUtil::AssembleRawHeaders(fake_response_headers.data(), | 118 HttpUtil::AssembleRawHeaders(fake_response_headers.data(), |
| 133 fake_response_headers.length()); | 119 fake_response_headers.length()); |
| 134 response->headers = new HttpResponseHeaders(raw_headers); | 120 response->headers = new HttpResponseHeaders(raw_headers); |
| 135 | 121 |
| 136 return true; | 122 return true; |
| 137 } | 123 } |
| 138 | 124 |
| 139 } // namespace net | 125 } // namespace net |
| OLD | NEW |