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

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: Addressed comments from mef and mmenke 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
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..00b92102e788a02c5caea91142ec7a3f0dac07b4 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() {
@@ -208,6 +288,7 @@ class HttpProxyClientSocketPoolTest
return transport_socket_pool_.last_request_priority();
}
+
mef 2014/09/10 15:05:25 nit: spurious nl.
bengr 2014/09/10 19:18:59 Done.
private:
SpdySessionDependencies session_deps_;
@@ -256,14 +337,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 +355,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 +397,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());
@@ -345,7 +429,8 @@ TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) {
"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"),
+ "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n"
+ "Foo: httpproxy.example.com:80\r\n\r\n"),
};
MockRead reads[] = {
MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"),
@@ -355,14 +440,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",
+ "httpproxy.example.com:80",
+ "HTTP/1.1 200 Connection Established");
}
TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) {
@@ -392,8 +482,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 +522,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 +537,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 +562,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 +587,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 +625,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 +664,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 +704,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 +766,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());

Powered by Google App Engine
This is Rietveld 408576698