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

Side by Side 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: Added tests 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 unified diff | Download patch
OLDNEW
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/http_proxy_client_socket_pool.h" 5 #include "net/http/http_proxy_client_socket_pool.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 std::string() /* ssl_session_cache_shard */, 81 std::string() /* ssl_session_cache_shard */,
82 session_deps_.deterministic_socket_factory.get(), 82 session_deps_.deterministic_socket_factory.get(),
83 &transport_socket_pool_, 83 &transport_socket_pool_,
84 NULL, 84 NULL,
85 NULL, 85 NULL,
86 session_deps_.ssl_config_service.get(), 86 session_deps_.ssl_config_service.get(),
87 false, 87 false,
88 BoundNetLog().net_log()), 88 BoundNetLog().net_log()),
89 session_(CreateNetworkSession()), 89 session_(CreateNetworkSession()),
90 http_proxy_histograms_("HttpProxyUnitTest"), 90 http_proxy_histograms_("HttpProxyUnitTest"),
91 before_proxy_tunnel_request_callback_(
92 base::Bind(
93 &HttpProxyClientSocketPoolTest::OnBeforeProxyTunnelRequest,
94 base::Unretained(this))),
95 on_before_proxy_tunnel_request_called_(false),
91 spdy_util_(GetParam().protocol), 96 spdy_util_(GetParam().protocol),
92 pool_(kMaxSockets, 97 pool_(kMaxSockets,
93 kMaxSocketsPerGroup, 98 kMaxSocketsPerGroup,
94 &http_proxy_histograms_, 99 &http_proxy_histograms_,
95 NULL, 100 NULL,
96 &transport_socket_pool_, 101 &transport_socket_pool_,
97 &ssl_socket_pool_, 102 &ssl_socket_pool_,
103 before_proxy_tunnel_request_callback_,
98 NULL) {} 104 NULL) {}
99 105
100 virtual ~HttpProxyClientSocketPoolTest() { 106 virtual ~HttpProxyClientSocketPoolTest() {
101 } 107 }
102 108
103 void AddAuthToCache() { 109 void AddAuthToCache() {
104 const base::string16 kFoo(base::ASCIIToUTF16("foo")); 110 const base::string16 kFoo(base::ASCIIToUTF16("foo"));
105 const base::string16 kBar(base::ASCIIToUTF16("bar")); 111 const base::string16 kBar(base::ASCIIToUTF16("bar"));
106 GURL proxy_url(GetParam().proxy_type == HTTP ? 112 GURL proxy_url(GetParam().proxy_type == HTTP ?
107 (std::string("http://") + kHttpProxyHost) : 113 (std::string("http://") + kHttpProxyHost) :
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 scoped_refptr<HttpProxySocketParams> CreateParams(bool tunnel) { 153 scoped_refptr<HttpProxySocketParams> CreateParams(bool tunnel) {
148 return scoped_refptr<HttpProxySocketParams>(new HttpProxySocketParams( 154 return scoped_refptr<HttpProxySocketParams>(new HttpProxySocketParams(
149 CreateHttpProxyParams(), 155 CreateHttpProxyParams(),
150 CreateHttpsProxyParams(), 156 CreateHttpsProxyParams(),
151 GURL(tunnel ? "https://www.google.com/" : "http://www.google.com"), 157 GURL(tunnel ? "https://www.google.com/" : "http://www.google.com"),
152 std::string(), 158 std::string(),
153 HostPortPair("www.google.com", tunnel ? 443 : 80), 159 HostPortPair("www.google.com", tunnel ? 443 : 80),
154 session_->http_auth_cache(), 160 session_->http_auth_cache(),
155 session_->http_auth_handler_factory(), 161 session_->http_auth_handler_factory(),
156 session_->spdy_session_pool(), 162 session_->spdy_session_pool(),
157 tunnel)); 163 tunnel,
164 before_proxy_tunnel_request_callback_));
158 } 165 }
159 166
160 scoped_refptr<HttpProxySocketParams> CreateTunnelParams() { 167 scoped_refptr<HttpProxySocketParams> CreateTunnelParams() {
161 return CreateParams(true); 168 return CreateParams(true);
162 } 169 }
163 170
164 scoped_refptr<HttpProxySocketParams> CreateNoTunnelParams() { 171 scoped_refptr<HttpProxySocketParams> CreateNoTunnelParams() {
165 return CreateParams(false); 172 return CreateParams(false);
166 } 173 }
167 174
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 208
202 HttpNetworkSession* CreateNetworkSession() { 209 HttpNetworkSession* CreateNetworkSession() {
203 return SpdySessionDependencies::SpdyCreateSessionDeterministic( 210 return SpdySessionDependencies::SpdyCreateSessionDeterministic(
204 &session_deps_); 211 &session_deps_);
205 } 212 }
206 213
207 RequestPriority GetLastTransportRequestPriority() const { 214 RequestPriority GetLastTransportRequestPriority() const {
208 return transport_socket_pool_.last_request_priority(); 215 return transport_socket_pool_.last_request_priority();
209 } 216 }
210 217
218 void OnBeforeProxyTunnelRequest(const HostPortPair& proxy,
219 HttpRequestHeaders* extra_headers) {
220 on_before_proxy_tunnel_request_called_ = true;
221 }
222
223 bool on_before_proxy_tunnel_request_called() {
224 return on_before_proxy_tunnel_request_called_;
225 }
226
211 private: 227 private:
212 SpdySessionDependencies session_deps_; 228 SpdySessionDependencies session_deps_;
213 229
214 ClientSocketPoolHistograms tcp_histograms_; 230 ClientSocketPoolHistograms tcp_histograms_;
215 MockTransportClientSocketPool transport_socket_pool_; 231 MockTransportClientSocketPool transport_socket_pool_;
216 ClientSocketPoolHistograms ssl_histograms_; 232 ClientSocketPoolHistograms ssl_histograms_;
217 MockHostResolver host_resolver_; 233 MockHostResolver host_resolver_;
218 scoped_ptr<CertVerifier> cert_verifier_; 234 scoped_ptr<CertVerifier> cert_verifier_;
219 SSLClientSocketPool ssl_socket_pool_; 235 SSLClientSocketPool ssl_socket_pool_;
220 236
221 const scoped_refptr<HttpNetworkSession> session_; 237 const scoped_refptr<HttpNetworkSession> session_;
222 ClientSocketPoolHistograms http_proxy_histograms_; 238 ClientSocketPoolHistograms http_proxy_histograms_;
239 const base::Callback<void(const HostPortPair&, HttpRequestHeaders*)>
240 before_proxy_tunnel_request_callback_;
241 bool on_before_proxy_tunnel_request_called_;
223 242
224 protected: 243 protected:
225 SpdyTestUtil spdy_util_; 244 SpdyTestUtil spdy_util_;
226 scoped_ptr<SSLSocketDataProvider> ssl_data_; 245 scoped_ptr<SSLSocketDataProvider> ssl_data_;
227 scoped_ptr<DeterministicSocketData> data_; 246 scoped_ptr<DeterministicSocketData> data_;
228 HttpProxyClientSocketPool pool_; 247 HttpProxyClientSocketPool pool_;
229 ClientSocketHandle handle_; 248 ClientSocketHandle handle_;
230 TestCompletionCallback callback_; 249 TestCompletionCallback callback_;
231 }; 250 };
232 251
(...skipping 24 matching lines...) Expand all
257 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); 276 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0);
258 277
259 int rv = handle_.Init("a", CreateNoTunnelParams(), LOW, CompletionCallback(), 278 int rv = handle_.Init("a", CreateNoTunnelParams(), LOW, CompletionCallback(),
260 &pool_, BoundNetLog()); 279 &pool_, BoundNetLog());
261 EXPECT_EQ(OK, rv); 280 EXPECT_EQ(OK, rv);
262 EXPECT_TRUE(handle_.is_initialized()); 281 EXPECT_TRUE(handle_.is_initialized());
263 ASSERT_TRUE(handle_.socket()); 282 ASSERT_TRUE(handle_.socket());
264 HttpProxyClientSocket* tunnel_socket = 283 HttpProxyClientSocket* tunnel_socket =
265 static_cast<HttpProxyClientSocket*>(handle_.socket()); 284 static_cast<HttpProxyClientSocket*>(handle_.socket());
266 EXPECT_TRUE(tunnel_socket->IsConnected()); 285 EXPECT_TRUE(tunnel_socket->IsConnected());
286 EXPECT_FALSE(on_before_proxy_tunnel_request_called());
267 } 287 }
268 288
269 // Make sure that HttpProxyConnectJob passes on its priority to its 289 // Make sure that HttpProxyConnectJob passes on its priority to its
270 // (non-SSL) socket request on Init. 290 // (non-SSL) socket request on Init.
271 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { 291 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) {
272 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); 292 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0);
273 EXPECT_EQ(OK, 293 EXPECT_EQ(OK,
274 handle_.Init("a", CreateNoTunnelParams(), HIGHEST, 294 handle_.Init("a", CreateNoTunnelParams(), HIGHEST,
275 CompletionCallback(), &pool_, BoundNetLog())); 295 CompletionCallback(), &pool_, BoundNetLog()));
276 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority()); 296 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority());
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 AddAuthToCache(); 376 AddAuthToCache();
357 377
358 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 378 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(),
359 &pool_, BoundNetLog()); 379 &pool_, BoundNetLog());
360 EXPECT_EQ(OK, rv); 380 EXPECT_EQ(OK, rv);
361 EXPECT_TRUE(handle_.is_initialized()); 381 EXPECT_TRUE(handle_.is_initialized());
362 ASSERT_TRUE(handle_.socket()); 382 ASSERT_TRUE(handle_.socket());
363 HttpProxyClientSocket* tunnel_socket = 383 HttpProxyClientSocket* tunnel_socket =
364 static_cast<HttpProxyClientSocket*>(handle_.socket()); 384 static_cast<HttpProxyClientSocket*>(handle_.socket());
365 EXPECT_TRUE(tunnel_socket->IsConnected()); 385 EXPECT_TRUE(tunnel_socket->IsConnected());
386 EXPECT_TRUE(on_before_proxy_tunnel_request_called());
366 } 387 }
367 388
368 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { 389 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) {
369 MockWrite writes[] = { 390 MockWrite writes[] = {
370 MockWrite(ASYNC, 0, "CONNECT www.google.com:443 HTTP/1.1\r\n" 391 MockWrite(ASYNC, 0, "CONNECT www.google.com:443 HTTP/1.1\r\n"
371 "Host: www.google.com\r\n" 392 "Host: www.google.com\r\n"
372 "Proxy-Connection: keep-alive\r\n" 393 "Proxy-Connection: keep-alive\r\n"
373 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 394 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
374 }; 395 };
375 MockRead reads[] = { 396 MockRead reads[] = {
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 EXPECT_TRUE(headers->IsRedirect(&location)); 734 EXPECT_TRUE(headers->IsRedirect(&location));
714 EXPECT_EQ(location, redirectTarget); 735 EXPECT_EQ(location, redirectTarget);
715 } 736 }
716 } 737 }
717 738
718 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. 739 // It would be nice to also test the timeouts in HttpProxyClientSocketPool.
719 740
720 } // namespace 741 } // namespace
721 742
722 } // namespace net 743 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698