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

Side by Side Diff: net/socket/ssl_client_socket_pool_unittest.cc

Issue 353713005: Implements new, more robust design for communicating between SSLConnectJobs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added a new state to SSLClientSocket Connect, fixed various comment issues. Created 6 years, 4 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/run_loop.h"
9 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
10 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
11 #include "base/time/time.h" 12 #include "base/time/time.h"
12 #include "net/base/auth.h" 13 #include "net/base/auth.h"
13 #include "net/base/load_timing_info.h" 14 #include "net/base/load_timing_info.h"
14 #include "net/base/load_timing_info_test_util.h" 15 #include "net/base/load_timing_info_test_util.h"
15 #include "net/base/net_errors.h" 16 #include "net/base/net_errors.h"
16 #include "net/base/test_completion_callback.h" 17 #include "net/base/test_completion_callback.h"
17 #include "net/cert/cert_verifier.h" 18 #include "net/cert/cert_verifier.h"
18 #include "net/dns/mock_host_resolver.h" 19 #include "net/dns/mock_host_resolver.h"
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 &http_proxy_histograms_, 124 &http_proxy_histograms_,
124 &host_resolver_, 125 &host_resolver_,
125 &transport_socket_pool_, 126 &transport_socket_pool_,
126 NULL, 127 NULL,
127 NULL) { 128 NULL) {
128 scoped_refptr<SSLConfigService> ssl_config_service( 129 scoped_refptr<SSLConfigService> ssl_config_service(
129 new SSLConfigServiceDefaults); 130 new SSLConfigServiceDefaults);
130 ssl_config_service->GetSSLConfig(&ssl_config_); 131 ssl_config_service->GetSSLConfig(&ssl_config_);
131 } 132 }
132 133
133 void CreatePool(bool transport_pool, bool http_proxy_pool, bool socks_pool) { 134 void CreatePool(bool transport_pool,
135 bool http_proxy_pool,
136 bool socks_pool,
137 bool enable_ssl_connect_job_waiting) {
Ryan Sleevi 2014/07/25 01:36:37 Why make this an argument to CreatePool? You could
mshelley 2014/07/26 00:58:27 Done.
134 ssl_histograms_.reset(new ClientSocketPoolHistograms("SSLUnitTest")); 138 ssl_histograms_.reset(new ClientSocketPoolHistograms("SSLUnitTest"));
135 pool_.reset(new SSLClientSocketPool( 139 pool_.reset(new SSLClientSocketPool(
136 kMaxSockets, 140 kMaxSockets,
137 kMaxSocketsPerGroup, 141 kMaxSocketsPerGroup,
138 ssl_histograms_.get(), 142 ssl_histograms_.get(),
139 NULL /* host_resolver */, 143 NULL /* host_resolver */,
140 NULL /* cert_verifier */, 144 NULL /* cert_verifier */,
141 NULL /* server_bound_cert_service */, 145 NULL /* server_bound_cert_service */,
142 NULL /* transport_security_state */, 146 NULL /* transport_security_state */,
143 NULL /* cert_transparency_verifier */, 147 NULL /* cert_transparency_verifier */,
144 std::string() /* ssl_session_cache_shard */, 148 std::string() /* ssl_session_cache_shard */,
145 &socket_factory_, 149 &socket_factory_,
146 transport_pool ? &transport_socket_pool_ : NULL, 150 transport_pool ? &transport_socket_pool_ : NULL,
147 socks_pool ? &socks_socket_pool_ : NULL, 151 socks_pool ? &socks_socket_pool_ : NULL,
148 http_proxy_pool ? &http_proxy_socket_pool_ : NULL, 152 http_proxy_pool ? &http_proxy_socket_pool_ : NULL,
149 NULL, 153 NULL,
154 enable_ssl_connect_job_waiting,
150 NULL)); 155 NULL));
151 } 156 }
152 157
153 scoped_refptr<SSLSocketParams> SSLParams(ProxyServer::Scheme proxy, 158 scoped_refptr<SSLSocketParams> SSLParams(ProxyServer::Scheme proxy,
154 bool want_spdy_over_npn) { 159 bool want_spdy_over_npn) {
155 return make_scoped_refptr(new SSLSocketParams( 160 return make_scoped_refptr(new SSLSocketParams(
156 proxy == ProxyServer::SCHEME_DIRECT ? direct_transport_socket_params_ 161 proxy == ProxyServer::SCHEME_DIRECT ? direct_transport_socket_params_
157 : NULL, 162 : NULL,
158 proxy == ProxyServer::SCHEME_SOCKS5 ? socks_socket_params_ : NULL, 163 proxy == ProxyServer::SCHEME_SOCKS5 ? socks_socket_params_ : NULL,
159 proxy == ProxyServer::SCHEME_HTTP ? http_proxy_socket_params_ : NULL, 164 proxy == ProxyServer::SCHEME_HTTP ? http_proxy_socket_params_ : NULL,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 scoped_ptr<ClientSocketPoolHistograms> ssl_histograms_; 227 scoped_ptr<ClientSocketPoolHistograms> ssl_histograms_;
223 scoped_ptr<SSLClientSocketPool> pool_; 228 scoped_ptr<SSLClientSocketPool> pool_;
224 }; 229 };
225 230
226 INSTANTIATE_TEST_CASE_P( 231 INSTANTIATE_TEST_CASE_P(
227 NextProto, 232 NextProto,
228 SSLClientSocketPoolTest, 233 SSLClientSocketPoolTest,
229 testing::Values(kProtoDeprecatedSPDY2, 234 testing::Values(kProtoDeprecatedSPDY2,
230 kProtoSPDY3, kProtoSPDY31, kProtoSPDY4)); 235 kProtoSPDY3, kProtoSPDY31, kProtoSPDY4));
231 236
237 // Tests that the final socket will connect even if all sockets
238 // prior to it fail.
Ryan Sleevi 2014/07/25 01:36:37 More detail is needed in this comment, explaining
mshelley 2014/07/26 00:58:28 Done.
239 TEST_P(SSLClientSocketPoolTest, AllSocketsFailButLast) {
240 StaticSocketDataProvider data1;
241 StaticSocketDataProvider data2;
242 StaticSocketDataProvider data3;
243 StaticSocketDataProvider data4;
244 socket_factory_.AddSocketDataProvider(&data1);
245 socket_factory_.AddSocketDataProvider(&data2);
246 socket_factory_.AddSocketDataProvider(&data3);
247 socket_factory_.AddSocketDataProvider(&data4);
248 socket_factory_.AddSocketDataProvider(&data4);
249 socket_factory_.AddSocketDataProvider(&data4);
250 socket_factory_.AddSocketDataProvider(&data4);
251 socket_factory_.AddSocketDataProvider(&data4);
252 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR);
253 ssl.is_in_session_cache = false;
254 SSLSocketDataProvider ssl2(ASYNC, ERR_SSL_PROTOCOL_ERROR);
255 ssl2.is_in_session_cache = true;
256 SSLSocketDataProvider ssl3(ASYNC, ERR_SSL_PROTOCOL_ERROR);
257 ssl3.is_in_session_cache = true;
258 SSLSocketDataProvider ssl4(ASYNC, OK);
259 ssl4.is_in_session_cache = true;
260
261 socket_factory_.AddSSLSocketDataProvider(&ssl);
262 socket_factory_.AddSSLSocketDataProvider(&ssl2);
263 socket_factory_.AddSSLSocketDataProvider(&ssl3);
264 socket_factory_.AddSSLSocketDataProvider(&ssl4);
265 socket_factory_.AddSSLSocketDataProvider(&ssl4);
266 socket_factory_.AddSSLSocketDataProvider(&ssl4);
267 socket_factory_.AddSSLSocketDataProvider(&ssl4);
268 socket_factory_.AddSSLSocketDataProvider(&ssl4);
269
270 CreatePool(true, false, false, true);
271
272 scoped_refptr<SSLSocketParams> params1 =
273 SSLParams(ProxyServer::SCHEME_DIRECT, false);
274 scoped_refptr<SSLSocketParams> params2 =
275 SSLParams(ProxyServer::SCHEME_DIRECT, false);
276 scoped_refptr<SSLSocketParams> params3 =
277 SSLParams(ProxyServer::SCHEME_DIRECT, false);
278 scoped_refptr<SSLSocketParams> params4 =
279 SSLParams(ProxyServer::SCHEME_DIRECT, false);
280 ClientSocketHandle handle1;
281 ClientSocketHandle handle2;
282 ClientSocketHandle handle3;
283 ClientSocketHandle handle4;
284 TestCompletionCallback callback1;
285 TestCompletionCallback callback2;
286 TestCompletionCallback callback3;
287 TestCompletionCallback callback4;
288
289 handle1.Init(
290 "b", params1, MEDIUM, callback1.callback(), pool_.get(), BoundNetLog());
291 handle2.Init(
292 "b", params2, MEDIUM, callback2.callback(), pool_.get(), BoundNetLog());
293 handle3.Init(
294 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog());
295 handle4.Init(
296 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog());
297
298 base::RunLoop().RunUntilIdle();
299
300 std::vector<MockSSLClientSocket*> sockets =
301 socket_factory_.ssl_client_sockets();
302
303 // Only the last socket should have connected.
304 EXPECT_FALSE(handle1.socket());
305 EXPECT_FALSE(handle2.socket());
306 EXPECT_FALSE(handle3.socket());
307 EXPECT_TRUE(handle4.socket()->IsConnected());
308 }
309
310 // Tests that sockets will still connect in parellel if the
Ryan Sleevi 2014/07/25 01:36:37 parallel
mshelley 2014/07/26 00:58:27 Done.
311 // EnableSSLConnectJobWaiting flag is not enabled.
312 TEST_P(SSLClientSocketPoolTest, SocketsConnectWithoutFlag) {
313 StaticSocketDataProvider data1;
314 StaticSocketDataProvider data2;
315 StaticSocketDataProvider data3;
316 socket_factory_.AddSocketDataProvider(&data1);
317 socket_factory_.AddSocketDataProvider(&data2);
318 socket_factory_.AddSocketDataProvider(&data3);
319
320 SSLSocketDataProvider ssl(ASYNC, OK);
321 ssl.is_in_session_cache = false;
322 ssl.should_block_on_connect = true;
323 SSLSocketDataProvider ssl2(ASYNC, OK);
324 ssl2.is_in_session_cache = true;
325 ssl2.should_block_on_connect = true;
326 SSLSocketDataProvider ssl3(ASYNC, OK);
327 ssl3.is_in_session_cache = true;
328 ssl3.should_block_on_connect = true;
329 socket_factory_.AddSSLSocketDataProvider(&ssl);
330 socket_factory_.AddSSLSocketDataProvider(&ssl2);
331 socket_factory_.AddSSLSocketDataProvider(&ssl3);
332
333 CreatePool(true, false, false, false);
334
335 scoped_refptr<SSLSocketParams> params1 =
336 SSLParams(ProxyServer::SCHEME_DIRECT, false);
337 scoped_refptr<SSLSocketParams> params2 =
338 SSLParams(ProxyServer::SCHEME_DIRECT, false);
339 scoped_refptr<SSLSocketParams> params3 =
340 SSLParams(ProxyServer::SCHEME_DIRECT, false);
341 ClientSocketHandle handle1;
342 ClientSocketHandle handle2;
343 ClientSocketHandle handle3;
344 TestCompletionCallback callback1;
345 TestCompletionCallback callback2;
346 TestCompletionCallback callback3;
347
348 handle1.Init(
349 "b", params1, MEDIUM, callback1.callback(), pool_.get(), BoundNetLog());
350 handle2.Init(
351 "b", params2, MEDIUM, callback2.callback(), pool_.get(), BoundNetLog());
352 handle3.Init(
353 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog());
354
355 base::RunLoop().RunUntilIdle();
356
357 std::vector<MockSSLClientSocket*> sockets =
358 socket_factory_.ssl_client_sockets();
359
360 // All sockets should have started their connections.
361 for (std::vector<MockSSLClientSocket*>::iterator it = sockets.begin();
362 it != sockets.end();
363 ++it) {
364 EXPECT_TRUE((*it)->IsConnected());
365 (*it)->RestartPausedConnect();
Ryan Sleevi 2014/07/25 01:36:37 This is... Surprising. I'm not sure I understand w
mshelley 2014/07/26 00:58:27 The idea here was to confirm that every socket sta
366 }
367
368 callback3.WaitForResult();
Ryan Sleevi 2014/07/25 01:36:37 Mention why you don't check callback1/2
mshelley 2014/07/26 00:58:27 I was assuming that since 1/2 begin before 3, they
369
370 EXPECT_TRUE(handle1.socket()->IsConnected());
371 EXPECT_TRUE(handle2.socket()->IsConnected());
372 EXPECT_TRUE(handle3.socket()->IsConnected());
373 }
374
375 // Tests that the pool deleting an SSLConnectJob will not cause a crash,
376 // or prevent pending sockets from connecting.
377 TEST_P(SSLClientSocketPoolTest, DeletedSSLConnectJob) {
378 StaticSocketDataProvider data1;
379 StaticSocketDataProvider data2;
380 StaticSocketDataProvider data3;
381 socket_factory_.AddSocketDataProvider(&data1);
382 socket_factory_.AddSocketDataProvider(&data2);
383 socket_factory_.AddSocketDataProvider(&data3);
384
385 SSLSocketDataProvider ssl(ASYNC, OK);
386 ssl.is_in_session_cache = false;
387 ssl.should_block_on_connect = true;
388 SSLSocketDataProvider ssl2(ASYNC, OK);
389 ssl2.is_in_session_cache = false;
390 SSLSocketDataProvider ssl3(ASYNC, OK);
391 ssl3.is_in_session_cache = false;
392 socket_factory_.AddSSLSocketDataProvider(&ssl);
393 socket_factory_.AddSSLSocketDataProvider(&ssl2);
394 socket_factory_.AddSSLSocketDataProvider(&ssl3);
395
396 CreatePool(true, false, false, true);
397
398 scoped_refptr<SSLSocketParams> params1 =
399 SSLParams(ProxyServer::SCHEME_DIRECT, false);
400 scoped_refptr<SSLSocketParams> params2 =
401 SSLParams(ProxyServer::SCHEME_DIRECT, false);
402 scoped_refptr<SSLSocketParams> params3 =
403 SSLParams(ProxyServer::SCHEME_DIRECT, false);
404 ClientSocketHandle handle1;
405 ClientSocketHandle handle2;
406 ClientSocketHandle handle3;
407 TestCompletionCallback callback1;
408 TestCompletionCallback callback2;
409 TestCompletionCallback callback3;
410
411 handle1.Init(
412 "b", params1, MEDIUM, callback1.callback(), pool_.get(), BoundNetLog());
413 handle2.Init(
414 "b", params2, MEDIUM, callback2.callback(), pool_.get(), BoundNetLog());
415 handle3.Init(
416 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog());
417
418 // Allow the connections to proceed until the first socket has started
419 // connecting.
420 base::RunLoop().RunUntilIdle();
421
422 std::vector<MockSSLClientSocket*> sockets =
423 socket_factory_.ssl_client_sockets();
424
425 pool_->CancelRequest("b", &handle2);
426
427 sockets[0]->RestartPausedConnect();
428
429 callback3.WaitForResult();
430
431 EXPECT_TRUE(handle1.socket()->IsConnected());
432 EXPECT_FALSE(handle2.socket());
433 EXPECT_TRUE(handle3.socket()->IsConnected());
434 }
435
436 // Tests that all pending sockets still connect when the pool deletes a pending
437 // SSLConnectJob which immediately followed a failed leading connection.
438 TEST_P(SSLClientSocketPoolTest, DeletedSocketAfterFail) {
439 StaticSocketDataProvider data1;
440 StaticSocketDataProvider data2;
441 StaticSocketDataProvider data3;
442 socket_factory_.AddSocketDataProvider(&data1);
443 socket_factory_.AddSocketDataProvider(&data2);
444 socket_factory_.AddSocketDataProvider(&data3);
445
446 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR);
447 ssl.is_in_session_cache = false;
448 ssl.should_block_on_connect = true;
449 SSLSocketDataProvider ssl2(ASYNC, OK);
450 ssl2.is_in_session_cache = false;
451 SSLSocketDataProvider ssl3(ASYNC, OK);
452 ssl3.is_in_session_cache = false;
453 socket_factory_.AddSSLSocketDataProvider(&ssl);
454 socket_factory_.AddSSLSocketDataProvider(&ssl2);
455 socket_factory_.AddSSLSocketDataProvider(&ssl3);
456
457 CreatePool(true, false, false, true);
458
459 scoped_refptr<SSLSocketParams> params1 =
460 SSLParams(ProxyServer::SCHEME_DIRECT, false);
461 scoped_refptr<SSLSocketParams> params2 =
462 SSLParams(ProxyServer::SCHEME_DIRECT, false);
463 scoped_refptr<SSLSocketParams> params3 =
464 SSLParams(ProxyServer::SCHEME_DIRECT, false);
465 ClientSocketHandle handle1;
466 ClientSocketHandle handle2;
467 ClientSocketHandle handle3;
468 TestCompletionCallback callback1;
469 TestCompletionCallback callback2;
470 TestCompletionCallback callback3;
471
472 handle1.Init(
473 "b", params1, MEDIUM, callback1.callback(), pool_.get(), BoundNetLog());
474 handle2.Init(
475 "b", params2, MEDIUM, callback2.callback(), pool_.get(), BoundNetLog());
476 handle3.Init(
477 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog());
478
479 // Allow the connections to proceed until the first socket has started
480 // connecting.
481 base::RunLoop().RunUntilIdle();
482
483 std::vector<MockSSLClientSocket*> sockets =
484 socket_factory_.ssl_client_sockets();
485
486 pool_->CancelRequest("b", &handle2);
487
488 sockets[0]->RestartPausedConnect();
489
490 callback3.WaitForResult();
491
492 EXPECT_TRUE(handle1.socket()->IsConnected());
493 EXPECT_FALSE(handle2.socket());
494 EXPECT_TRUE(handle3.socket()->IsConnected());
495 }
496
497 // Make sure that sockets still connect after the leader socket's
498 // connection fails.
499 TEST_P(SSLClientSocketPoolTest, SimultaneousConnectJobsFail) {
500 StaticSocketDataProvider data1;
501 StaticSocketDataProvider data2;
502 StaticSocketDataProvider data3;
503 StaticSocketDataProvider data4;
504 StaticSocketDataProvider data5;
505 socket_factory_.AddSocketDataProvider(&data1);
506 socket_factory_.AddSocketDataProvider(&data2);
507 socket_factory_.AddSocketDataProvider(&data3);
508 socket_factory_.AddSocketDataProvider(&data4);
509 socket_factory_.AddSocketDataProvider(&data5);
510 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR);
511 ssl.is_in_session_cache = false;
512 ssl.should_block_on_connect = true;
513 SSLSocketDataProvider ssl2(ASYNC, OK);
514 ssl2.is_in_session_cache = false;
515 ssl2.should_block_on_connect = true;
516 SSLSocketDataProvider ssl3(ASYNC, OK);
517 ssl3.is_in_session_cache = false;
518 SSLSocketDataProvider ssl4(ASYNC, OK);
519 ssl4.is_in_session_cache = false;
520 SSLSocketDataProvider ssl5(ASYNC, OK);
521 ssl5.is_in_session_cache = false;
522
523 socket_factory_.AddSSLSocketDataProvider(&ssl);
524 socket_factory_.AddSSLSocketDataProvider(&ssl2);
525 socket_factory_.AddSSLSocketDataProvider(&ssl3);
526 socket_factory_.AddSSLSocketDataProvider(&ssl4);
527 socket_factory_.AddSSLSocketDataProvider(&ssl5);
528
529 CreatePool(true, false, false, true);
530 scoped_refptr<SSLSocketParams> params1 =
531 SSLParams(ProxyServer::SCHEME_DIRECT, false);
532 scoped_refptr<SSLSocketParams> params2 =
533 SSLParams(ProxyServer::SCHEME_DIRECT, false);
534 scoped_refptr<SSLSocketParams> params3 =
535 SSLParams(ProxyServer::SCHEME_DIRECT, false);
536 scoped_refptr<SSLSocketParams> params4 =
537 SSLParams(ProxyServer::SCHEME_DIRECT, false);
538 ClientSocketHandle handle1;
539 ClientSocketHandle handle2;
540 ClientSocketHandle handle3;
541 ClientSocketHandle handle4;
542 TestCompletionCallback callback1;
543 TestCompletionCallback callback2;
544 TestCompletionCallback callback3;
545 TestCompletionCallback callback4;
546 handle1.Init(
547 "b", params1, MEDIUM, callback1.callback(), pool_.get(), BoundNetLog());
548 handle2.Init(
549 "b", params2, MEDIUM, callback2.callback(), pool_.get(), BoundNetLog());
550 handle3.Init(
551 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog());
552 handle4.Init(
553 "b", params4, MEDIUM, callback4.callback(), pool_.get(), BoundNetLog());
554
555 base::RunLoop().RunUntilIdle();
556
557 std::vector<MockSSLClientSocket*> sockets =
558 socket_factory_.ssl_client_sockets();
559
560 // The first socket's connection should have failed, and no other sockets
561 // should have connected yet.
562 for (std::vector<MockSSLClientSocket*>::iterator it = sockets.begin();
563 it != sockets.end();
564 ++it) {
565 EXPECT_FALSE((*it)->IsConnected());
566 }
567
568 // Allow the first socket to resume it's connection process.
569 sockets[0]->RestartPausedConnect();
570
571 base::RunLoop().RunUntilIdle();
572
573 // The second socket should have connected.
574 EXPECT_TRUE(sockets[1]->IsConnected());
575
576 // Allow the second socket to continue its connection.
577 sockets[1]->RestartPausedConnect();
578
579 callback4.WaitForResult();
580
581 // Pending connections should ultimately succeed.
582 for (std::vector<MockSSLClientSocket*>::iterator it = ++sockets.begin();
583 it != sockets.end();
584 ++it) {
585 EXPECT_TRUE((*it)->IsConnected());
586 }
587 }
588
589 // Make sure that no sockets connect before the "leader" socket,
590 // given that the leader has a successful connection.
591 TEST_P(SSLClientSocketPoolTest, SimultaneousConnectJobsSuccess) {
592 StaticSocketDataProvider data1;
593 StaticSocketDataProvider data2;
594 StaticSocketDataProvider data3;
595 socket_factory_.AddSocketDataProvider(&data1);
596 socket_factory_.AddSocketDataProvider(&data2);
597 socket_factory_.AddSocketDataProvider(&data3);
598
599 SSLSocketDataProvider ssl(ASYNC, OK);
600 ssl.is_in_session_cache = false;
601 ssl.should_block_on_connect = true;
602 SSLSocketDataProvider ssl2(ASYNC, OK);
603 ssl2.is_in_session_cache = false;
604 SSLSocketDataProvider ssl3(ASYNC, OK);
605 ssl3.is_in_session_cache = false;
606 socket_factory_.AddSSLSocketDataProvider(&ssl);
607 socket_factory_.AddSSLSocketDataProvider(&ssl2);
608 socket_factory_.AddSSLSocketDataProvider(&ssl3);
609
610 CreatePool(true, false, false, true);
611
612 scoped_refptr<SSLSocketParams> params1 =
613 SSLParams(ProxyServer::SCHEME_DIRECT, false);
614 scoped_refptr<SSLSocketParams> params2 =
615 SSLParams(ProxyServer::SCHEME_DIRECT, false);
616 scoped_refptr<SSLSocketParams> params3 =
617 SSLParams(ProxyServer::SCHEME_DIRECT, false);
618 ClientSocketHandle handle1;
619 ClientSocketHandle handle2;
620 ClientSocketHandle handle3;
621 TestCompletionCallback callback1;
622 TestCompletionCallback callback2;
623 TestCompletionCallback callback3;
624
625 handle1.Init(
626 "b", params1, MEDIUM, callback1.callback(), pool_.get(), BoundNetLog());
627 handle2.Init(
628 "b", params2, MEDIUM, callback2.callback(), pool_.get(), BoundNetLog());
629 handle3.Init(
630 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog());
631
632 // Allow the connections to proceed until the first socket has finished
633 // connecting.
634 base::RunLoop().RunUntilIdle();
635
636 std::vector<MockSSLClientSocket*> sockets =
637 socket_factory_.ssl_client_sockets();
638
639 EXPECT_TRUE(sockets[0]->IsConnected());
640 for (std::vector<MockSSLClientSocket*>::iterator it = ++sockets.begin();
641 it != sockets.end();
642 ++it) {
643 EXPECT_FALSE((*it)->IsConnected());
644 }
645
646 sockets[0]->RestartPausedConnect();
647
648 callback3.WaitForResult();
649
650 EXPECT_TRUE(handle1.socket()->IsConnected());
651 EXPECT_TRUE(handle2.socket()->IsConnected());
652 EXPECT_TRUE(handle3.socket()->IsConnected());
653 }
654
232 TEST_P(SSLClientSocketPoolTest, TCPFail) { 655 TEST_P(SSLClientSocketPoolTest, TCPFail) {
233 StaticSocketDataProvider data; 656 StaticSocketDataProvider data;
234 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); 657 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED));
235 socket_factory_.AddSocketDataProvider(&data); 658 socket_factory_.AddSocketDataProvider(&data);
236 659
237 CreatePool(true /* tcp pool */, false, false); 660 CreatePool(true /* tcp pool */, false, false, false);
238 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 661 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
239 false); 662 false);
240 663
241 ClientSocketHandle handle; 664 ClientSocketHandle handle;
242 int rv = handle.Init("a", params, MEDIUM, CompletionCallback(), pool_.get(), 665 int rv = handle.Init("a", params, MEDIUM, CompletionCallback(), pool_.get(),
243 BoundNetLog()); 666 BoundNetLog());
244 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); 667 EXPECT_EQ(ERR_CONNECTION_FAILED, rv);
245 EXPECT_FALSE(handle.is_initialized()); 668 EXPECT_FALSE(handle.is_initialized());
246 EXPECT_FALSE(handle.socket()); 669 EXPECT_FALSE(handle.socket());
247 EXPECT_FALSE(handle.is_ssl_error()); 670 EXPECT_FALSE(handle.is_ssl_error());
248 } 671 }
249 672
250 TEST_P(SSLClientSocketPoolTest, TCPFailAsync) { 673 TEST_P(SSLClientSocketPoolTest, TCPFailAsync) {
251 StaticSocketDataProvider data; 674 StaticSocketDataProvider data;
252 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); 675 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED));
253 socket_factory_.AddSocketDataProvider(&data); 676 socket_factory_.AddSocketDataProvider(&data);
254 677
255 CreatePool(true /* tcp pool */, false, false); 678 CreatePool(true /* tcp pool */, false, false, false);
256 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 679 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
257 false); 680 false);
258 681
259 ClientSocketHandle handle; 682 ClientSocketHandle handle;
260 TestCompletionCallback callback; 683 TestCompletionCallback callback;
261 int rv = handle.Init( 684 int rv = handle.Init(
262 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 685 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
263 EXPECT_EQ(ERR_IO_PENDING, rv); 686 EXPECT_EQ(ERR_IO_PENDING, rv);
264 EXPECT_FALSE(handle.is_initialized()); 687 EXPECT_FALSE(handle.is_initialized());
265 EXPECT_FALSE(handle.socket()); 688 EXPECT_FALSE(handle.socket());
266 689
267 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 690 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult());
268 EXPECT_FALSE(handle.is_initialized()); 691 EXPECT_FALSE(handle.is_initialized());
269 EXPECT_FALSE(handle.socket()); 692 EXPECT_FALSE(handle.socket());
270 EXPECT_FALSE(handle.is_ssl_error()); 693 EXPECT_FALSE(handle.is_ssl_error());
271 } 694 }
272 695
273 TEST_P(SSLClientSocketPoolTest, BasicDirect) { 696 TEST_P(SSLClientSocketPoolTest, BasicDirect) {
274 StaticSocketDataProvider data; 697 StaticSocketDataProvider data;
275 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); 698 data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
276 socket_factory_.AddSocketDataProvider(&data); 699 socket_factory_.AddSocketDataProvider(&data);
277 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); 700 SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
278 socket_factory_.AddSSLSocketDataProvider(&ssl); 701 socket_factory_.AddSSLSocketDataProvider(&ssl);
279 702
280 CreatePool(true /* tcp pool */, false, false); 703 CreatePool(true /* tcp pool */, false, false, false);
281 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 704 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
282 false); 705 false);
283 706
284 ClientSocketHandle handle; 707 ClientSocketHandle handle;
285 TestCompletionCallback callback; 708 TestCompletionCallback callback;
286 int rv = handle.Init( 709 int rv = handle.Init(
287 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 710 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
288 EXPECT_EQ(OK, rv); 711 EXPECT_EQ(OK, rv);
289 EXPECT_TRUE(handle.is_initialized()); 712 EXPECT_TRUE(handle.is_initialized());
290 EXPECT_TRUE(handle.socket()); 713 EXPECT_TRUE(handle.socket());
291 TestLoadTimingInfo(handle); 714 TestLoadTimingInfo(handle);
292 } 715 }
293 716
294 // Make sure that SSLConnectJob passes on its priority to its 717 // Make sure that SSLConnectJob passes on its priority to its
295 // socket request on Init (for the DIRECT case). 718 // socket request on Init (for the DIRECT case).
296 TEST_P(SSLClientSocketPoolTest, SetSocketRequestPriorityOnInitDirect) { 719 TEST_P(SSLClientSocketPoolTest, SetSocketRequestPriorityOnInitDirect) {
297 CreatePool(true /* tcp pool */, false, false); 720 CreatePool(true /* tcp pool */, false, false, false);
298 scoped_refptr<SSLSocketParams> params = 721 scoped_refptr<SSLSocketParams> params =
299 SSLParams(ProxyServer::SCHEME_DIRECT, false); 722 SSLParams(ProxyServer::SCHEME_DIRECT, false);
300 723
301 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { 724 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) {
302 RequestPriority priority = static_cast<RequestPriority>(i); 725 RequestPriority priority = static_cast<RequestPriority>(i);
303 StaticSocketDataProvider data; 726 StaticSocketDataProvider data;
304 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); 727 data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
305 socket_factory_.AddSocketDataProvider(&data); 728 socket_factory_.AddSocketDataProvider(&data);
306 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); 729 SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
307 socket_factory_.AddSSLSocketDataProvider(&ssl); 730 socket_factory_.AddSSLSocketDataProvider(&ssl);
308 731
309 ClientSocketHandle handle; 732 ClientSocketHandle handle;
310 TestCompletionCallback callback; 733 TestCompletionCallback callback;
311 EXPECT_EQ(OK, handle.Init("a", params, priority, callback.callback(), 734 EXPECT_EQ(OK, handle.Init("a", params, priority, callback.callback(),
312 pool_.get(), BoundNetLog())); 735 pool_.get(), BoundNetLog()));
313 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); 736 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority());
314 handle.socket()->Disconnect(); 737 handle.socket()->Disconnect();
315 } 738 }
316 } 739 }
317 740
318 TEST_P(SSLClientSocketPoolTest, BasicDirectAsync) { 741 TEST_P(SSLClientSocketPoolTest, BasicDirectAsync) {
319 StaticSocketDataProvider data; 742 StaticSocketDataProvider data;
320 socket_factory_.AddSocketDataProvider(&data); 743 socket_factory_.AddSocketDataProvider(&data);
321 SSLSocketDataProvider ssl(ASYNC, OK); 744 SSLSocketDataProvider ssl(ASYNC, OK);
322 socket_factory_.AddSSLSocketDataProvider(&ssl); 745 socket_factory_.AddSSLSocketDataProvider(&ssl);
323 746
324 CreatePool(true /* tcp pool */, false, false); 747 CreatePool(true /* tcp pool */, false, false, false);
325 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 748 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
326 false); 749 false);
327 750
328 ClientSocketHandle handle; 751 ClientSocketHandle handle;
329 TestCompletionCallback callback; 752 TestCompletionCallback callback;
330 int rv = handle.Init( 753 int rv = handle.Init(
331 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 754 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
332 EXPECT_EQ(ERR_IO_PENDING, rv); 755 EXPECT_EQ(ERR_IO_PENDING, rv);
333 EXPECT_FALSE(handle.is_initialized()); 756 EXPECT_FALSE(handle.is_initialized());
334 EXPECT_FALSE(handle.socket()); 757 EXPECT_FALSE(handle.socket());
335 758
336 EXPECT_EQ(OK, callback.WaitForResult()); 759 EXPECT_EQ(OK, callback.WaitForResult());
337 EXPECT_TRUE(handle.is_initialized()); 760 EXPECT_TRUE(handle.is_initialized());
338 EXPECT_TRUE(handle.socket()); 761 EXPECT_TRUE(handle.socket());
339 TestLoadTimingInfo(handle); 762 TestLoadTimingInfo(handle);
340 } 763 }
341 764
342 TEST_P(SSLClientSocketPoolTest, DirectCertError) { 765 TEST_P(SSLClientSocketPoolTest, DirectCertError) {
343 StaticSocketDataProvider data; 766 StaticSocketDataProvider data;
344 socket_factory_.AddSocketDataProvider(&data); 767 socket_factory_.AddSocketDataProvider(&data);
345 SSLSocketDataProvider ssl(ASYNC, ERR_CERT_COMMON_NAME_INVALID); 768 SSLSocketDataProvider ssl(ASYNC, ERR_CERT_COMMON_NAME_INVALID);
346 socket_factory_.AddSSLSocketDataProvider(&ssl); 769 socket_factory_.AddSSLSocketDataProvider(&ssl);
347 770
348 CreatePool(true /* tcp pool */, false, false); 771 CreatePool(true /* tcp pool */, false, false, false);
349 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 772 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
350 false); 773 false);
351 774
352 ClientSocketHandle handle; 775 ClientSocketHandle handle;
353 TestCompletionCallback callback; 776 TestCompletionCallback callback;
354 int rv = handle.Init( 777 int rv = handle.Init(
355 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 778 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
356 EXPECT_EQ(ERR_IO_PENDING, rv); 779 EXPECT_EQ(ERR_IO_PENDING, rv);
357 EXPECT_FALSE(handle.is_initialized()); 780 EXPECT_FALSE(handle.is_initialized());
358 EXPECT_FALSE(handle.socket()); 781 EXPECT_FALSE(handle.socket());
359 782
360 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult()); 783 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult());
361 EXPECT_TRUE(handle.is_initialized()); 784 EXPECT_TRUE(handle.is_initialized());
362 EXPECT_TRUE(handle.socket()); 785 EXPECT_TRUE(handle.socket());
363 TestLoadTimingInfo(handle); 786 TestLoadTimingInfo(handle);
364 } 787 }
365 788
366 TEST_P(SSLClientSocketPoolTest, DirectSSLError) { 789 TEST_P(SSLClientSocketPoolTest, DirectSSLError) {
367 StaticSocketDataProvider data; 790 StaticSocketDataProvider data;
368 socket_factory_.AddSocketDataProvider(&data); 791 socket_factory_.AddSocketDataProvider(&data);
369 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR); 792 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR);
370 socket_factory_.AddSSLSocketDataProvider(&ssl); 793 socket_factory_.AddSSLSocketDataProvider(&ssl);
371 794
372 CreatePool(true /* tcp pool */, false, false); 795 CreatePool(true /* tcp pool */, false, false, false);
373 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 796 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
374 false); 797 false);
375 798
376 ClientSocketHandle handle; 799 ClientSocketHandle handle;
377 TestCompletionCallback callback; 800 TestCompletionCallback callback;
378 int rv = handle.Init( 801 int rv = handle.Init(
379 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 802 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
380 EXPECT_EQ(ERR_IO_PENDING, rv); 803 EXPECT_EQ(ERR_IO_PENDING, rv);
381 EXPECT_FALSE(handle.is_initialized()); 804 EXPECT_FALSE(handle.is_initialized());
382 EXPECT_FALSE(handle.socket()); 805 EXPECT_FALSE(handle.socket());
383 806
384 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, callback.WaitForResult()); 807 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, callback.WaitForResult());
385 EXPECT_FALSE(handle.is_initialized()); 808 EXPECT_FALSE(handle.is_initialized());
386 EXPECT_FALSE(handle.socket()); 809 EXPECT_FALSE(handle.socket());
387 EXPECT_TRUE(handle.is_ssl_error()); 810 EXPECT_TRUE(handle.is_ssl_error());
388 } 811 }
389 812
390 TEST_P(SSLClientSocketPoolTest, DirectWithNPN) { 813 TEST_P(SSLClientSocketPoolTest, DirectWithNPN) {
391 StaticSocketDataProvider data; 814 StaticSocketDataProvider data;
392 socket_factory_.AddSocketDataProvider(&data); 815 socket_factory_.AddSocketDataProvider(&data);
393 SSLSocketDataProvider ssl(ASYNC, OK); 816 SSLSocketDataProvider ssl(ASYNC, OK);
394 ssl.SetNextProto(kProtoHTTP11); 817 ssl.SetNextProto(kProtoHTTP11);
395 socket_factory_.AddSSLSocketDataProvider(&ssl); 818 socket_factory_.AddSSLSocketDataProvider(&ssl);
396 819
397 CreatePool(true /* tcp pool */, false, false); 820 CreatePool(true /* tcp pool */, false, false, false);
398 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 821 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
399 false); 822 false);
400 823
401 ClientSocketHandle handle; 824 ClientSocketHandle handle;
402 TestCompletionCallback callback; 825 TestCompletionCallback callback;
403 int rv = handle.Init( 826 int rv = handle.Init(
404 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 827 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
405 EXPECT_EQ(ERR_IO_PENDING, rv); 828 EXPECT_EQ(ERR_IO_PENDING, rv);
406 EXPECT_FALSE(handle.is_initialized()); 829 EXPECT_FALSE(handle.is_initialized());
407 EXPECT_FALSE(handle.socket()); 830 EXPECT_FALSE(handle.socket());
408 831
409 EXPECT_EQ(OK, callback.WaitForResult()); 832 EXPECT_EQ(OK, callback.WaitForResult());
410 EXPECT_TRUE(handle.is_initialized()); 833 EXPECT_TRUE(handle.is_initialized());
411 EXPECT_TRUE(handle.socket()); 834 EXPECT_TRUE(handle.socket());
412 TestLoadTimingInfo(handle); 835 TestLoadTimingInfo(handle);
413 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); 836 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket());
414 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); 837 EXPECT_TRUE(ssl_socket->WasNpnNegotiated());
415 } 838 }
416 839
417 TEST_P(SSLClientSocketPoolTest, DirectNoSPDY) { 840 TEST_P(SSLClientSocketPoolTest, DirectNoSPDY) {
418 StaticSocketDataProvider data; 841 StaticSocketDataProvider data;
419 socket_factory_.AddSocketDataProvider(&data); 842 socket_factory_.AddSocketDataProvider(&data);
420 SSLSocketDataProvider ssl(ASYNC, OK); 843 SSLSocketDataProvider ssl(ASYNC, OK);
421 ssl.SetNextProto(kProtoHTTP11); 844 ssl.SetNextProto(kProtoHTTP11);
422 socket_factory_.AddSSLSocketDataProvider(&ssl); 845 socket_factory_.AddSSLSocketDataProvider(&ssl);
423 846
424 CreatePool(true /* tcp pool */, false, false); 847 CreatePool(true /* tcp pool */, false, false, false);
425 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 848 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
426 true); 849 true);
427 850
428 ClientSocketHandle handle; 851 ClientSocketHandle handle;
429 TestCompletionCallback callback; 852 TestCompletionCallback callback;
430 int rv = handle.Init( 853 int rv = handle.Init(
431 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 854 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
432 EXPECT_EQ(ERR_IO_PENDING, rv); 855 EXPECT_EQ(ERR_IO_PENDING, rv);
433 EXPECT_FALSE(handle.is_initialized()); 856 EXPECT_FALSE(handle.is_initialized());
434 EXPECT_FALSE(handle.socket()); 857 EXPECT_FALSE(handle.socket());
435 858
436 EXPECT_EQ(ERR_NPN_NEGOTIATION_FAILED, callback.WaitForResult()); 859 EXPECT_EQ(ERR_NPN_NEGOTIATION_FAILED, callback.WaitForResult());
437 EXPECT_FALSE(handle.is_initialized()); 860 EXPECT_FALSE(handle.is_initialized());
438 EXPECT_FALSE(handle.socket()); 861 EXPECT_FALSE(handle.socket());
439 EXPECT_TRUE(handle.is_ssl_error()); 862 EXPECT_TRUE(handle.is_ssl_error());
440 } 863 }
441 864
442 TEST_P(SSLClientSocketPoolTest, DirectGotSPDY) { 865 TEST_P(SSLClientSocketPoolTest, DirectGotSPDY) {
443 StaticSocketDataProvider data; 866 StaticSocketDataProvider data;
444 socket_factory_.AddSocketDataProvider(&data); 867 socket_factory_.AddSocketDataProvider(&data);
445 SSLSocketDataProvider ssl(ASYNC, OK); 868 SSLSocketDataProvider ssl(ASYNC, OK);
446 ssl.SetNextProto(GetParam()); 869 ssl.SetNextProto(GetParam());
447 socket_factory_.AddSSLSocketDataProvider(&ssl); 870 socket_factory_.AddSSLSocketDataProvider(&ssl);
448 871
449 CreatePool(true /* tcp pool */, false, false); 872 CreatePool(true /* tcp pool */, false, false, false);
450 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 873 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
451 true); 874 true);
452 875
453 ClientSocketHandle handle; 876 ClientSocketHandle handle;
454 TestCompletionCallback callback; 877 TestCompletionCallback callback;
455 int rv = handle.Init( 878 int rv = handle.Init(
456 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 879 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
457 EXPECT_EQ(ERR_IO_PENDING, rv); 880 EXPECT_EQ(ERR_IO_PENDING, rv);
458 EXPECT_FALSE(handle.is_initialized()); 881 EXPECT_FALSE(handle.is_initialized());
459 EXPECT_FALSE(handle.socket()); 882 EXPECT_FALSE(handle.socket());
(...skipping 11 matching lines...) Expand all
471 EXPECT_EQ(GetParam(), SSLClientSocket::NextProtoFromString(proto)); 894 EXPECT_EQ(GetParam(), SSLClientSocket::NextProtoFromString(proto));
472 } 895 }
473 896
474 TEST_P(SSLClientSocketPoolTest, DirectGotBonusSPDY) { 897 TEST_P(SSLClientSocketPoolTest, DirectGotBonusSPDY) {
475 StaticSocketDataProvider data; 898 StaticSocketDataProvider data;
476 socket_factory_.AddSocketDataProvider(&data); 899 socket_factory_.AddSocketDataProvider(&data);
477 SSLSocketDataProvider ssl(ASYNC, OK); 900 SSLSocketDataProvider ssl(ASYNC, OK);
478 ssl.SetNextProto(GetParam()); 901 ssl.SetNextProto(GetParam());
479 socket_factory_.AddSSLSocketDataProvider(&ssl); 902 socket_factory_.AddSSLSocketDataProvider(&ssl);
480 903
481 CreatePool(true /* tcp pool */, false, false); 904 CreatePool(true /* tcp pool */, false, false, false);
482 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 905 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
483 true); 906 true);
484 907
485 ClientSocketHandle handle; 908 ClientSocketHandle handle;
486 TestCompletionCallback callback; 909 TestCompletionCallback callback;
487 int rv = handle.Init( 910 int rv = handle.Init(
488 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 911 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
489 EXPECT_EQ(ERR_IO_PENDING, rv); 912 EXPECT_EQ(ERR_IO_PENDING, rv);
490 EXPECT_FALSE(handle.is_initialized()); 913 EXPECT_FALSE(handle.is_initialized());
491 EXPECT_FALSE(handle.socket()); 914 EXPECT_FALSE(handle.socket());
492 915
493 EXPECT_EQ(OK, callback.WaitForResult()); 916 EXPECT_EQ(OK, callback.WaitForResult());
494 EXPECT_TRUE(handle.is_initialized()); 917 EXPECT_TRUE(handle.is_initialized());
495 EXPECT_TRUE(handle.socket()); 918 EXPECT_TRUE(handle.socket());
496 TestLoadTimingInfo(handle); 919 TestLoadTimingInfo(handle);
497 920
498 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); 921 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket());
499 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); 922 EXPECT_TRUE(ssl_socket->WasNpnNegotiated());
500 std::string proto; 923 std::string proto;
501 std::string server_protos; 924 std::string server_protos;
502 ssl_socket->GetNextProto(&proto, &server_protos); 925 ssl_socket->GetNextProto(&proto, &server_protos);
503 EXPECT_EQ(GetParam(), SSLClientSocket::NextProtoFromString(proto)); 926 EXPECT_EQ(GetParam(), SSLClientSocket::NextProtoFromString(proto));
504 } 927 }
505 928
506 TEST_P(SSLClientSocketPoolTest, SOCKSFail) { 929 TEST_P(SSLClientSocketPoolTest, SOCKSFail) {
507 StaticSocketDataProvider data; 930 StaticSocketDataProvider data;
508 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); 931 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED));
509 socket_factory_.AddSocketDataProvider(&data); 932 socket_factory_.AddSocketDataProvider(&data);
510 933
511 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 934 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false);
512 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, 935 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5,
513 false); 936 false);
514 937
515 ClientSocketHandle handle; 938 ClientSocketHandle handle;
516 TestCompletionCallback callback; 939 TestCompletionCallback callback;
517 int rv = handle.Init( 940 int rv = handle.Init(
518 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 941 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
519 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); 942 EXPECT_EQ(ERR_CONNECTION_FAILED, rv);
520 EXPECT_FALSE(handle.is_initialized()); 943 EXPECT_FALSE(handle.is_initialized());
521 EXPECT_FALSE(handle.socket()); 944 EXPECT_FALSE(handle.socket());
522 EXPECT_FALSE(handle.is_ssl_error()); 945 EXPECT_FALSE(handle.is_ssl_error());
523 } 946 }
524 947
525 TEST_P(SSLClientSocketPoolTest, SOCKSFailAsync) { 948 TEST_P(SSLClientSocketPoolTest, SOCKSFailAsync) {
526 StaticSocketDataProvider data; 949 StaticSocketDataProvider data;
527 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); 950 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED));
528 socket_factory_.AddSocketDataProvider(&data); 951 socket_factory_.AddSocketDataProvider(&data);
529 952
530 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 953 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false);
531 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, 954 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5,
532 false); 955 false);
533 956
534 ClientSocketHandle handle; 957 ClientSocketHandle handle;
535 TestCompletionCallback callback; 958 TestCompletionCallback callback;
536 int rv = handle.Init( 959 int rv = handle.Init(
537 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 960 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
538 EXPECT_EQ(ERR_IO_PENDING, rv); 961 EXPECT_EQ(ERR_IO_PENDING, rv);
539 EXPECT_FALSE(handle.is_initialized()); 962 EXPECT_FALSE(handle.is_initialized());
540 EXPECT_FALSE(handle.socket()); 963 EXPECT_FALSE(handle.socket());
541 964
542 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 965 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult());
543 EXPECT_FALSE(handle.is_initialized()); 966 EXPECT_FALSE(handle.is_initialized());
544 EXPECT_FALSE(handle.socket()); 967 EXPECT_FALSE(handle.socket());
545 EXPECT_FALSE(handle.is_ssl_error()); 968 EXPECT_FALSE(handle.is_ssl_error());
546 } 969 }
547 970
548 TEST_P(SSLClientSocketPoolTest, SOCKSBasic) { 971 TEST_P(SSLClientSocketPoolTest, SOCKSBasic) {
549 StaticSocketDataProvider data; 972 StaticSocketDataProvider data;
550 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); 973 data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
551 socket_factory_.AddSocketDataProvider(&data); 974 socket_factory_.AddSocketDataProvider(&data);
552 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); 975 SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
553 socket_factory_.AddSSLSocketDataProvider(&ssl); 976 socket_factory_.AddSSLSocketDataProvider(&ssl);
554 977
555 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 978 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false);
556 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, 979 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5,
557 false); 980 false);
558 981
559 ClientSocketHandle handle; 982 ClientSocketHandle handle;
560 TestCompletionCallback callback; 983 TestCompletionCallback callback;
561 int rv = handle.Init( 984 int rv = handle.Init(
562 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 985 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
563 EXPECT_EQ(OK, rv); 986 EXPECT_EQ(OK, rv);
564 EXPECT_TRUE(handle.is_initialized()); 987 EXPECT_TRUE(handle.is_initialized());
565 EXPECT_TRUE(handle.socket()); 988 EXPECT_TRUE(handle.socket());
566 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here 989 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here
567 // don't go through the real logic, unlike in the HTTP proxy tests. 990 // don't go through the real logic, unlike in the HTTP proxy tests.
568 TestLoadTimingInfo(handle); 991 TestLoadTimingInfo(handle);
569 } 992 }
570 993
571 // Make sure that SSLConnectJob passes on its priority to its 994 // Make sure that SSLConnectJob passes on its priority to its
572 // transport socket on Init (for the SOCKS_PROXY case). 995 // transport socket on Init (for the SOCKS_PROXY case).
573 TEST_P(SSLClientSocketPoolTest, SetTransportPriorityOnInitSOCKS) { 996 TEST_P(SSLClientSocketPoolTest, SetTransportPriorityOnInitSOCKS) {
574 StaticSocketDataProvider data; 997 StaticSocketDataProvider data;
575 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); 998 data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
576 socket_factory_.AddSocketDataProvider(&data); 999 socket_factory_.AddSocketDataProvider(&data);
577 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); 1000 SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
578 socket_factory_.AddSSLSocketDataProvider(&ssl); 1001 socket_factory_.AddSSLSocketDataProvider(&ssl);
579 1002
580 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 1003 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false);
581 scoped_refptr<SSLSocketParams> params = 1004 scoped_refptr<SSLSocketParams> params =
582 SSLParams(ProxyServer::SCHEME_SOCKS5, false); 1005 SSLParams(ProxyServer::SCHEME_SOCKS5, false);
583 1006
584 ClientSocketHandle handle; 1007 ClientSocketHandle handle;
585 TestCompletionCallback callback; 1008 TestCompletionCallback callback;
586 EXPECT_EQ(OK, handle.Init("a", params, HIGHEST, callback.callback(), 1009 EXPECT_EQ(OK, handle.Init("a", params, HIGHEST, callback.callback(),
587 pool_.get(), BoundNetLog())); 1010 pool_.get(), BoundNetLog()));
588 EXPECT_EQ(HIGHEST, transport_socket_pool_.last_request_priority()); 1011 EXPECT_EQ(HIGHEST, transport_socket_pool_.last_request_priority());
589 } 1012 }
590 1013
591 TEST_P(SSLClientSocketPoolTest, SOCKSBasicAsync) { 1014 TEST_P(SSLClientSocketPoolTest, SOCKSBasicAsync) {
592 StaticSocketDataProvider data; 1015 StaticSocketDataProvider data;
593 socket_factory_.AddSocketDataProvider(&data); 1016 socket_factory_.AddSocketDataProvider(&data);
594 SSLSocketDataProvider ssl(ASYNC, OK); 1017 SSLSocketDataProvider ssl(ASYNC, OK);
595 socket_factory_.AddSSLSocketDataProvider(&ssl); 1018 socket_factory_.AddSSLSocketDataProvider(&ssl);
596 1019
597 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 1020 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false);
598 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, 1021 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5,
599 false); 1022 false);
600 1023
601 ClientSocketHandle handle; 1024 ClientSocketHandle handle;
602 TestCompletionCallback callback; 1025 TestCompletionCallback callback;
603 int rv = handle.Init( 1026 int rv = handle.Init(
604 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 1027 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
605 EXPECT_EQ(ERR_IO_PENDING, rv); 1028 EXPECT_EQ(ERR_IO_PENDING, rv);
606 EXPECT_FALSE(handle.is_initialized()); 1029 EXPECT_FALSE(handle.is_initialized());
607 EXPECT_FALSE(handle.socket()); 1030 EXPECT_FALSE(handle.socket());
608 1031
609 EXPECT_EQ(OK, callback.WaitForResult()); 1032 EXPECT_EQ(OK, callback.WaitForResult());
610 EXPECT_TRUE(handle.is_initialized()); 1033 EXPECT_TRUE(handle.is_initialized());
611 EXPECT_TRUE(handle.socket()); 1034 EXPECT_TRUE(handle.socket());
612 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here 1035 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here
613 // don't go through the real logic, unlike in the HTTP proxy tests. 1036 // don't go through the real logic, unlike in the HTTP proxy tests.
614 TestLoadTimingInfo(handle); 1037 TestLoadTimingInfo(handle);
615 } 1038 }
616 1039
617 TEST_P(SSLClientSocketPoolTest, HttpProxyFail) { 1040 TEST_P(SSLClientSocketPoolTest, HttpProxyFail) {
618 StaticSocketDataProvider data; 1041 StaticSocketDataProvider data;
619 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); 1042 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED));
620 socket_factory_.AddSocketDataProvider(&data); 1043 socket_factory_.AddSocketDataProvider(&data);
621 1044
622 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 1045 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false);
623 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, 1046 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP,
624 false); 1047 false);
625 1048
626 ClientSocketHandle handle; 1049 ClientSocketHandle handle;
627 TestCompletionCallback callback; 1050 TestCompletionCallback callback;
628 int rv = handle.Init( 1051 int rv = handle.Init(
629 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 1052 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
630 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); 1053 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv);
631 EXPECT_FALSE(handle.is_initialized()); 1054 EXPECT_FALSE(handle.is_initialized());
632 EXPECT_FALSE(handle.socket()); 1055 EXPECT_FALSE(handle.socket());
633 EXPECT_FALSE(handle.is_ssl_error()); 1056 EXPECT_FALSE(handle.is_ssl_error());
634 } 1057 }
635 1058
636 TEST_P(SSLClientSocketPoolTest, HttpProxyFailAsync) { 1059 TEST_P(SSLClientSocketPoolTest, HttpProxyFailAsync) {
637 StaticSocketDataProvider data; 1060 StaticSocketDataProvider data;
638 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); 1061 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED));
639 socket_factory_.AddSocketDataProvider(&data); 1062 socket_factory_.AddSocketDataProvider(&data);
640 1063
641 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 1064 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false);
642 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, 1065 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP,
643 false); 1066 false);
644 1067
645 ClientSocketHandle handle; 1068 ClientSocketHandle handle;
646 TestCompletionCallback callback; 1069 TestCompletionCallback callback;
647 int rv = handle.Init( 1070 int rv = handle.Init(
648 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 1071 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
649 EXPECT_EQ(ERR_IO_PENDING, rv); 1072 EXPECT_EQ(ERR_IO_PENDING, rv);
650 EXPECT_FALSE(handle.is_initialized()); 1073 EXPECT_FALSE(handle.is_initialized());
651 EXPECT_FALSE(handle.socket()); 1074 EXPECT_FALSE(handle.socket());
(...skipping 16 matching lines...) Expand all
668 MockRead(SYNCHRONOUS, "HTTP/1.1 200 Connection Established\r\n\r\n"), 1091 MockRead(SYNCHRONOUS, "HTTP/1.1 200 Connection Established\r\n\r\n"),
669 }; 1092 };
670 StaticSocketDataProvider data(reads, arraysize(reads), writes, 1093 StaticSocketDataProvider data(reads, arraysize(reads), writes,
671 arraysize(writes)); 1094 arraysize(writes));
672 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); 1095 data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
673 socket_factory_.AddSocketDataProvider(&data); 1096 socket_factory_.AddSocketDataProvider(&data);
674 AddAuthToCache(); 1097 AddAuthToCache();
675 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); 1098 SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
676 socket_factory_.AddSSLSocketDataProvider(&ssl); 1099 socket_factory_.AddSSLSocketDataProvider(&ssl);
677 1100
678 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 1101 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false);
679 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, 1102 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP,
680 false); 1103 false);
681 1104
682 ClientSocketHandle handle; 1105 ClientSocketHandle handle;
683 TestCompletionCallback callback; 1106 TestCompletionCallback callback;
684 int rv = handle.Init( 1107 int rv = handle.Init(
685 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 1108 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
686 EXPECT_EQ(OK, rv); 1109 EXPECT_EQ(OK, rv);
687 EXPECT_TRUE(handle.is_initialized()); 1110 EXPECT_TRUE(handle.is_initialized());
688 EXPECT_TRUE(handle.socket()); 1111 EXPECT_TRUE(handle.socket());
(...skipping 14 matching lines...) Expand all
703 MockRead(SYNCHRONOUS, "HTTP/1.1 200 Connection Established\r\n\r\n"), 1126 MockRead(SYNCHRONOUS, "HTTP/1.1 200 Connection Established\r\n\r\n"),
704 }; 1127 };
705 StaticSocketDataProvider data(reads, arraysize(reads), writes, 1128 StaticSocketDataProvider data(reads, arraysize(reads), writes,
706 arraysize(writes)); 1129 arraysize(writes));
707 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); 1130 data.set_connect_data(MockConnect(SYNCHRONOUS, OK));
708 socket_factory_.AddSocketDataProvider(&data); 1131 socket_factory_.AddSocketDataProvider(&data);
709 AddAuthToCache(); 1132 AddAuthToCache();
710 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); 1133 SSLSocketDataProvider ssl(SYNCHRONOUS, OK);
711 socket_factory_.AddSSLSocketDataProvider(&ssl); 1134 socket_factory_.AddSSLSocketDataProvider(&ssl);
712 1135
713 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 1136 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false);
714 scoped_refptr<SSLSocketParams> params = 1137 scoped_refptr<SSLSocketParams> params =
715 SSLParams(ProxyServer::SCHEME_HTTP, false); 1138 SSLParams(ProxyServer::SCHEME_HTTP, false);
716 1139
717 ClientSocketHandle handle; 1140 ClientSocketHandle handle;
718 TestCompletionCallback callback; 1141 TestCompletionCallback callback;
719 EXPECT_EQ(OK, handle.Init("a", params, HIGHEST, callback.callback(), 1142 EXPECT_EQ(OK, handle.Init("a", params, HIGHEST, callback.callback(),
720 pool_.get(), BoundNetLog())); 1143 pool_.get(), BoundNetLog()));
721 EXPECT_EQ(HIGHEST, transport_socket_pool_.last_request_priority()); 1144 EXPECT_EQ(HIGHEST, transport_socket_pool_.last_request_priority());
722 } 1145 }
723 1146
724 TEST_P(SSLClientSocketPoolTest, HttpProxyBasicAsync) { 1147 TEST_P(SSLClientSocketPoolTest, HttpProxyBasicAsync) {
725 MockWrite writes[] = { 1148 MockWrite writes[] = {
726 MockWrite("CONNECT host:80 HTTP/1.1\r\n" 1149 MockWrite("CONNECT host:80 HTTP/1.1\r\n"
727 "Host: host\r\n" 1150 "Host: host\r\n"
728 "Proxy-Connection: keep-alive\r\n" 1151 "Proxy-Connection: keep-alive\r\n"
729 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 1152 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
730 }; 1153 };
731 MockRead reads[] = { 1154 MockRead reads[] = {
732 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), 1155 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"),
733 }; 1156 };
734 StaticSocketDataProvider data(reads, arraysize(reads), writes, 1157 StaticSocketDataProvider data(reads, arraysize(reads), writes,
735 arraysize(writes)); 1158 arraysize(writes));
736 socket_factory_.AddSocketDataProvider(&data); 1159 socket_factory_.AddSocketDataProvider(&data);
737 AddAuthToCache(); 1160 AddAuthToCache();
738 SSLSocketDataProvider ssl(ASYNC, OK); 1161 SSLSocketDataProvider ssl(ASYNC, OK);
739 socket_factory_.AddSSLSocketDataProvider(&ssl); 1162 socket_factory_.AddSSLSocketDataProvider(&ssl);
740 1163
741 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 1164 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false);
742 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, 1165 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP,
743 false); 1166 false);
744 1167
745 ClientSocketHandle handle; 1168 ClientSocketHandle handle;
746 TestCompletionCallback callback; 1169 TestCompletionCallback callback;
747 int rv = handle.Init( 1170 int rv = handle.Init(
748 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 1171 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
749 EXPECT_EQ(ERR_IO_PENDING, rv); 1172 EXPECT_EQ(ERR_IO_PENDING, rv);
750 EXPECT_FALSE(handle.is_initialized()); 1173 EXPECT_FALSE(handle.is_initialized());
751 EXPECT_FALSE(handle.socket()); 1174 EXPECT_FALSE(handle.socket());
(...skipping 15 matching lines...) Expand all
767 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), 1190 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"),
768 MockRead("Content-Length: 10\r\n\r\n"), 1191 MockRead("Content-Length: 10\r\n\r\n"),
769 MockRead("0123456789"), 1192 MockRead("0123456789"),
770 }; 1193 };
771 StaticSocketDataProvider data(reads, arraysize(reads), writes, 1194 StaticSocketDataProvider data(reads, arraysize(reads), writes,
772 arraysize(writes)); 1195 arraysize(writes));
773 socket_factory_.AddSocketDataProvider(&data); 1196 socket_factory_.AddSocketDataProvider(&data);
774 SSLSocketDataProvider ssl(ASYNC, OK); 1197 SSLSocketDataProvider ssl(ASYNC, OK);
775 socket_factory_.AddSSLSocketDataProvider(&ssl); 1198 socket_factory_.AddSSLSocketDataProvider(&ssl);
776 1199
777 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 1200 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false);
778 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, 1201 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP,
779 false); 1202 false);
780 1203
781 ClientSocketHandle handle; 1204 ClientSocketHandle handle;
782 TestCompletionCallback callback; 1205 TestCompletionCallback callback;
783 int rv = handle.Init( 1206 int rv = handle.Init(
784 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); 1207 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog());
785 EXPECT_EQ(ERR_IO_PENDING, rv); 1208 EXPECT_EQ(ERR_IO_PENDING, rv);
786 EXPECT_FALSE(handle.is_initialized()); 1209 EXPECT_FALSE(handle.is_initialized());
787 EXPECT_FALSE(handle.socket()); 1210 EXPECT_FALSE(handle.socket());
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 MockRead(ASYNC, ERR_IO_PENDING), 1259 MockRead(ASYNC, ERR_IO_PENDING),
837 }; 1260 };
838 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); 1261 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
839 socket_factory_.AddSocketDataProvider(&data); 1262 socket_factory_.AddSocketDataProvider(&data);
840 SSLSocketDataProvider ssl(ASYNC, OK); 1263 SSLSocketDataProvider ssl(ASYNC, OK);
841 ssl.cert = X509Certificate::CreateFromBytes( 1264 ssl.cert = X509Certificate::CreateFromBytes(
842 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)); 1265 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der));
843 ssl.SetNextProto(GetParam()); 1266 ssl.SetNextProto(GetParam());
844 socket_factory_.AddSSLSocketDataProvider(&ssl); 1267 socket_factory_.AddSSLSocketDataProvider(&ssl);
845 1268
846 CreatePool(true /* tcp pool */, false, false); 1269 CreatePool(true /* tcp pool */, false, false, false);
847 base::WeakPtr<SpdySession> spdy_session = 1270 base::WeakPtr<SpdySession> spdy_session =
848 CreateSecureSpdySession(session_, test_hosts[0].key, BoundNetLog()); 1271 CreateSecureSpdySession(session_, test_hosts[0].key, BoundNetLog());
849 1272
850 EXPECT_TRUE( 1273 EXPECT_TRUE(
851 HasSpdySession(session_->spdy_session_pool(), test_hosts[0].key)); 1274 HasSpdySession(session_->spdy_session_pool(), test_hosts[0].key));
852 EXPECT_FALSE( 1275 EXPECT_FALSE(
853 HasSpdySession(session_->spdy_session_pool(), test_hosts[1].key)); 1276 HasSpdySession(session_->spdy_session_pool(), test_hosts[1].key));
854 EXPECT_TRUE( 1277 EXPECT_TRUE(
855 HasSpdySession(session_->spdy_session_pool(), test_hosts[2].key)); 1278 HasSpdySession(session_->spdy_session_pool(), test_hosts[2].key));
856 1279
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 PRIVACY_MODE_DISABLED); 1316 PRIVACY_MODE_DISABLED);
894 } 1317 }
895 1318
896 MockRead reads[] = { 1319 MockRead reads[] = {
897 MockRead(ASYNC, ERR_IO_PENDING), 1320 MockRead(ASYNC, ERR_IO_PENDING),
898 }; 1321 };
899 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); 1322 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0);
900 socket_factory_.AddSocketDataProvider(&data); 1323 socket_factory_.AddSocketDataProvider(&data);
901 socket_factory_.AddSSLSocketDataProvider(ssl); 1324 socket_factory_.AddSSLSocketDataProvider(ssl);
902 1325
903 CreatePool(true /* tcp pool */, false, false); 1326 CreatePool(true /* tcp pool */, false, false, false);
904 base::WeakPtr<SpdySession> spdy_session = 1327 base::WeakPtr<SpdySession> spdy_session =
905 CreateSecureSpdySession(session_, test_hosts[0].key, BoundNetLog()); 1328 CreateSecureSpdySession(session_, test_hosts[0].key, BoundNetLog());
906 1329
907 EXPECT_TRUE( 1330 EXPECT_TRUE(
908 HasSpdySession(session_->spdy_session_pool(), test_hosts[0].key)); 1331 HasSpdySession(session_->spdy_session_pool(), test_hosts[0].key));
909 EXPECT_FALSE( 1332 EXPECT_FALSE(
910 HasSpdySession(session_->spdy_session_pool(), test_hosts[1].key)); 1333 HasSpdySession(session_->spdy_session_pool(), test_hosts[1].key));
911 1334
912 session_->spdy_session_pool()->CloseAllSessions(); 1335 session_->spdy_session_pool()->CloseAllSessions();
913 } 1336 }
(...skipping 15 matching lines...) Expand all
929 ssl.channel_id_sent = true; 1352 ssl.channel_id_sent = true;
930 ssl.SetNextProto(GetParam()); 1353 ssl.SetNextProto(GetParam());
931 TestIPPoolingDisabled(&ssl); 1354 TestIPPoolingDisabled(&ssl);
932 } 1355 }
933 1356
934 // It would be nice to also test the timeouts in SSLClientSocketPool. 1357 // It would be nice to also test the timeouts in SSLClientSocketPool.
935 1358
936 } // namespace 1359 } // namespace
937 1360
938 } // namespace net 1361 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698