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/http_proxy_client_socket_pool.h" | 5 #include "net/http/http_proxy_client_socket_pool.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 NULL /* channel_id_store */, | 64 NULL /* channel_id_store */, |
65 NULL /* transport_security_state */, | 65 NULL /* transport_security_state */, |
66 NULL /* cert_transparency_verifier */, | 66 NULL /* cert_transparency_verifier */, |
67 NULL /* ct_policy_enforcer */, | 67 NULL /* ct_policy_enforcer */, |
68 std::string() /* ssl_session_cache_shard */, | 68 std::string() /* ssl_session_cache_shard */, |
69 session_deps_.socket_factory.get(), | 69 session_deps_.socket_factory.get(), |
70 &transport_socket_pool_, | 70 &transport_socket_pool_, |
71 NULL, | 71 NULL, |
72 NULL, | 72 NULL, |
73 session_deps_.ssl_config_service.get(), | 73 session_deps_.ssl_config_service.get(), |
74 BoundNetLog().net_log()), | 74 NetLogWithSource().net_log()), |
75 pool_(kMaxSockets, | 75 pool_(kMaxSockets, |
76 kMaxSocketsPerGroup, | 76 kMaxSocketsPerGroup, |
77 &transport_socket_pool_, | 77 &transport_socket_pool_, |
78 &ssl_socket_pool_, | 78 &ssl_socket_pool_, |
79 NULL) { | 79 NULL) { |
80 session_ = CreateNetworkSession(); | 80 session_ = CreateNetworkSession(); |
81 } | 81 } |
82 | 82 |
83 virtual ~HttpProxyClientSocketPoolTest() {} | 83 virtual ~HttpProxyClientSocketPoolTest() {} |
84 | 84 |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 INSTANTIATE_TEST_CASE_P(HttpProxyType, | 214 INSTANTIATE_TEST_CASE_P(HttpProxyType, |
215 HttpProxyClientSocketPoolTest, | 215 HttpProxyClientSocketPoolTest, |
216 ::testing::Values(HTTP, HTTPS, SPDY)); | 216 ::testing::Values(HTTP, HTTPS, SPDY)); |
217 | 217 |
218 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { | 218 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { |
219 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); | 219 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); |
220 | 220 |
221 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 221 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
222 int rv = handle_.Init("a", CreateNoTunnelParams(proxy_delegate.get()), LOW, | 222 int rv = handle_.Init("a", CreateNoTunnelParams(proxy_delegate.get()), LOW, |
223 ClientSocketPool::RespectLimits::ENABLED, | 223 ClientSocketPool::RespectLimits::ENABLED, |
224 CompletionCallback(), &pool_, BoundNetLog()); | 224 CompletionCallback(), &pool_, NetLogWithSource()); |
225 EXPECT_THAT(rv, IsOk()); | 225 EXPECT_THAT(rv, IsOk()); |
226 EXPECT_TRUE(handle_.is_initialized()); | 226 EXPECT_TRUE(handle_.is_initialized()); |
227 ASSERT_TRUE(handle_.socket()); | 227 ASSERT_TRUE(handle_.socket()); |
228 EXPECT_TRUE(handle_.socket()->IsConnected()); | 228 EXPECT_TRUE(handle_.socket()->IsConnected()); |
229 EXPECT_FALSE(proxy_delegate->on_before_tunnel_request_called()); | 229 EXPECT_FALSE(proxy_delegate->on_before_tunnel_request_called()); |
230 EXPECT_FALSE(proxy_delegate->on_tunnel_headers_received_called()); | 230 EXPECT_FALSE(proxy_delegate->on_tunnel_headers_received_called()); |
231 EXPECT_TRUE(proxy_delegate->on_tunnel_request_completed_called()); | 231 EXPECT_TRUE(proxy_delegate->on_tunnel_request_completed_called()); |
232 } | 232 } |
233 | 233 |
234 // Make sure that HttpProxyConnectJob passes on its priority to its | 234 // Make sure that HttpProxyConnectJob passes on its priority to its |
235 // (non-SSL) socket request on Init. | 235 // (non-SSL) socket request on Init. |
236 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { | 236 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { |
237 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); | 237 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); |
238 EXPECT_EQ(OK, handle_.Init("a", CreateNoTunnelParams(NULL), HIGHEST, | 238 EXPECT_EQ(OK, handle_.Init("a", CreateNoTunnelParams(NULL), HIGHEST, |
239 ClientSocketPool::RespectLimits::ENABLED, | 239 ClientSocketPool::RespectLimits::ENABLED, |
240 CompletionCallback(), &pool_, BoundNetLog())); | 240 CompletionCallback(), &pool_, NetLogWithSource())); |
241 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority()); | 241 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority()); |
242 } | 242 } |
243 | 243 |
244 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { | 244 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { |
245 MockWrite writes[] = { | 245 MockWrite writes[] = { |
246 MockWrite(ASYNC, 0, | 246 MockWrite(ASYNC, 0, |
247 "CONNECT www.google.com:443 HTTP/1.1\r\n" | 247 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
248 "Host: www.google.com:443\r\n" | 248 "Host: www.google.com:443\r\n" |
249 "Proxy-Connection: keep-alive\r\n\r\n"), | 249 "Proxy-Connection: keep-alive\r\n\r\n"), |
250 }; | 250 }; |
(...skipping 19 matching lines...) Expand all Loading... |
270 spdy_util_.ConstructSpdyReply(1, std::move(resp_block))); | 270 spdy_util_.ConstructSpdyReply(1, std::move(resp_block))); |
271 MockRead spdy_reads[] = {CreateMockRead(resp, 1, ASYNC), | 271 MockRead spdy_reads[] = {CreateMockRead(resp, 1, ASYNC), |
272 MockRead(ASYNC, 0, 3)}; | 272 MockRead(ASYNC, 0, 3)}; |
273 | 273 |
274 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 274 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
275 spdy_reads, arraysize(spdy_reads), spdy_writes, | 275 spdy_reads, arraysize(spdy_reads), spdy_writes, |
276 arraysize(spdy_writes)); | 276 arraysize(spdy_writes)); |
277 | 277 |
278 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 278 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
279 ClientSocketPool::RespectLimits::ENABLED, | 279 ClientSocketPool::RespectLimits::ENABLED, |
280 callback_.callback(), &pool_, BoundNetLog()); | 280 callback_.callback(), &pool_, NetLogWithSource()); |
281 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 281 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
282 EXPECT_FALSE(handle_.is_initialized()); | 282 EXPECT_FALSE(handle_.is_initialized()); |
283 EXPECT_FALSE(handle_.socket()); | 283 EXPECT_FALSE(handle_.socket()); |
284 | 284 |
285 rv = callback_.WaitForResult(); | 285 rv = callback_.WaitForResult(); |
286 EXPECT_THAT(rv, IsError(ERR_PROXY_AUTH_REQUESTED)); | 286 EXPECT_THAT(rv, IsError(ERR_PROXY_AUTH_REQUESTED)); |
287 EXPECT_TRUE(handle_.is_initialized()); | 287 EXPECT_TRUE(handle_.is_initialized()); |
288 ASSERT_TRUE(handle_.socket()); | 288 ASSERT_TRUE(handle_.socket()); |
289 ProxyClientSocket* tunnel_socket = | 289 ProxyClientSocket* tunnel_socket = |
290 static_cast<ProxyClientSocket*>(handle_.socket()); | 290 static_cast<ProxyClientSocket*>(handle_.socket()); |
(...skipping 28 matching lines...) Expand all Loading... |
319 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 319 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
320 }; | 320 }; |
321 | 321 |
322 Initialize(reads, arraysize(reads), writes, arraysize(writes), NULL, 0, | 322 Initialize(reads, arraysize(reads), writes, arraysize(writes), NULL, 0, |
323 NULL, 0); | 323 NULL, 0); |
324 AddAuthToCache(); | 324 AddAuthToCache(); |
325 | 325 |
326 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 326 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
327 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, | 327 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, |
328 ClientSocketPool::RespectLimits::ENABLED, | 328 ClientSocketPool::RespectLimits::ENABLED, |
329 callback_.callback(), &pool_, BoundNetLog()); | 329 callback_.callback(), &pool_, NetLogWithSource()); |
330 EXPECT_THAT(rv, IsOk()); | 330 EXPECT_THAT(rv, IsOk()); |
331 EXPECT_TRUE(handle_.is_initialized()); | 331 EXPECT_TRUE(handle_.is_initialized()); |
332 ASSERT_TRUE(handle_.socket()); | 332 ASSERT_TRUE(handle_.socket()); |
333 EXPECT_TRUE(handle_.socket()->IsConnected()); | 333 EXPECT_TRUE(handle_.socket()->IsConnected()); |
334 proxy_delegate->VerifyOnTunnelHeadersReceived( | 334 proxy_delegate->VerifyOnTunnelHeadersReceived( |
335 "www.google.com:443", | 335 "www.google.com:443", |
336 proxy_host_port.c_str(), | 336 proxy_host_port.c_str(), |
337 "HTTP/1.1 200 Connection Established"); | 337 "HTTP/1.1 200 Connection Established"); |
338 proxy_delegate->VerifyOnTunnelRequestCompleted( | 338 proxy_delegate->VerifyOnTunnelRequestCompleted( |
339 "www.google.com:443", | 339 "www.google.com:443", |
(...skipping 30 matching lines...) Expand all Loading... |
370 }; | 370 }; |
371 | 371 |
372 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 372 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
373 spdy_reads, arraysize(spdy_reads), spdy_writes, | 373 spdy_reads, arraysize(spdy_reads), spdy_writes, |
374 arraysize(spdy_writes)); | 374 arraysize(spdy_writes)); |
375 AddAuthToCache(); | 375 AddAuthToCache(); |
376 | 376 |
377 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 377 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
378 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, | 378 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, |
379 ClientSocketPool::RespectLimits::ENABLED, | 379 ClientSocketPool::RespectLimits::ENABLED, |
380 callback_.callback(), &pool_, BoundNetLog()); | 380 callback_.callback(), &pool_, NetLogWithSource()); |
381 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 381 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
382 EXPECT_FALSE(handle_.is_initialized()); | 382 EXPECT_FALSE(handle_.is_initialized()); |
383 EXPECT_FALSE(handle_.socket()); | 383 EXPECT_FALSE(handle_.socket()); |
384 | 384 |
385 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 385 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
386 EXPECT_TRUE(handle_.is_initialized()); | 386 EXPECT_TRUE(handle_.is_initialized()); |
387 ASSERT_TRUE(handle_.socket()); | 387 ASSERT_TRUE(handle_.socket()); |
388 EXPECT_TRUE(handle_.socket()->IsConnected()); | 388 EXPECT_TRUE(handle_.socket()->IsConnected()); |
389 proxy_delegate->VerifyOnTunnelRequestCompleted( | 389 proxy_delegate->VerifyOnTunnelRequestCompleted( |
390 "www.google.com:443", | 390 "www.google.com:443", |
(...skipping 16 matching lines...) Expand all Loading... |
407 MockRead(ASYNC, 0, 2)}; | 407 MockRead(ASYNC, 0, 2)}; |
408 | 408 |
409 Initialize(NULL, 0, NULL, 0, | 409 Initialize(NULL, 0, NULL, 0, |
410 spdy_reads, arraysize(spdy_reads), | 410 spdy_reads, arraysize(spdy_reads), |
411 spdy_writes, arraysize(spdy_writes)); | 411 spdy_writes, arraysize(spdy_writes)); |
412 AddAuthToCache(); | 412 AddAuthToCache(); |
413 | 413 |
414 EXPECT_EQ(ERR_IO_PENDING, | 414 EXPECT_EQ(ERR_IO_PENDING, |
415 handle_.Init("a", CreateTunnelParams(NULL), MEDIUM, | 415 handle_.Init("a", CreateTunnelParams(NULL), MEDIUM, |
416 ClientSocketPool::RespectLimits::ENABLED, | 416 ClientSocketPool::RespectLimits::ENABLED, |
417 callback_.callback(), &pool_, BoundNetLog())); | 417 callback_.callback(), &pool_, NetLogWithSource())); |
418 EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority()); | 418 EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority()); |
419 | 419 |
420 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 420 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
421 } | 421 } |
422 | 422 |
423 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { | 423 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { |
424 if (GetParam() == SPDY) | 424 if (GetParam() == SPDY) |
425 return; | 425 return; |
426 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); | 426 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); |
427 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); | 427 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); |
428 | 428 |
429 socket_factory()->AddSocketDataProvider(data_.get()); | 429 socket_factory()->AddSocketDataProvider(data_.get()); |
430 | 430 |
431 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 431 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
432 ClientSocketPool::RespectLimits::ENABLED, | 432 ClientSocketPool::RespectLimits::ENABLED, |
433 callback_.callback(), &pool_, BoundNetLog()); | 433 callback_.callback(), &pool_, NetLogWithSource()); |
434 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 434 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
435 EXPECT_FALSE(handle_.is_initialized()); | 435 EXPECT_FALSE(handle_.is_initialized()); |
436 EXPECT_FALSE(handle_.socket()); | 436 EXPECT_FALSE(handle_.socket()); |
437 | 437 |
438 EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_PROXY_CONNECTION_FAILED)); | 438 EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_PROXY_CONNECTION_FAILED)); |
439 | 439 |
440 EXPECT_FALSE(handle_.is_initialized()); | 440 EXPECT_FALSE(handle_.is_initialized()); |
441 EXPECT_FALSE(handle_.socket()); | 441 EXPECT_FALSE(handle_.socket()); |
442 } | 442 } |
443 | 443 |
444 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { | 444 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { |
445 if (GetParam() == HTTP) | 445 if (GetParam() == HTTP) |
446 return; | 446 return; |
447 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); | 447 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); |
448 data_->set_connect_data(MockConnect(ASYNC, OK)); | 448 data_->set_connect_data(MockConnect(ASYNC, OK)); |
449 socket_factory()->AddSocketDataProvider(data_.get()); | 449 socket_factory()->AddSocketDataProvider(data_.get()); |
450 | 450 |
451 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, | 451 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, |
452 ERR_CERT_AUTHORITY_INVALID)); | 452 ERR_CERT_AUTHORITY_INVALID)); |
453 if (GetParam() == SPDY) { | 453 if (GetParam() == SPDY) { |
454 InitializeSpdySsl(); | 454 InitializeSpdySsl(); |
455 } | 455 } |
456 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); | 456 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); |
457 | 457 |
458 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 458 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
459 ClientSocketPool::RespectLimits::ENABLED, | 459 ClientSocketPool::RespectLimits::ENABLED, |
460 callback_.callback(), &pool_, BoundNetLog()); | 460 callback_.callback(), &pool_, NetLogWithSource()); |
461 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 461 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
462 EXPECT_FALSE(handle_.is_initialized()); | 462 EXPECT_FALSE(handle_.is_initialized()); |
463 EXPECT_FALSE(handle_.socket()); | 463 EXPECT_FALSE(handle_.socket()); |
464 | 464 |
465 EXPECT_THAT(callback_.WaitForResult(), | 465 EXPECT_THAT(callback_.WaitForResult(), |
466 IsError(ERR_PROXY_CERTIFICATE_INVALID)); | 466 IsError(ERR_PROXY_CERTIFICATE_INVALID)); |
467 | 467 |
468 EXPECT_FALSE(handle_.is_initialized()); | 468 EXPECT_FALSE(handle_.is_initialized()); |
469 EXPECT_FALSE(handle_.socket()); | 469 EXPECT_FALSE(handle_.socket()); |
470 } | 470 } |
471 | 471 |
472 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { | 472 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { |
473 if (GetParam() == HTTP) | 473 if (GetParam() == HTTP) |
474 return; | 474 return; |
475 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); | 475 data_.reset(new SequencedSocketData(NULL, 0, NULL, 0)); |
476 data_->set_connect_data(MockConnect(ASYNC, OK)); | 476 data_->set_connect_data(MockConnect(ASYNC, OK)); |
477 socket_factory()->AddSocketDataProvider(data_.get()); | 477 socket_factory()->AddSocketDataProvider(data_.get()); |
478 | 478 |
479 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, | 479 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, |
480 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); | 480 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
481 if (GetParam() == SPDY) { | 481 if (GetParam() == SPDY) { |
482 InitializeSpdySsl(); | 482 InitializeSpdySsl(); |
483 } | 483 } |
484 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); | 484 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); |
485 | 485 |
486 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 486 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
487 ClientSocketPool::RespectLimits::ENABLED, | 487 ClientSocketPool::RespectLimits::ENABLED, |
488 callback_.callback(), &pool_, BoundNetLog()); | 488 callback_.callback(), &pool_, NetLogWithSource()); |
489 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 489 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
490 EXPECT_FALSE(handle_.is_initialized()); | 490 EXPECT_FALSE(handle_.is_initialized()); |
491 EXPECT_FALSE(handle_.socket()); | 491 EXPECT_FALSE(handle_.socket()); |
492 | 492 |
493 EXPECT_THAT(callback_.WaitForResult(), | 493 EXPECT_THAT(callback_.WaitForResult(), |
494 IsError(ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); | 494 IsError(ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
495 | 495 |
496 EXPECT_FALSE(handle_.is_initialized()); | 496 EXPECT_FALSE(handle_.is_initialized()); |
497 EXPECT_FALSE(handle_.socket()); | 497 EXPECT_FALSE(handle_.socket()); |
498 } | 498 } |
(...skipping 18 matching lines...) Expand all Loading... |
517 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), | 517 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), |
518 }; | 518 }; |
519 | 519 |
520 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 520 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
521 spdy_reads, arraysize(spdy_reads), spdy_writes, | 521 spdy_reads, arraysize(spdy_reads), spdy_writes, |
522 arraysize(spdy_writes)); | 522 arraysize(spdy_writes)); |
523 AddAuthToCache(); | 523 AddAuthToCache(); |
524 | 524 |
525 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 525 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
526 ClientSocketPool::RespectLimits::ENABLED, | 526 ClientSocketPool::RespectLimits::ENABLED, |
527 callback_.callback(), &pool_, BoundNetLog()); | 527 callback_.callback(), &pool_, NetLogWithSource()); |
528 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 528 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
529 EXPECT_FALSE(handle_.is_initialized()); | 529 EXPECT_FALSE(handle_.is_initialized()); |
530 EXPECT_FALSE(handle_.socket()); | 530 EXPECT_FALSE(handle_.socket()); |
531 | 531 |
532 if (GetParam() == SPDY) { | 532 if (GetParam() == SPDY) { |
533 // SPDY cannot process a headers block unless it's complete and so it | 533 // SPDY cannot process a headers block unless it's complete and so it |
534 // returns ERR_CONNECTION_CLOSED in this case. | 534 // returns ERR_CONNECTION_CLOSED in this case. |
535 EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); | 535 EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); |
536 } else { | 536 } else { |
537 EXPECT_THAT(callback_.WaitForResult(), | 537 EXPECT_THAT(callback_.WaitForResult(), |
(...skipping 19 matching lines...) Expand all Loading... |
557 MockRead reads[] = { | 557 MockRead reads[] = { |
558 MockRead(ASYNC, 1, "HTTP/1.1 100 Continue\r\n\r\n"), | 558 MockRead(ASYNC, 1, "HTTP/1.1 100 Continue\r\n\r\n"), |
559 MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 559 MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
560 }; | 560 }; |
561 | 561 |
562 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 562 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
563 NULL, 0, NULL, 0); | 563 NULL, 0, NULL, 0); |
564 | 564 |
565 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 565 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
566 ClientSocketPool::RespectLimits::ENABLED, | 566 ClientSocketPool::RespectLimits::ENABLED, |
567 callback_.callback(), &pool_, BoundNetLog()); | 567 callback_.callback(), &pool_, NetLogWithSource()); |
568 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 568 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
569 EXPECT_FALSE(handle_.is_initialized()); | 569 EXPECT_FALSE(handle_.is_initialized()); |
570 EXPECT_FALSE(handle_.socket()); | 570 EXPECT_FALSE(handle_.socket()); |
571 | 571 |
572 EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_TUNNEL_CONNECTION_FAILED)); | 572 EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
573 } | 573 } |
574 | 574 |
575 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { | 575 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { |
576 MockWrite writes[] = { | 576 MockWrite writes[] = { |
577 MockWrite(ASYNC, 0, | 577 MockWrite(ASYNC, 0, |
(...skipping 18 matching lines...) Expand all Loading... |
596 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 3), | 596 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 3), |
597 }; | 597 }; |
598 | 598 |
599 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 599 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
600 spdy_reads, arraysize(spdy_reads), spdy_writes, | 600 spdy_reads, arraysize(spdy_reads), spdy_writes, |
601 arraysize(spdy_writes)); | 601 arraysize(spdy_writes)); |
602 AddAuthToCache(); | 602 AddAuthToCache(); |
603 | 603 |
604 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 604 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
605 ClientSocketPool::RespectLimits::ENABLED, | 605 ClientSocketPool::RespectLimits::ENABLED, |
606 callback_.callback(), &pool_, BoundNetLog()); | 606 callback_.callback(), &pool_, NetLogWithSource()); |
607 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 607 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
608 EXPECT_FALSE(handle_.is_initialized()); | 608 EXPECT_FALSE(handle_.is_initialized()); |
609 EXPECT_FALSE(handle_.socket()); | 609 EXPECT_FALSE(handle_.socket()); |
610 | 610 |
611 rv = callback_.WaitForResult(); | 611 rv = callback_.WaitForResult(); |
612 // All Proxy CONNECT responses are not trustworthy | 612 // All Proxy CONNECT responses are not trustworthy |
613 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); | 613 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
614 EXPECT_FALSE(handle_.is_initialized()); | 614 EXPECT_FALSE(handle_.is_initialized()); |
615 EXPECT_FALSE(handle_.socket()); | 615 EXPECT_FALSE(handle_.socket()); |
616 } | 616 } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
653 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 2), | 653 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 2), |
654 }; | 654 }; |
655 | 655 |
656 Initialize(reads, arraysize(reads), writes, arraysize(writes), | 656 Initialize(reads, arraysize(reads), writes, arraysize(writes), |
657 spdy_reads, arraysize(spdy_reads), spdy_writes, | 657 spdy_reads, arraysize(spdy_reads), spdy_writes, |
658 arraysize(spdy_writes)); | 658 arraysize(spdy_writes)); |
659 AddAuthToCache(); | 659 AddAuthToCache(); |
660 | 660 |
661 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, | 661 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
662 ClientSocketPool::RespectLimits::ENABLED, | 662 ClientSocketPool::RespectLimits::ENABLED, |
663 callback_.callback(), &pool_, BoundNetLog()); | 663 callback_.callback(), &pool_, NetLogWithSource()); |
664 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 664 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
665 EXPECT_FALSE(handle_.is_initialized()); | 665 EXPECT_FALSE(handle_.is_initialized()); |
666 EXPECT_FALSE(handle_.socket()); | 666 EXPECT_FALSE(handle_.socket()); |
667 | 667 |
668 rv = callback_.WaitForResult(); | 668 rv = callback_.WaitForResult(); |
669 | 669 |
670 if (GetParam() == HTTP) { | 670 if (GetParam() == HTTP) { |
671 // We don't trust 302 responses to CONNECT from HTTP proxies. | 671 // We don't trust 302 responses to CONNECT from HTTP proxies. |
672 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); | 672 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); |
673 EXPECT_FALSE(handle_.is_initialized()); | 673 EXPECT_FALSE(handle_.is_initialized()); |
(...skipping 18 matching lines...) Expand all Loading... |
692 // Make sure Location header was included and correct. | 692 // Make sure Location header was included and correct. |
693 std::string location; | 693 std::string location; |
694 EXPECT_TRUE(headers->IsRedirect(&location)); | 694 EXPECT_TRUE(headers->IsRedirect(&location)); |
695 EXPECT_EQ(location, redirectTarget); | 695 EXPECT_EQ(location, redirectTarget); |
696 } | 696 } |
697 } | 697 } |
698 | 698 |
699 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. | 699 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. |
700 | 700 |
701 } // namespace net | 701 } // namespace net |
OLD | NEW |