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

Unified Diff: net/http/http_proxy_client_socket_pool_unittest.cc

Issue 517693002: Add embedder-specific headers to HTTP CONNECT tunnel request (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reworked HaveAuth test Created 6 years, 3 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_proxy_client_socket_pool.cc ('k') | net/http/http_stream_factory_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/http_proxy_client_socket_pool_unittest.cc
diff --git a/net/http/http_proxy_client_socket_pool_unittest.cc b/net/http/http_proxy_client_socket_pool_unittest.cc
index f2464919e3a72e53a9a3c66a76db1490d50b98f5..95908773068b11c7656c66cc53f1aa2d09670e48 100644
--- a/net/http/http_proxy_client_socket_pool_unittest.cc
+++ b/net/http/http_proxy_client_socket_pool_unittest.cc
@@ -9,6 +9,7 @@
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "net/base/net_errors.h"
+#include "net/base/proxy_delegate.h"
#include "net/base/test_completion_callback.h"
#include "net/http/http_network_session.h"
#include "net/http/http_proxy_client_socket.h"
@@ -58,6 +59,79 @@ typedef ::testing::TestWithParam<HttpProxyType> TestWithHttpParam;
const char kHttpProxyHost[] = "httpproxy.example.com";
const char kHttpsProxyHost[] = "httpsproxy.example.com";
+class TestProxyDelegate : public ProxyDelegate {
+ public:
+ TestProxyDelegate()
+ : on_before_tunnel_request_called_(false),
+ on_tunnel_headers_received_called_(false) {
+ }
+
+ virtual ~TestProxyDelegate() OVERRIDE {
+ }
+
+ bool on_before_tunnel_request_called() const {
+ return on_before_tunnel_request_called_;
+ }
+
+ bool on_tunnel_headers_received_called() const {
+ return on_tunnel_headers_received_called_;
+ }
+
+ void VerifyOnTunnelHeadersReceived(const std::string& origin,
+ const std::string& proxy_server,
+ const std::string& status_line) const {
+ EXPECT_TRUE(on_tunnel_headers_received_called_);
+ EXPECT_TRUE(HostPortPair::FromString(origin).Equals(
+ on_tunnel_headers_received_origin_));
+ EXPECT_TRUE(HostPortPair::FromString(proxy_server).Equals(
+ on_tunnel_headers_received_proxy_server_));
+ EXPECT_EQ(status_line, on_tunnel_headers_received_status_line_);
+ }
+
+ // ProxyDelegate:
+ virtual void OnResolveProxy(const GURL& url,
+ int load_flags,
+ const ProxyService& proxy_service,
+ ProxyInfo* result) OVERRIDE {
+ }
+
+ virtual void OnFallback(const ProxyServer& bad_proxy,
+ int net_error) OVERRIDE {
+ }
+
+ virtual void OnBeforeSendHeaders(URLRequest* request,
+ const ProxyInfo& proxy_info,
+ HttpRequestHeaders* headers) OVERRIDE {
+ }
+
+ virtual void OnBeforeTunnelRequest(
+ const net::HostPortPair& proxy_server,
+ net::HttpRequestHeaders* extra_headers) OVERRIDE {
+ on_before_tunnel_request_called_ = true;
+ if (extra_headers) {
+ extra_headers->SetHeader("Foo", proxy_server.ToString());
+ }
+ }
+
+ virtual void OnTunnelHeadersReceived(
+ const net::HostPortPair& origin,
+ const net::HostPortPair& proxy_server,
+ const net::HttpResponseHeaders& response_headers) OVERRIDE {
+ on_tunnel_headers_received_called_ = true;
+ on_tunnel_headers_received_origin_ = origin;
+ on_tunnel_headers_received_proxy_server_ = proxy_server;
+ on_tunnel_headers_received_status_line_ = response_headers.GetStatusLine();
+ }
+
+ private:
+ bool on_before_tunnel_request_called_;
+ bool on_tunnel_headers_received_called_;
+ HostPortPair on_tunnel_headers_received_origin_;
+ HostPortPair on_tunnel_headers_received_proxy_server_;
+ std::string on_tunnel_headers_received_status_line_;
+};
+
+
class HttpProxyClientSocketPoolTest
: public ::testing::TestWithParam<HttpProxyClientSocketPoolTestParams> {
protected:
@@ -95,6 +169,7 @@ class HttpProxyClientSocketPoolTest
NULL,
&transport_socket_pool_,
&ssl_socket_pool_,
+ NULL,
NULL) {}
virtual ~HttpProxyClientSocketPoolTest() {
@@ -144,7 +219,9 @@ class HttpProxyClientSocketPoolTest
// Returns the a correctly constructed HttpProxyParms
// for the HTTP or HTTPS proxy.
- scoped_refptr<HttpProxySocketParams> CreateParams(bool tunnel) {
+ scoped_refptr<HttpProxySocketParams> CreateParams(
+ bool tunnel,
+ ProxyDelegate* proxy_delegate) {
return scoped_refptr<HttpProxySocketParams>(new HttpProxySocketParams(
CreateHttpProxyParams(),
CreateHttpsProxyParams(),
@@ -154,15 +231,18 @@ class HttpProxyClientSocketPoolTest
session_->http_auth_cache(),
session_->http_auth_handler_factory(),
session_->spdy_session_pool(),
- tunnel));
+ tunnel,
+ proxy_delegate));
}
- scoped_refptr<HttpProxySocketParams> CreateTunnelParams() {
- return CreateParams(true);
+ scoped_refptr<HttpProxySocketParams> CreateTunnelParams(
+ ProxyDelegate* proxy_delegate) {
+ return CreateParams(true, proxy_delegate);
}
- scoped_refptr<HttpProxySocketParams> CreateNoTunnelParams() {
- return CreateParams(false);
+ scoped_refptr<HttpProxySocketParams> CreateNoTunnelParams(
+ ProxyDelegate* proxy_delegate) {
+ return CreateParams(false, proxy_delegate);
}
DeterministicMockClientSocketFactory* socket_factory() {
@@ -256,14 +336,17 @@ INSTANTIATE_TEST_CASE_P(
TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) {
Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0);
- int rv = handle_.Init("a", CreateNoTunnelParams(), LOW, CompletionCallback(),
- &pool_, BoundNetLog());
+ scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate());
+ int rv = handle_.Init("a", CreateNoTunnelParams(proxy_delegate.get()), LOW,
+ CompletionCallback(), &pool_, BoundNetLog());
EXPECT_EQ(OK, rv);
EXPECT_TRUE(handle_.is_initialized());
ASSERT_TRUE(handle_.socket());
HttpProxyClientSocket* tunnel_socket =
static_cast<HttpProxyClientSocket*>(handle_.socket());
EXPECT_TRUE(tunnel_socket->IsConnected());
+ EXPECT_FALSE(proxy_delegate->on_before_tunnel_request_called());
+ EXPECT_FALSE(proxy_delegate->on_tunnel_headers_received_called());
}
// Make sure that HttpProxyConnectJob passes on its priority to its
@@ -271,7 +354,7 @@ TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) {
TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) {
Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0);
EXPECT_EQ(OK,
- handle_.Init("a", CreateNoTunnelParams(), HIGHEST,
+ handle_.Init("a", CreateNoTunnelParams(NULL), HIGHEST,
CompletionCallback(), &pool_, BoundNetLog()));
EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority());
}
@@ -313,8 +396,8 @@ TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) {
arraysize(spdy_writes));
data_->StopAfter(4);
- int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(),
- &pool_, BoundNetLog());
+ int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
+ callback_.callback(), &pool_, BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
EXPECT_FALSE(handle_.is_initialized());
EXPECT_FALSE(handle_.socket());
@@ -340,12 +423,18 @@ TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) {
// so we skip this test for SPDY
if (GetParam().proxy_type == SPDY)
return;
+ std::string proxy_host_port =
+ GetParam().proxy_type == HTTP ?
+ (kHttpProxyHost + std::string(":80")) :
+ (kHttpsProxyHost + std::string(":443"));
+ std::string request =
+ "CONNECT www.google.com:443 HTTP/1.1\r\n"
+ "Host: www.google.com\r\n"
+ "Proxy-Connection: keep-alive\r\n"
+ "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n"
+ "Foo: " + proxy_host_port + "\r\n\r\n";
MockWrite writes[] = {
- MockWrite(SYNCHRONOUS, 0,
- "CONNECT www.google.com:443 HTTP/1.1\r\n"
- "Host: www.google.com\r\n"
- "Proxy-Connection: keep-alive\r\n"
- "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
+ MockWrite(SYNCHRONOUS, 0, request.c_str()),
};
MockRead reads[] = {
MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"),
@@ -355,14 +444,19 @@ TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) {
NULL, 0);
AddAuthToCache();
- int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(),
- &pool_, BoundNetLog());
+ scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate());
+ int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW,
+ callback_.callback(), &pool_, BoundNetLog());
EXPECT_EQ(OK, rv);
EXPECT_TRUE(handle_.is_initialized());
ASSERT_TRUE(handle_.socket());
HttpProxyClientSocket* tunnel_socket =
static_cast<HttpProxyClientSocket*>(handle_.socket());
EXPECT_TRUE(tunnel_socket->IsConnected());
+ proxy_delegate->VerifyOnTunnelHeadersReceived(
+ "www.google.com:443",
+ proxy_host_port.c_str(),
+ "HTTP/1.1 200 Connection Established");
}
TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) {
@@ -392,8 +486,8 @@ TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) {
arraysize(spdy_writes));
AddAuthToCache();
- int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(),
- &pool_, BoundNetLog());
+ int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
+ callback_.callback(), &pool_, BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
EXPECT_FALSE(handle_.is_initialized());
EXPECT_FALSE(handle_.socket());
@@ -432,7 +526,7 @@ TEST_P(HttpProxyClientSocketPoolTest,
AddAuthToCache();
EXPECT_EQ(ERR_IO_PENDING,
- handle_.Init("a", CreateTunnelParams(), MEDIUM,
+ handle_.Init("a", CreateTunnelParams(NULL), MEDIUM,
callback_.callback(), &pool_, BoundNetLog()));
EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority());
@@ -447,8 +541,8 @@ TEST_P(HttpProxyClientSocketPoolTest, TCPError) {
socket_factory()->AddSocketDataProvider(data_.get());
- int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(),
- &pool_, BoundNetLog());
+ int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
+ callback_.callback(), &pool_, BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
EXPECT_FALSE(handle_.is_initialized());
EXPECT_FALSE(handle_.socket());
@@ -472,8 +566,8 @@ TEST_P(HttpProxyClientSocketPoolTest, SSLError) {
}
socket_factory()->AddSSLSocketDataProvider(ssl_data_.get());
- int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(),
- &pool_, BoundNetLog());
+ int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
+ callback_.callback(), &pool_, BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
EXPECT_FALSE(handle_.is_initialized());
EXPECT_FALSE(handle_.socket());
@@ -497,8 +591,8 @@ TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) {
}
socket_factory()->AddSSLSocketDataProvider(ssl_data_.get());
- int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(),
- &pool_, BoundNetLog());
+ int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
+ callback_.callback(), &pool_, BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
EXPECT_FALSE(handle_.is_initialized());
EXPECT_FALSE(handle_.socket());
@@ -535,8 +629,8 @@ TEST_P(HttpProxyClientSocketPoolTest, TunnelUnexpectedClose) {
arraysize(spdy_writes));
AddAuthToCache();
- int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(),
- &pool_, BoundNetLog());
+ int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
+ callback_.callback(), &pool_, BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
EXPECT_FALSE(handle_.is_initialized());
EXPECT_FALSE(handle_.socket());
@@ -574,8 +668,8 @@ TEST_P(HttpProxyClientSocketPoolTest, Tunnel1xxResponse) {
Initialize(reads, arraysize(reads), writes, arraysize(writes),
NULL, 0, NULL, 0);
- int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(),
- &pool_, BoundNetLog());
+ int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
+ callback_.callback(), &pool_, BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
EXPECT_FALSE(handle_.is_initialized());
EXPECT_FALSE(handle_.socket());
@@ -614,8 +708,8 @@ TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) {
arraysize(spdy_writes));
AddAuthToCache();
- int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(),
- &pool_, BoundNetLog());
+ int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
+ callback_.callback(), &pool_, BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
EXPECT_FALSE(handle_.is_initialized());
EXPECT_FALSE(handle_.socket());
@@ -676,8 +770,8 @@ TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupRedirect) {
arraysize(spdy_writes));
AddAuthToCache();
- int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(),
- &pool_, BoundNetLog());
+ int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
+ callback_.callback(), &pool_, BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
EXPECT_FALSE(handle_.is_initialized());
EXPECT_FALSE(handle_.socket());
« no previous file with comments | « net/http/http_proxy_client_socket_pool.cc ('k') | net/http/http_stream_factory_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698