Index: net/http/http_proxy_client_socket.cc |
diff --git a/net/http/http_proxy_client_socket.cc b/net/http/http_proxy_client_socket.cc |
index 3d9eadd48353eaa61095581bcc22034e3e510e7f..06a4ac9c5e653e5125e60b1e0bd7e0045561f572 100644 |
--- a/net/http/http_proxy_client_socket.cc |
+++ b/net/http/http_proxy_client_socket.cc |
@@ -6,6 +6,7 @@ |
#include "base/bind.h" |
#include "base/bind_helpers.h" |
+#include "base/callback.h" |
#include "base/strings/string_util.h" |
#include "base/strings/stringprintf.h" |
#include "net/base/auth.h" |
@@ -35,6 +36,8 @@ HttpProxyClientSocket::HttpProxyClientSocket( |
bool tunnel, |
bool using_spdy, |
NextProto protocol_negotiated, |
+ const base::Callback<void(const HostPortPair&, HttpRequestHeaders*)>& |
+ before_proxy_tunnel_request_callback, |
bool is_https_proxy) |
: io_callback_(base::Bind(&HttpProxyClientSocket::OnIOComplete, |
base::Unretained(this))), |
@@ -53,6 +56,9 @@ HttpProxyClientSocket::HttpProxyClientSocket( |
protocol_negotiated_(protocol_negotiated), |
is_https_proxy_(is_https_proxy), |
redirect_has_load_timing_info_(false), |
+ proxy_server_(proxy_server), |
+ before_proxy_tunnel_request_callback_( |
+ before_proxy_tunnel_request_callback), |
net_log_(transport_socket->socket()->NetLog()) { |
// Synthesize the bits of a request that we actually use. |
request_.url = request_url; |
@@ -403,6 +409,10 @@ int HttpProxyClientSocket::DoSendRequest() { |
if (request_line_.empty()) { |
DCHECK(request_headers_.IsEmpty()); |
HttpRequestHeaders authorization_headers; |
+ if (!before_proxy_tunnel_request_callback_.is_null()) { |
+ before_proxy_tunnel_request_callback_.Run(proxy_server_, |
+ &authorization_headers); |
+ } |
if (auth_->HaveAuth()) |
auth_->AddAuthorizationHeader(&authorization_headers); |
BuildTunnelRequest(request_, authorization_headers, endpoint_, |