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

Side by Side Diff: net/http/http_network_transaction_unittest.cc

Issue 2140673002: Remove SPDY/3.1 tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <math.h> // ceil 7 #include <math.h> // ceil
8 #include <stdarg.h> 8 #include <stdarg.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 101
102 using base::ASCIIToUTF16; 102 using base::ASCIIToUTF16;
103 103
104 //----------------------------------------------------------------------------- 104 //-----------------------------------------------------------------------------
105 105
106 namespace net { 106 namespace net {
107 107
108 namespace { 108 namespace {
109 109
110 enum TestCase { 110 enum TestCase {
111 // Test using the SPDY/3.1 protocol. 111 // Test without specifying a stream dependency based on the RequestPriority.
112 kTestCaseSPDY31, 112 kTestCaseNoPriorityDependencies,
113 113
114 // Test using the HTTP/2 protocol, without specifying a stream 114 // Test specifying a stream dependency based on the RequestPriority.
115 // dependency based on the RequestPriority. 115 kTestCasePriorityDependencies
116 kTestCaseHTTP2NoPriorityDependencies,
117
118 // Test using the HTTP/2 protocol, specifying a stream
119 // dependency based on the RequestPriority.
120 kTestCaseHTTP2PriorityDependencies
121 }; 116 };
122 117
123 const base::string16 kBar(ASCIIToUTF16("bar")); 118 const base::string16 kBar(ASCIIToUTF16("bar"));
124 const base::string16 kBar2(ASCIIToUTF16("bar2")); 119 const base::string16 kBar2(ASCIIToUTF16("bar2"));
125 const base::string16 kBar3(ASCIIToUTF16("bar3")); 120 const base::string16 kBar3(ASCIIToUTF16("bar3"));
126 const base::string16 kBaz(ASCIIToUTF16("baz")); 121 const base::string16 kBaz(ASCIIToUTF16("baz"));
127 const base::string16 kFirst(ASCIIToUTF16("first")); 122 const base::string16 kFirst(ASCIIToUTF16("first"));
128 const base::string16 kFoo(ASCIIToUTF16("foo")); 123 const base::string16 kFoo(ASCIIToUTF16("foo"));
129 const base::string16 kFoo2(ASCIIToUTF16("foo2")); 124 const base::string16 kFoo2(ASCIIToUTF16("foo2"));
130 const base::string16 kFoo3(ASCIIToUTF16("foo3")); 125 const base::string16 kFoo3(ASCIIToUTF16("foo3"));
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 // Important to restore the per-pool limit first, since the pool limit must 273 // Important to restore the per-pool limit first, since the pool limit must
279 // always be greater than group limit, and the tests reduce both limits. 274 // always be greater than group limit, and the tests reduce both limits.
280 ClientSocketPoolManager::set_max_sockets_per_pool( 275 ClientSocketPoolManager::set_max_sockets_per_pool(
281 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_pool_sockets_); 276 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_pool_sockets_);
282 ClientSocketPoolManager::set_max_sockets_per_group( 277 ClientSocketPoolManager::set_max_sockets_per_group(
283 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_group_sockets_); 278 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_group_sockets_);
284 } 279 }
285 280
286 protected: 281 protected:
287 HttpNetworkTransactionTest() 282 HttpNetworkTransactionTest()
288 : spdy_util_(GetProtocol(), GetDependenciesFromPriority()), 283 : spdy_util_(GetDependenciesFromPriority()),
289 session_deps_(GetProtocol()),
290 old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( 284 old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group(
291 HttpNetworkSession::NORMAL_SOCKET_POOL)), 285 HttpNetworkSession::NORMAL_SOCKET_POOL)),
292 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( 286 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool(
293 HttpNetworkSession::NORMAL_SOCKET_POOL)) { 287 HttpNetworkSession::NORMAL_SOCKET_POOL)) {
294 session_deps_.enable_priority_dependencies = GetDependenciesFromPriority(); 288 session_deps_.enable_priority_dependencies = GetDependenciesFromPriority();
295 session_deps_.enable_http2_alternative_service_with_different_host = true; 289 session_deps_.enable_http2_alternative_service_with_different_host = true;
296 } 290 }
297 291
298 struct SimpleGetHelperResult { 292 struct SimpleGetHelperResult {
299 int rv; 293 int rv;
(...skipping 14 matching lines...) Expand all
314 void TearDown() override { 308 void TearDown() override {
315 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 309 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
316 base::RunLoop().RunUntilIdle(); 310 base::RunLoop().RunUntilIdle();
317 // Empty the current queue. 311 // Empty the current queue.
318 base::RunLoop().RunUntilIdle(); 312 base::RunLoop().RunUntilIdle();
319 PlatformTest::TearDown(); 313 PlatformTest::TearDown();
320 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 314 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
321 base::RunLoop().RunUntilIdle(); 315 base::RunLoop().RunUntilIdle();
322 } 316 }
323 317
324 NextProto GetProtocol() const {
325 return GetParam() == kTestCaseSPDY31 ? kProtoSPDY31 : kProtoHTTP2;
326 }
327
328 bool GetDependenciesFromPriority() const { 318 bool GetDependenciesFromPriority() const {
329 return GetParam() == kTestCaseHTTP2PriorityDependencies; 319 return GetParam() == kTestCasePriorityDependencies;
330 } 320 }
331 321
332 // Either |write_failure| specifies a write failure or |read_failure| 322 // Either |write_failure| specifies a write failure or |read_failure|
333 // specifies a read failure when using a reused socket. In either case, the 323 // specifies a read failure when using a reused socket. In either case, the
334 // failure should cause the network transaction to resend the request, and the 324 // failure should cause the network transaction to resend the request, and the
335 // other argument should be NULL. 325 // other argument should be NULL.
336 void KeepAliveConnectionResendRequestTest(const MockWrite* write_failure, 326 void KeepAliveConnectionResendRequestTest(const MockWrite* write_failure,
337 const MockRead* read_failure); 327 const MockRead* read_failure);
338 328
339 // Either |write_failure| specifies a write failure or |read_failure| 329 // Either |write_failure| specifies a write failure or |read_failure|
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 SpdySessionDependencies session_deps_; 457 SpdySessionDependencies session_deps_;
468 458
469 // Original socket limits. Some tests set these. Safest to always restore 459 // Original socket limits. Some tests set these. Safest to always restore
470 // them once each test has been run. 460 // them once each test has been run.
471 int old_max_group_sockets_; 461 int old_max_group_sockets_;
472 int old_max_pool_sockets_; 462 int old_max_pool_sockets_;
473 }; 463 };
474 464
475 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, 465 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend,
476 HttpNetworkTransactionTest, 466 HttpNetworkTransactionTest,
477 testing::Values(kTestCaseSPDY31, 467 testing::Values(kTestCaseNoPriorityDependencies,
478 kTestCaseHTTP2NoPriorityDependencies, 468 kTestCasePriorityDependencies));
479 kTestCaseHTTP2PriorityDependencies));
480 469
481 namespace { 470 namespace {
482 471
483 class BeforeHeadersSentHandler { 472 class BeforeHeadersSentHandler {
484 public: 473 public:
485 BeforeHeadersSentHandler() 474 BeforeHeadersSentHandler()
486 : observed_before_headers_sent_with_proxy_(false), 475 : observed_before_headers_sent_with_proxy_(false),
487 observed_before_headers_sent_(false) {} 476 observed_before_headers_sent_(false) {}
488 477
489 void OnBeforeHeadersSent(const ProxyInfo& proxy_info, 478 void OnBeforeHeadersSent(const ProxyInfo& proxy_info,
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 request.url = GURL("https://www.foo.com/"); 1409 request.url = GURL("https://www.foo.com/");
1421 request.load_flags = 0; 1410 request.load_flags = 0;
1422 1411
1423 TestNetLog net_log; 1412 TestNetLog net_log;
1424 session_deps_.net_log = &net_log; 1413 session_deps_.net_log = &net_log;
1425 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 1414 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
1426 1415
1427 SSLSocketDataProvider ssl1(ASYNC, OK); 1416 SSLSocketDataProvider ssl1(ASYNC, OK);
1428 SSLSocketDataProvider ssl2(ASYNC, OK); 1417 SSLSocketDataProvider ssl2(ASYNC, OK);
1429 if (use_spdy) { 1418 if (use_spdy) {
1430 ssl1.SetNextProto(GetProtocol()); 1419 ssl1.SetNextProto(kProtoHTTP2);
1431 ssl2.SetNextProto(GetProtocol()); 1420 ssl2.SetNextProto(kProtoHTTP2);
1432 } 1421 }
1433 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); 1422 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1);
1434 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); 1423 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2);
1435 1424
1436 // SPDY versions of the request and response. 1425 // SPDY versions of the request and response.
1437 std::unique_ptr<SpdySerializedFrame> spdy_request(spdy_util_.ConstructSpdyGet( 1426 std::unique_ptr<SpdySerializedFrame> spdy_request(spdy_util_.ConstructSpdyGet(
1438 request.url.spec().c_str(), 1, DEFAULT_PRIORITY)); 1427 request.url.spec().c_str(), 1, DEFAULT_PRIORITY));
1439 std::unique_ptr<SpdySerializedFrame> spdy_response( 1428 std::unique_ptr<SpdySerializedFrame> spdy_response(
1440 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 1429 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
1441 std::unique_ptr<SpdySerializedFrame> spdy_data( 1430 std::unique_ptr<SpdySerializedFrame> spdy_data(
(...skipping 3055 matching lines...) Expand 10 before | Expand all | Expand 10 after
4497 spdy_util_.ConstructSpdyBodyFrame(1, true)); 4486 spdy_util_.ConstructSpdyBodyFrame(1, true));
4498 MockRead spdy_reads[] = { 4487 MockRead spdy_reads[] = {
4499 CreateMockRead(*resp, 1), CreateMockRead(*data, 2), MockRead(ASYNC, 0, 3), 4488 CreateMockRead(*resp, 1), CreateMockRead(*data, 2), MockRead(ASYNC, 0, 3),
4500 }; 4489 };
4501 4490
4502 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 4491 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
4503 arraysize(spdy_writes)); 4492 arraysize(spdy_writes));
4504 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 4493 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
4505 4494
4506 SSLSocketDataProvider ssl(ASYNC, OK); 4495 SSLSocketDataProvider ssl(ASYNC, OK);
4507 ssl.SetNextProto(GetProtocol()); 4496 ssl.SetNextProto(kProtoHTTP2);
4508 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 4497 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
4509 4498
4510 TestCompletionCallback callback1; 4499 TestCompletionCallback callback1;
4511 4500
4512 std::unique_ptr<HttpTransaction> trans( 4501 std::unique_ptr<HttpTransaction> trans(
4513 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 4502 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
4514 4503
4515 int rv = trans->Start(&request, callback1.callback(), log.bound()); 4504 int rv = trans->Start(&request, callback1.callback(), log.bound());
4516 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 4505 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
4517 4506
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
4559 spdy_util_.ConstructSpdyBodyFrame(1, true)); 4548 spdy_util_.ConstructSpdyBodyFrame(1, true));
4560 MockRead spdy_reads[] = { 4549 MockRead spdy_reads[] = {
4561 CreateMockRead(*resp, 1), CreateMockRead(*data, 2), MockRead(ASYNC, 0, 3), 4550 CreateMockRead(*resp, 1), CreateMockRead(*data, 2), MockRead(ASYNC, 0, 3),
4562 }; 4551 };
4563 4552
4564 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 4553 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
4565 arraysize(spdy_writes)); 4554 arraysize(spdy_writes));
4566 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 4555 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
4567 4556
4568 SSLSocketDataProvider ssl(ASYNC, OK); 4557 SSLSocketDataProvider ssl(ASYNC, OK);
4569 ssl.SetNextProto(GetProtocol()); 4558 ssl.SetNextProto(kProtoHTTP2);
4570 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 4559 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
4571 4560
4572 TestCompletionCallback callback1; 4561 TestCompletionCallback callback1;
4573 4562
4574 std::unique_ptr<HttpTransaction> trans( 4563 std::unique_ptr<HttpTransaction> trans(
4575 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 4564 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
4576 4565
4577 // Stall the hostname resolution begun by the transaction. 4566 // Stall the hostname resolution begun by the transaction.
4578 session_deps_.host_resolver->set_synchronous_mode(false); 4567 session_deps_.host_resolver->set_synchronous_mode(false);
4579 session_deps_.host_resolver->set_ondemand_mode(true); 4568 session_deps_.host_resolver->set_ondemand_mode(true);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
4658 CreateMockRead(*resp_data, 4), 4647 CreateMockRead(*resp_data, 4),
4659 CreateMockRead(*body_data, 5), 4648 CreateMockRead(*body_data, 5),
4660 MockRead(ASYNC, 0, 6), 4649 MockRead(ASYNC, 0, 6),
4661 }; 4650 };
4662 4651
4663 SequencedSocketData data(spdy_reads, arraysize(spdy_reads), spdy_writes, 4652 SequencedSocketData data(spdy_reads, arraysize(spdy_reads), spdy_writes,
4664 arraysize(spdy_writes)); 4653 arraysize(spdy_writes));
4665 session_deps_.socket_factory->AddSocketDataProvider(&data); 4654 session_deps_.socket_factory->AddSocketDataProvider(&data);
4666 4655
4667 SSLSocketDataProvider ssl(ASYNC, OK); 4656 SSLSocketDataProvider ssl(ASYNC, OK);
4668 ssl.SetNextProto(GetProtocol()); 4657 ssl.SetNextProto(kProtoHTTP2);
4669 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 4658 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
4670 4659
4671 TestCompletionCallback callback1; 4660 TestCompletionCallback callback1;
4672 4661
4673 std::unique_ptr<HttpTransaction> trans( 4662 std::unique_ptr<HttpTransaction> trans(
4674 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 4663 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
4675 4664
4676 int rv = trans->Start(&request, callback1.callback(), log.bound()); 4665 int rv = trans->Start(&request, callback1.callback(), log.bound());
4677 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 4666 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
4678 4667
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
4755 CreateMockRead(*wrapped_body, 4, ASYNC), 4744 CreateMockRead(*wrapped_body, 4, ASYNC),
4756 CreateMockRead(*wrapped_body, 5, ASYNC), 4745 CreateMockRead(*wrapped_body, 5, ASYNC),
4757 MockRead(ASYNC, 0, 7), 4746 MockRead(ASYNC, 0, 7),
4758 }; 4747 };
4759 4748
4760 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 4749 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
4761 arraysize(spdy_writes)); 4750 arraysize(spdy_writes));
4762 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 4751 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
4763 4752
4764 SSLSocketDataProvider ssl(ASYNC, OK); 4753 SSLSocketDataProvider ssl(ASYNC, OK);
4765 ssl.SetNextProto(GetProtocol()); 4754 ssl.SetNextProto(kProtoHTTP2);
4766 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 4755 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
4767 SSLSocketDataProvider ssl2(ASYNC, OK); 4756 SSLSocketDataProvider ssl2(ASYNC, OK);
4768 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); 4757 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2);
4769 4758
4770 TestCompletionCallback callback1; 4759 TestCompletionCallback callback1;
4771 4760
4772 int rv = trans->Start(&request, callback1.callback(), log.bound()); 4761 int rv = trans->Start(&request, callback1.callback(), log.bound());
4773 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 4762 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
4774 4763
4775 rv = callback1.WaitForResult(); 4764 rv = callback1.WaitForResult();
4776 ASSERT_THAT(rv, IsOk()); 4765 ASSERT_THAT(rv, IsOk());
4777 4766
4778 LoadTimingInfo load_timing_info; 4767 LoadTimingInfo load_timing_info;
4779 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); 4768 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info));
4780 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); 4769 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES);
4781 4770
4782 const HttpResponseInfo* response = trans->GetResponseInfo(); 4771 const HttpResponseInfo* response = trans->GetResponseInfo();
4783 ASSERT_TRUE(response); 4772 ASSERT_TRUE(response);
4784 ASSERT_TRUE(response->headers); 4773 ASSERT_TRUE(response->headers);
4785 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 4774 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
4786 4775
4787 std::string response_data; 4776 std::string response_data;
4788 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); 4777 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk());
4789 EXPECT_EQ("1234567890", response_data); 4778 EXPECT_EQ("1234567890", response_data);
4790 } 4779 }
4791 4780
4792 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. 4781 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server.
4793 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { 4782 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) {
4794 SpdyTestUtil spdy_util_wrapped(GetProtocol(), GetDependenciesFromPriority()); 4783 SpdyTestUtil spdy_util_wrapped(GetDependenciesFromPriority());
4795 4784
4796 HttpRequestInfo request; 4785 HttpRequestInfo request;
4797 request.method = "GET"; 4786 request.method = "GET";
4798 request.url = GURL("https://www.example.org/"); 4787 request.url = GURL("https://www.example.org/");
4799 request.load_flags = 0; 4788 request.load_flags = 0;
4800 4789
4801 // Configure against https proxy server "proxy:70". 4790 // Configure against https proxy server "proxy:70".
4802 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70"); 4791 session_deps_.proxy_service = ProxyService::CreateFixed("https://proxy:70");
4803 BoundTestNetLog log; 4792 BoundTestNetLog log;
4804 session_deps_.net_log = log.bound().net_log(); 4793 session_deps_.net_log = log.bound().net_log();
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
4844 CreateMockRead(*wrapped_get_resp, 4, ASYNC), 4833 CreateMockRead(*wrapped_get_resp, 4, ASYNC),
4845 CreateMockRead(*wrapped_body, 5, ASYNC), 4834 CreateMockRead(*wrapped_body, 5, ASYNC),
4846 MockRead(ASYNC, 0, 8), 4835 MockRead(ASYNC, 0, 8),
4847 }; 4836 };
4848 4837
4849 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 4838 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
4850 arraysize(spdy_writes)); 4839 arraysize(spdy_writes));
4851 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 4840 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
4852 4841
4853 SSLSocketDataProvider ssl(ASYNC, OK); 4842 SSLSocketDataProvider ssl(ASYNC, OK);
4854 ssl.SetNextProto(GetProtocol()); 4843 ssl.SetNextProto(kProtoHTTP2);
4855 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 4844 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
4856 SSLSocketDataProvider ssl2(ASYNC, OK); 4845 SSLSocketDataProvider ssl2(ASYNC, OK);
4857 ssl2.SetNextProto(GetProtocol()); 4846 ssl2.SetNextProto(kProtoHTTP2);
4858 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); 4847 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2);
4859 4848
4860 TestCompletionCallback callback1; 4849 TestCompletionCallback callback1;
4861 4850
4862 int rv = trans->Start(&request, callback1.callback(), log.bound()); 4851 int rv = trans->Start(&request, callback1.callback(), log.bound());
4863 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 4852 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
4864 4853
4865 // Allow the SpdyProxyClientSocket's write callback to complete. 4854 // Allow the SpdyProxyClientSocket's write callback to complete.
4866 base::RunLoop().RunUntilIdle(); 4855 base::RunLoop().RunUntilIdle();
4867 // Now allow the read of the response to complete. 4856 // Now allow the read of the response to complete.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
4915 spdy_util_.ConstructSpdyBodyFrame(1, true)); 4904 spdy_util_.ConstructSpdyBodyFrame(1, true));
4916 MockRead spdy_reads[] = { 4905 MockRead spdy_reads[] = {
4917 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, 0, 3), 4906 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, 0, 3),
4918 }; 4907 };
4919 4908
4920 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 4909 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
4921 arraysize(spdy_writes)); 4910 arraysize(spdy_writes));
4922 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 4911 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
4923 4912
4924 SSLSocketDataProvider ssl(ASYNC, OK); 4913 SSLSocketDataProvider ssl(ASYNC, OK);
4925 ssl.SetNextProto(GetProtocol()); 4914 ssl.SetNextProto(kProtoHTTP2);
4926 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 4915 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
4927 SSLSocketDataProvider ssl2(ASYNC, OK); 4916 SSLSocketDataProvider ssl2(ASYNC, OK);
4928 ssl2.SetNextProto(GetProtocol()); 4917 ssl2.SetNextProto(kProtoHTTP2);
4929 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); 4918 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2);
4930 4919
4931 TestCompletionCallback callback1; 4920 TestCompletionCallback callback1;
4932 4921
4933 int rv = trans->Start(&request, callback1.callback(), log.bound()); 4922 int rv = trans->Start(&request, callback1.callback(), log.bound());
4934 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 4923 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
4935 4924
4936 rv = callback1.WaitForResult(); 4925 rv = callback1.WaitForResult();
4937 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); 4926 EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED));
4938 4927
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
4977 "Content-Length: 1\r\n\r\n"; 4966 "Content-Length: 1\r\n\r\n";
4978 std::unique_ptr<SpdySerializedFrame> wrapped_get_resp1( 4967 std::unique_ptr<SpdySerializedFrame> wrapped_get_resp1(
4979 spdy_util_.ConstructSpdyBodyFrame(1, resp1, strlen(resp1), false)); 4968 spdy_util_.ConstructSpdyBodyFrame(1, resp1, strlen(resp1), false));
4980 std::unique_ptr<SpdySerializedFrame> wrapped_body1( 4969 std::unique_ptr<SpdySerializedFrame> wrapped_body1(
4981 spdy_util_.ConstructSpdyBodyFrame(1, "1", 1, false)); 4970 spdy_util_.ConstructSpdyBodyFrame(1, "1", 1, false));
4982 std::unique_ptr<SpdySerializedFrame> window_update( 4971 std::unique_ptr<SpdySerializedFrame> window_update(
4983 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp1->size())); 4972 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp1->size()));
4984 4973
4985 // CONNECT to mail.example.org:443 via SPDY. 4974 // CONNECT to mail.example.org:443 via SPDY.
4986 SpdyHeaderBlock connect2_block; 4975 SpdyHeaderBlock connect2_block;
4987 spdy_util_.MaybeAddVersionHeader(&connect2_block);
4988 connect2_block[spdy_util_.GetMethodKey()] = "CONNECT"; 4976 connect2_block[spdy_util_.GetMethodKey()] = "CONNECT";
4989 if (GetProtocol() == kProtoHTTP2) { 4977 connect2_block[spdy_util_.GetHostKey()] = "mail.example.org:443";
4990 connect2_block[spdy_util_.GetHostKey()] = "mail.example.org:443";
4991 } else {
4992 connect2_block[spdy_util_.GetHostKey()] = "mail.example.org";
4993 connect2_block[spdy_util_.GetPathKey()] = "mail.example.org:443";
4994 }
4995 std::unique_ptr<SpdySerializedFrame> connect2( 4978 std::unique_ptr<SpdySerializedFrame> connect2(
4996 spdy_util_.ConstructSpdySyn(3, std::move(connect2_block), LOWEST, false)); 4979 spdy_util_.ConstructSpdySyn(3, std::move(connect2_block), LOWEST, false));
4997 4980
4998 std::unique_ptr<SpdySerializedFrame> conn_resp2( 4981 std::unique_ptr<SpdySerializedFrame> conn_resp2(
4999 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); 4982 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3));
5000 4983
5001 // Fetch https://mail.example.org/ via HTTP. 4984 // Fetch https://mail.example.org/ via HTTP.
5002 const char get2[] = 4985 const char get2[] =
5003 "GET / HTTP/1.1\r\n" 4986 "GET / HTTP/1.1\r\n"
5004 "Host: mail.example.org\r\n" 4987 "Host: mail.example.org\r\n"
(...skipping 22 matching lines...) Expand all
5027 CreateMockRead(*wrapped_get_resp2, 8, ASYNC), 5010 CreateMockRead(*wrapped_get_resp2, 8, ASYNC),
5028 CreateMockRead(*wrapped_body2, 9, ASYNC), 5011 CreateMockRead(*wrapped_body2, 9, ASYNC),
5029 MockRead(ASYNC, 0, 10), 5012 MockRead(ASYNC, 0, 10),
5030 }; 5013 };
5031 5014
5032 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 5015 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
5033 arraysize(spdy_writes)); 5016 arraysize(spdy_writes));
5034 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 5017 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
5035 5018
5036 SSLSocketDataProvider ssl(ASYNC, OK); 5019 SSLSocketDataProvider ssl(ASYNC, OK);
5037 ssl.SetNextProto(GetProtocol()); 5020 ssl.SetNextProto(kProtoHTTP2);
5038 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 5021 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
5039 SSLSocketDataProvider ssl2(ASYNC, OK); 5022 SSLSocketDataProvider ssl2(ASYNC, OK);
5040 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); 5023 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2);
5041 SSLSocketDataProvider ssl3(ASYNC, OK); 5024 SSLSocketDataProvider ssl3(ASYNC, OK);
5042 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl3); 5025 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl3);
5043 5026
5044 TestCompletionCallback callback; 5027 TestCompletionCallback callback;
5045 5028
5046 std::unique_ptr<HttpTransaction> trans( 5029 std::unique_ptr<HttpTransaction> trans(
5047 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 5030 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
5151 CreateMockRead(*wrapped_get_resp2, 6, ASYNC), 5134 CreateMockRead(*wrapped_get_resp2, 6, ASYNC),
5152 CreateMockRead(*wrapped_body2, 7, ASYNC), 5135 CreateMockRead(*wrapped_body2, 7, ASYNC),
5153 MockRead(ASYNC, 0, 8), 5136 MockRead(ASYNC, 0, 8),
5154 }; 5137 };
5155 5138
5156 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 5139 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
5157 arraysize(spdy_writes)); 5140 arraysize(spdy_writes));
5158 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 5141 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
5159 5142
5160 SSLSocketDataProvider ssl(ASYNC, OK); 5143 SSLSocketDataProvider ssl(ASYNC, OK);
5161 ssl.SetNextProto(GetProtocol()); 5144 ssl.SetNextProto(kProtoHTTP2);
5162 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 5145 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
5163 SSLSocketDataProvider ssl2(ASYNC, OK); 5146 SSLSocketDataProvider ssl2(ASYNC, OK);
5164 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); 5147 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2);
5165 5148
5166 TestCompletionCallback callback; 5149 TestCompletionCallback callback;
5167 5150
5168 std::unique_ptr<HttpTransaction> trans( 5151 std::unique_ptr<HttpTransaction> trans(
5169 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 5152 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
5170 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); 5153 int rv = trans->Start(&request1, callback.callback(), BoundNetLog());
5171 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 5154 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
5257 CreateMockRead(*get_resp2, 4, ASYNC), 5240 CreateMockRead(*get_resp2, 4, ASYNC),
5258 CreateMockRead(*body2, 5, ASYNC), 5241 CreateMockRead(*body2, 5, ASYNC),
5259 MockRead(ASYNC, 0, 6), 5242 MockRead(ASYNC, 0, 6),
5260 }; 5243 };
5261 5244
5262 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 5245 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
5263 arraysize(spdy_writes)); 5246 arraysize(spdy_writes));
5264 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 5247 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
5265 5248
5266 SSLSocketDataProvider ssl(ASYNC, OK); 5249 SSLSocketDataProvider ssl(ASYNC, OK);
5267 ssl.SetNextProto(GetProtocol()); 5250 ssl.SetNextProto(kProtoHTTP2);
5268 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 5251 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
5269 5252
5270 TestCompletionCallback callback; 5253 TestCompletionCallback callback;
5271 5254
5272 std::unique_ptr<HttpTransaction> trans( 5255 std::unique_ptr<HttpTransaction> trans(
5273 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 5256 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
5274 int rv = trans->Start(&request1, callback.callback(), BoundNetLog()); 5257 int rv = trans->Start(&request1, callback.callback(), BoundNetLog());
5275 EXPECT_THAT(callback.GetResult(rv), IsOk()); 5258 EXPECT_THAT(callback.GetResult(rv), IsOk());
5276 5259
5277 LoadTimingInfo load_timing_info; 5260 LoadTimingInfo load_timing_info;
(...skipping 2412 matching lines...) Expand 10 before | Expand all | Expand 10 after
7690 std::unique_ptr<SpdySerializedFrame> resp( 7673 std::unique_ptr<SpdySerializedFrame> resp(
7691 spdy_util_.ConstructSpdySynReplyError("302 Redirect", kExtraHeaders, 7674 spdy_util_.ConstructSpdySynReplyError("302 Redirect", kExtraHeaders,
7692 arraysize(kExtraHeaders) / 2, 1)); 7675 arraysize(kExtraHeaders) / 2, 1));
7693 MockRead data_reads[] = { 7676 MockRead data_reads[] = {
7694 CreateMockRead(*resp.get(), 1), MockRead(ASYNC, 0, 3), // EOF 7677 CreateMockRead(*resp.get(), 1), MockRead(ASYNC, 0, 3), // EOF
7695 }; 7678 };
7696 7679
7697 SequencedSocketData data(data_reads, arraysize(data_reads), data_writes, 7680 SequencedSocketData data(data_reads, arraysize(data_reads), data_writes,
7698 arraysize(data_writes)); 7681 arraysize(data_writes));
7699 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy 7682 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy
7700 proxy_ssl.SetNextProto(GetProtocol()); 7683 proxy_ssl.SetNextProto(kProtoHTTP2);
7701 7684
7702 session_deps_.socket_factory->AddSocketDataProvider(&data); 7685 session_deps_.socket_factory->AddSocketDataProvider(&data);
7703 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); 7686 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl);
7704 7687
7705 TestCompletionCallback callback; 7688 TestCompletionCallback callback;
7706 7689
7707 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 7690 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
7708 std::unique_ptr<HttpTransaction> trans( 7691 std::unique_ptr<HttpTransaction> trans(
7709 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 7692 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
7710 7693
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
7797 1, "The host does not exist", 23, true)); 7780 1, "The host does not exist", 23, true));
7798 MockRead data_reads[] = { 7781 MockRead data_reads[] = {
7799 CreateMockRead(*resp.get(), 1), 7782 CreateMockRead(*resp.get(), 1),
7800 CreateMockRead(*body.get(), 2), 7783 CreateMockRead(*body.get(), 2),
7801 MockRead(ASYNC, 0, 4), // EOF 7784 MockRead(ASYNC, 0, 4), // EOF
7802 }; 7785 };
7803 7786
7804 SequencedSocketData data(data_reads, arraysize(data_reads), data_writes, 7787 SequencedSocketData data(data_reads, arraysize(data_reads), data_writes,
7805 arraysize(data_writes)); 7788 arraysize(data_writes));
7806 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy 7789 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy
7807 proxy_ssl.SetNextProto(GetProtocol()); 7790 proxy_ssl.SetNextProto(kProtoHTTP2);
7808 7791
7809 session_deps_.socket_factory->AddSocketDataProvider(&data); 7792 session_deps_.socket_factory->AddSocketDataProvider(&data);
7810 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); 7793 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl);
7811 7794
7812 TestCompletionCallback callback; 7795 TestCompletionCallback callback;
7813 7796
7814 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 7797 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
7815 std::unique_ptr<HttpTransaction> trans( 7798 std::unique_ptr<HttpTransaction> trans(
7816 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 7799 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
7817 7800
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
7895 CreateMockRead(*wrapped_get_resp, 6, ASYNC), 7878 CreateMockRead(*wrapped_get_resp, 6, ASYNC),
7896 CreateMockRead(*wrapped_body, 7, ASYNC), 7879 CreateMockRead(*wrapped_body, 7, ASYNC),
7897 MockRead(ASYNC, OK, 8), // EOF. May or may not be read. 7880 MockRead(ASYNC, OK, 8), // EOF. May or may not be read.
7898 }; 7881 };
7899 7882
7900 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 7883 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
7901 arraysize(spdy_writes)); 7884 arraysize(spdy_writes));
7902 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 7885 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
7903 // Negotiate SPDY to the proxy 7886 // Negotiate SPDY to the proxy
7904 SSLSocketDataProvider proxy(ASYNC, OK); 7887 SSLSocketDataProvider proxy(ASYNC, OK);
7905 proxy.SetNextProto(GetProtocol()); 7888 proxy.SetNextProto(kProtoHTTP2);
7906 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); 7889 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy);
7907 // Vanilla SSL to the server 7890 // Vanilla SSL to the server
7908 SSLSocketDataProvider server(ASYNC, OK); 7891 SSLSocketDataProvider server(ASYNC, OK);
7909 session_deps_.socket_factory->AddSSLSocketDataProvider(&server); 7892 session_deps_.socket_factory->AddSSLSocketDataProvider(&server);
7910 7893
7911 TestCompletionCallback callback1; 7894 TestCompletionCallback callback1;
7912 7895
7913 std::unique_ptr<HttpTransaction> trans( 7896 std::unique_ptr<HttpTransaction> trans(
7914 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 7897 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
7915 7898
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
8016 CreateMockRead(*stream1_body, 3, ASYNC), 7999 CreateMockRead(*stream1_body, 3, ASYNC),
8017 CreateMockRead(*stream2_body, 4, ASYNC), 8000 CreateMockRead(*stream2_body, 4, ASYNC),
8018 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a hang 8001 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a hang
8019 }; 8002 };
8020 8003
8021 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 8004 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
8022 arraysize(spdy_writes)); 8005 arraysize(spdy_writes));
8023 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 8006 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
8024 // Negotiate SPDY to the proxy 8007 // Negotiate SPDY to the proxy
8025 SSLSocketDataProvider proxy(ASYNC, OK); 8008 SSLSocketDataProvider proxy(ASYNC, OK);
8026 proxy.SetNextProto(GetProtocol()); 8009 proxy.SetNextProto(kProtoHTTP2);
8027 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); 8010 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy);
8028 8011
8029 std::unique_ptr<HttpTransaction> trans( 8012 std::unique_ptr<HttpTransaction> trans(
8030 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 8013 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
8031 TestCompletionCallback callback; 8014 TestCompletionCallback callback;
8032 int rv = trans->Start(&request, callback.callback(), log.bound()); 8015 int rv = trans->Start(&request, callback.callback(), log.bound());
8033 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 8016 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
8034 8017
8035 rv = callback.WaitForResult(); 8018 rv = callback.WaitForResult();
8036 EXPECT_THAT(rv, IsOk()); 8019 EXPECT_THAT(rv, IsOk());
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
8127 CreateMockRead(*stream2_syn, 2, ASYNC), 8110 CreateMockRead(*stream2_syn, 2, ASYNC),
8128 CreateMockRead(*stream1_body, 4, ASYNC), 8111 CreateMockRead(*stream1_body, 4, ASYNC),
8129 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a hang 8112 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a hang
8130 }; 8113 };
8131 8114
8132 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 8115 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
8133 arraysize(spdy_writes)); 8116 arraysize(spdy_writes));
8134 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 8117 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
8135 // Negotiate SPDY to the proxy 8118 // Negotiate SPDY to the proxy
8136 SSLSocketDataProvider proxy(ASYNC, OK); 8119 SSLSocketDataProvider proxy(ASYNC, OK);
8137 proxy.SetNextProto(GetProtocol()); 8120 proxy.SetNextProto(kProtoHTTP2);
8138 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); 8121 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy);
8139 8122
8140 std::unique_ptr<HttpTransaction> trans( 8123 std::unique_ptr<HttpTransaction> trans(
8141 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 8124 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
8142 TestCompletionCallback callback; 8125 TestCompletionCallback callback;
8143 int rv = trans->Start(&request, callback.callback(), log.bound()); 8126 int rv = trans->Start(&request, callback.callback(), log.bound());
8144 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 8127 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
8145 8128
8146 rv = callback.WaitForResult(); 8129 rv = callback.WaitForResult();
8147 EXPECT_THAT(rv, IsOk()); 8130 EXPECT_THAT(rv, IsOk());
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
8213 CreateMockRead(*stream1_body, 3, ASYNC), 8196 CreateMockRead(*stream1_body, 3, ASYNC),
8214 CreateMockRead(*stream2_body, 4, ASYNC), 8197 CreateMockRead(*stream2_body, 4, ASYNC),
8215 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a hang 8198 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), // Force a hang
8216 }; 8199 };
8217 8200
8218 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 8201 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
8219 arraysize(spdy_writes)); 8202 arraysize(spdy_writes));
8220 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 8203 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
8221 // Negotiate SPDY to the proxy 8204 // Negotiate SPDY to the proxy
8222 SSLSocketDataProvider proxy(ASYNC, OK); 8205 SSLSocketDataProvider proxy(ASYNC, OK);
8223 proxy.SetNextProto(GetProtocol()); 8206 proxy.SetNextProto(kProtoHTTP2);
8224 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); 8207 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy);
8225 8208
8226 std::unique_ptr<HttpTransaction> trans( 8209 std::unique_ptr<HttpTransaction> trans(
8227 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 8210 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
8228 TestCompletionCallback callback; 8211 TestCompletionCallback callback;
8229 int rv = trans->Start(&request, callback.callback(), log.bound()); 8212 int rv = trans->Start(&request, callback.callback(), log.bound());
8230 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 8213 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
8231 8214
8232 rv = callback.WaitForResult(); 8215 rv = callback.WaitForResult();
8233 EXPECT_THAT(rv, IsOk()); 8216 EXPECT_THAT(rv, IsOk());
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after
9060 // Tests that for connection endpoints the group names are correctly set. 9043 // Tests that for connection endpoints the group names are correctly set.
9061 9044
9062 struct GroupNameTest { 9045 struct GroupNameTest {
9063 std::string proxy_server; 9046 std::string proxy_server;
9064 std::string url; 9047 std::string url;
9065 std::string expected_group_name; 9048 std::string expected_group_name;
9066 bool ssl; 9049 bool ssl;
9067 }; 9050 };
9068 9051
9069 std::unique_ptr<HttpNetworkSession> SetupSessionForGroupNameTests( 9052 std::unique_ptr<HttpNetworkSession> SetupSessionForGroupNameTests(
9070 NextProto next_proto,
9071 SpdySessionDependencies* session_deps_) { 9053 SpdySessionDependencies* session_deps_) {
9072 std::unique_ptr<HttpNetworkSession> session(CreateSession(session_deps_)); 9054 std::unique_ptr<HttpNetworkSession> session(CreateSession(session_deps_));
9073 9055
9074 HttpServerProperties* http_server_properties = 9056 HttpServerProperties* http_server_properties =
9075 session->http_server_properties(); 9057 session->http_server_properties();
9076 AlternativeService alternative_service( 9058 AlternativeService alternative_service(
9077 AlternateProtocolFromNextProto(next_proto), "", 444); 9059 AlternateProtocolFromNextProto(kProtoHTTP2), "", 444);
9078 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 9060 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
9079 http_server_properties->SetAlternativeService( 9061 http_server_properties->SetAlternativeService(
9080 url::SchemeHostPort("https", "host.with.alternate", 443), 9062 url::SchemeHostPort("https", "host.with.alternate", 443),
9081 alternative_service, expiration); 9063 alternative_service, expiration);
9082 9064
9083 return session; 9065 return session;
9084 } 9066 }
9085 9067
9086 int GroupNameTransactionHelper(const std::string& url, 9068 int GroupNameTransactionHelper(const std::string& url,
9087 HttpNetworkSession* session) { 9069 HttpNetworkSession* session) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
9134 "https://host.with.alternate/direct", 9116 "https://host.with.alternate/direct",
9135 "ssl/host.with.alternate:443", 9117 "ssl/host.with.alternate:443",
9136 true, 9118 true,
9137 }, 9119 },
9138 }; 9120 };
9139 9121
9140 for (size_t i = 0; i < arraysize(tests); ++i) { 9122 for (size_t i = 0; i < arraysize(tests); ++i) {
9141 session_deps_.proxy_service = 9123 session_deps_.proxy_service =
9142 ProxyService::CreateFixed(tests[i].proxy_server); 9124 ProxyService::CreateFixed(tests[i].proxy_server);
9143 std::unique_ptr<HttpNetworkSession> session( 9125 std::unique_ptr<HttpNetworkSession> session(
9144 SetupSessionForGroupNameTests(GetProtocol(), &session_deps_)); 9126 SetupSessionForGroupNameTests(&session_deps_));
9145 9127
9146 HttpNetworkSessionPeer peer(session.get()); 9128 HttpNetworkSessionPeer peer(session.get());
9147 CaptureGroupNameTransportSocketPool* transport_conn_pool = 9129 CaptureGroupNameTransportSocketPool* transport_conn_pool =
9148 new CaptureGroupNameTransportSocketPool(NULL, NULL); 9130 new CaptureGroupNameTransportSocketPool(NULL, NULL);
9149 CaptureGroupNameSSLSocketPool* ssl_conn_pool = 9131 CaptureGroupNameSSLSocketPool* ssl_conn_pool =
9150 new CaptureGroupNameSSLSocketPool(NULL, NULL); 9132 new CaptureGroupNameSSLSocketPool(NULL, NULL);
9151 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 9133 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
9152 new MockClientSocketPoolManager); 9134 new MockClientSocketPoolManager);
9153 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); 9135 mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
9154 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); 9136 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
9194 "ftp://ftp.google.com/http_proxy_normal", 9176 "ftp://ftp.google.com/http_proxy_normal",
9195 "ftp/ftp.google.com:21", 9177 "ftp/ftp.google.com:21",
9196 false, 9178 false,
9197 }, 9179 },
9198 }; 9180 };
9199 9181
9200 for (size_t i = 0; i < arraysize(tests); ++i) { 9182 for (size_t i = 0; i < arraysize(tests); ++i) {
9201 session_deps_.proxy_service = 9183 session_deps_.proxy_service =
9202 ProxyService::CreateFixed(tests[i].proxy_server); 9184 ProxyService::CreateFixed(tests[i].proxy_server);
9203 std::unique_ptr<HttpNetworkSession> session( 9185 std::unique_ptr<HttpNetworkSession> session(
9204 SetupSessionForGroupNameTests(GetProtocol(), &session_deps_)); 9186 SetupSessionForGroupNameTests(&session_deps_));
9205 9187
9206 HttpNetworkSessionPeer peer(session.get()); 9188 HttpNetworkSessionPeer peer(session.get());
9207 9189
9208 HostPortPair proxy_host("http_proxy", 80); 9190 HostPortPair proxy_host("http_proxy", 80);
9209 CaptureGroupNameHttpProxySocketPool* http_proxy_pool = 9191 CaptureGroupNameHttpProxySocketPool* http_proxy_pool =
9210 new CaptureGroupNameHttpProxySocketPool(NULL, NULL); 9192 new CaptureGroupNameHttpProxySocketPool(NULL, NULL);
9211 CaptureGroupNameSSLSocketPool* ssl_conn_pool = 9193 CaptureGroupNameSSLSocketPool* ssl_conn_pool =
9212 new CaptureGroupNameSSLSocketPool(NULL, NULL); 9194 new CaptureGroupNameSSLSocketPool(NULL, NULL);
9213 9195
9214 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 9196 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
9262 "https://host.with.alternate/direct", 9244 "https://host.with.alternate/direct",
9263 "socks4/ssl/host.with.alternate:443", 9245 "socks4/ssl/host.with.alternate:443",
9264 true, 9246 true,
9265 }, 9247 },
9266 }; 9248 };
9267 9249
9268 for (size_t i = 0; i < arraysize(tests); ++i) { 9250 for (size_t i = 0; i < arraysize(tests); ++i) {
9269 session_deps_.proxy_service = 9251 session_deps_.proxy_service =
9270 ProxyService::CreateFixed(tests[i].proxy_server); 9252 ProxyService::CreateFixed(tests[i].proxy_server);
9271 std::unique_ptr<HttpNetworkSession> session( 9253 std::unique_ptr<HttpNetworkSession> session(
9272 SetupSessionForGroupNameTests(GetProtocol(), &session_deps_)); 9254 SetupSessionForGroupNameTests(&session_deps_));
9273 9255
9274 HttpNetworkSessionPeer peer(session.get()); 9256 HttpNetworkSessionPeer peer(session.get());
9275 9257
9276 HostPortPair proxy_host("socks_proxy", 1080); 9258 HostPortPair proxy_host("socks_proxy", 1080);
9277 CaptureGroupNameSOCKSSocketPool* socks_conn_pool = 9259 CaptureGroupNameSOCKSSocketPool* socks_conn_pool =
9278 new CaptureGroupNameSOCKSSocketPool(NULL, NULL); 9260 new CaptureGroupNameSOCKSSocketPool(NULL, NULL);
9279 CaptureGroupNameSSLSocketPool* ssl_conn_pool = 9261 CaptureGroupNameSSLSocketPool* ssl_conn_pool =
9280 new CaptureGroupNameSSLSocketPool(NULL, NULL); 9262 new CaptureGroupNameSSLSocketPool(NULL, NULL);
9281 9263
9282 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 9264 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
(...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after
9911 AuthCredentials(kFirst, kBar), callback4.callback()); 9893 AuthCredentials(kFirst, kBar), callback4.callback());
9912 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 9894 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
9913 rv = callback4.WaitForResult(); 9895 rv = callback4.WaitForResult();
9914 EXPECT_THAT(rv, IsOk()); 9896 EXPECT_THAT(rv, IsOk());
9915 response = trans->GetResponseInfo(); 9897 response = trans->GetResponseInfo();
9916 ASSERT_TRUE(response); 9898 ASSERT_TRUE(response);
9917 EXPECT_FALSE(response->auth_challenge); 9899 EXPECT_FALSE(response->auth_challenge);
9918 } 9900 }
9919 9901
9920 TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { 9902 TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) {
9921 // SPDY/3.1 is not supported.
9922 if (GetProtocol() != kProtoHTTP2) {
9923 return;
9924 }
9925
9926 MockRead data_reads[] = { 9903 MockRead data_reads[] = {
9927 MockRead("HTTP/1.1 200 OK\r\n"), 9904 MockRead("HTTP/1.1 200 OK\r\n"),
9928 MockRead(kAlternativeServiceHttpHeader), 9905 MockRead(kAlternativeServiceHttpHeader),
9929 MockRead("\r\n"), 9906 MockRead("\r\n"),
9930 MockRead("hello world"), 9907 MockRead("hello world"),
9931 MockRead(SYNCHRONOUS, OK), 9908 MockRead(SYNCHRONOUS, OK),
9932 }; 9909 };
9933 9910
9934 HttpRequestInfo request; 9911 HttpRequestInfo request;
9935 request.method = "GET"; 9912 request.method = "GET";
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
9967 EXPECT_FALSE(response->was_fetched_via_spdy); 9944 EXPECT_FALSE(response->was_fetched_via_spdy);
9968 EXPECT_FALSE(response->was_npn_negotiated); 9945 EXPECT_FALSE(response->was_npn_negotiated);
9969 9946
9970 std::string response_data; 9947 std::string response_data;
9971 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); 9948 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk());
9972 EXPECT_EQ("hello world", response_data); 9949 EXPECT_EQ("hello world", response_data);
9973 9950
9974 alternative_service_vector = 9951 alternative_service_vector =
9975 http_server_properties->GetAlternativeServices(test_server); 9952 http_server_properties->GetAlternativeServices(test_server);
9976 ASSERT_EQ(1u, alternative_service_vector.size()); 9953 ASSERT_EQ(1u, alternative_service_vector.size());
9977 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), 9954 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoHTTP2),
9978 alternative_service_vector[0].protocol); 9955 alternative_service_vector[0].protocol);
9979 EXPECT_EQ("mail.example.org", alternative_service_vector[0].host); 9956 EXPECT_EQ("mail.example.org", alternative_service_vector[0].host);
9980 EXPECT_EQ(443, alternative_service_vector[0].port); 9957 EXPECT_EQ(443, alternative_service_vector[0].port);
9981 } 9958 }
9982 9959
9983 // Regression test for https://crbug.com/615497. 9960 // Regression test for https://crbug.com/615497.
9984 TEST_P(HttpNetworkTransactionTest, 9961 TEST_P(HttpNetworkTransactionTest,
9985 DoNotParseAlternativeServiceHeaderOnInsecureRequest) { 9962 DoNotParseAlternativeServiceHeaderOnInsecureRequest) {
9986 MockRead data_reads[] = { 9963 MockRead data_reads[] = {
9987 MockRead("HTTP/1.1 200 OK\r\n"), 9964 MockRead("HTTP/1.1 200 OK\r\n"),
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
10058 }; 10035 };
10059 StaticSocketDataProvider second_data(data_reads, arraysize(data_reads), NULL, 10036 StaticSocketDataProvider second_data(data_reads, arraysize(data_reads), NULL,
10060 0); 10037 0);
10061 session_deps_.socket_factory->AddSocketDataProvider(&second_data); 10038 session_deps_.socket_factory->AddSocketDataProvider(&second_data);
10062 10039
10063 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 10040 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
10064 10041
10065 HttpServerProperties* http_server_properties = 10042 HttpServerProperties* http_server_properties =
10066 session->http_server_properties(); 10043 session->http_server_properties();
10067 AlternativeService alternative_service( 10044 AlternativeService alternative_service(
10068 AlternateProtocolFromNextProto(GetProtocol()), "different.example.org", 10045 AlternateProtocolFromNextProto(kProtoHTTP2), "different.example.org",
10069 444); 10046 444);
10070 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 10047 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
10071 http_server_properties->SetAlternativeService( 10048 http_server_properties->SetAlternativeService(
10072 url::SchemeHostPort(request.url), alternative_service, expiration); 10049 url::SchemeHostPort(request.url), alternative_service, expiration);
10073 10050
10074 std::unique_ptr<HttpTransaction> trans( 10051 std::unique_ptr<HttpTransaction> trans(
10075 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 10052 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
10076 TestCompletionCallback callback; 10053 TestCompletionCallback callback;
10077 10054
10078 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); 10055 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
(...skipping 21 matching lines...) Expand all
10100 }; 10077 };
10101 StaticSocketDataProvider second_data(data_reads, arraysize(data_reads), NULL, 10078 StaticSocketDataProvider second_data(data_reads, arraysize(data_reads), NULL,
10102 0); 10079 0);
10103 session_deps_.socket_factory->AddSocketDataProvider(&second_data); 10080 session_deps_.socket_factory->AddSocketDataProvider(&second_data);
10104 10081
10105 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 10082 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
10106 10083
10107 HttpServerProperties* http_server_properties = 10084 HttpServerProperties* http_server_properties =
10108 session->http_server_properties(); 10085 session->http_server_properties();
10109 AlternativeService alternative_service( 10086 AlternativeService alternative_service(
10110 AlternateProtocolFromNextProto(GetProtocol()), "", 444); 10087 AlternateProtocolFromNextProto(kProtoHTTP2), "", 444);
10111 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 10088 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
10112 http_server_properties->SetAlternativeService( 10089 http_server_properties->SetAlternativeService(
10113 url::SchemeHostPort(request.url), alternative_service, expiration); 10090 url::SchemeHostPort(request.url), alternative_service, expiration);
10114 10091
10115 std::unique_ptr<HttpTransaction> trans( 10092 std::unique_ptr<HttpTransaction> trans(
10116 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 10093 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
10117 TestCompletionCallback callback; 10094 TestCompletionCallback callback;
10118 10095
10119 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); 10096 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
10120 // Alternative service is not used, request fails. 10097 // Alternative service is not used, request fails.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
10172 std::string response_data; 10149 std::string response_data;
10173 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); 10150 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk());
10174 EXPECT_EQ("hello world", response_data); 10151 EXPECT_EQ("hello world", response_data);
10175 10152
10176 alternative_service_vector = 10153 alternative_service_vector =
10177 http_server_properties->GetAlternativeServices(test_server); 10154 http_server_properties->GetAlternativeServices(test_server);
10178 EXPECT_TRUE(alternative_service_vector.empty()); 10155 EXPECT_TRUE(alternative_service_vector.empty());
10179 } 10156 }
10180 10157
10181 TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) { 10158 TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) {
10182 // SPDY/3.1 is not supported.
10183 if (GetProtocol() != kProtoHTTP2) {
10184 return;
10185 }
10186
10187 MockRead data_reads[] = { 10159 MockRead data_reads[] = {
10188 MockRead("HTTP/1.1 200 OK\r\n"), 10160 MockRead("HTTP/1.1 200 OK\r\n"),
10189 MockRead("Alt-Svc: h2=\"www.example.com:443\","), 10161 MockRead("Alt-Svc: h2=\"www.example.com:443\","),
10190 MockRead("h2=\":1234\"\r\n\r\n"), 10162 MockRead("h2=\":1234\"\r\n\r\n"),
10191 MockRead("hello world"), 10163 MockRead("hello world"),
10192 MockRead(SYNCHRONOUS, OK), 10164 MockRead(SYNCHRONOUS, OK),
10193 }; 10165 };
10194 10166
10195 HttpRequestInfo request; 10167 HttpRequestInfo request;
10196 request.method = "GET"; 10168 request.method = "GET";
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
10228 EXPECT_FALSE(response->was_fetched_via_spdy); 10200 EXPECT_FALSE(response->was_fetched_via_spdy);
10229 EXPECT_FALSE(response->was_npn_negotiated); 10201 EXPECT_FALSE(response->was_npn_negotiated);
10230 10202
10231 std::string response_data; 10203 std::string response_data;
10232 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); 10204 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk());
10233 EXPECT_EQ("hello world", response_data); 10205 EXPECT_EQ("hello world", response_data);
10234 10206
10235 alternative_service_vector = 10207 alternative_service_vector =
10236 http_server_properties->GetAlternativeServices(test_server); 10208 http_server_properties->GetAlternativeServices(test_server);
10237 ASSERT_EQ(2u, alternative_service_vector.size()); 10209 ASSERT_EQ(2u, alternative_service_vector.size());
10238 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), 10210 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoHTTP2),
10239 alternative_service_vector[0].protocol); 10211 alternative_service_vector[0].protocol);
10240 EXPECT_EQ("www.example.com", alternative_service_vector[0].host); 10212 EXPECT_EQ("www.example.com", alternative_service_vector[0].host);
10241 EXPECT_EQ(443, alternative_service_vector[0].port); 10213 EXPECT_EQ(443, alternative_service_vector[0].port);
10242 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), 10214 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoHTTP2),
10243 alternative_service_vector[1].protocol); 10215 alternative_service_vector[1].protocol);
10244 EXPECT_EQ("www.example.org", alternative_service_vector[1].host); 10216 EXPECT_EQ("www.example.org", alternative_service_vector[1].host);
10245 EXPECT_EQ(1234, alternative_service_vector[1].port); 10217 EXPECT_EQ(1234, alternative_service_vector[1].port);
10246 } 10218 }
10247 10219
10248 TEST_P(HttpNetworkTransactionTest, IdentifyQuicBroken) { 10220 TEST_P(HttpNetworkTransactionTest, IdentifyQuicBroken) {
10249 url::SchemeHostPort server("https", "origin.example.org", 443); 10221 url::SchemeHostPort server("https", "origin.example.org", 443);
10250 HostPortPair alternative("alternative.example.org", 443); 10222 HostPortPair alternative("alternative.example.org", 443);
10251 std::string origin_url = "https://origin.example.org:443"; 10223 std::string origin_url = "https://origin.example.org:443";
10252 std::string alternative_url = "https://alternative.example.org:443"; 10224 std::string alternative_url = "https://alternative.example.org:443";
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
10403 session_deps_.socket_factory->AddSocketDataProvider(&second_data); 10375 session_deps_.socket_factory->AddSocketDataProvider(&second_data);
10404 10376
10405 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 10377 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
10406 10378
10407 HttpServerProperties* http_server_properties = 10379 HttpServerProperties* http_server_properties =
10408 session->http_server_properties(); 10380 session->http_server_properties();
10409 const url::SchemeHostPort server(request.url); 10381 const url::SchemeHostPort server(request.url);
10410 // Port must be < 1024, or the header will be ignored (since initial port was 10382 // Port must be < 1024, or the header will be ignored (since initial port was
10411 // port 80 (another restricted port). 10383 // port 80 (another restricted port).
10412 const AlternativeService alternative_service( 10384 const AlternativeService alternative_service(
10413 AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", 10385 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org",
10414 666); // Port is ignored by MockConnect anyway. 10386 666); // Port is ignored by MockConnect anyway.
10415 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 10387 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
10416 http_server_properties->SetAlternativeService(server, alternative_service, 10388 http_server_properties->SetAlternativeService(server, alternative_service,
10417 expiration); 10389 expiration);
10418 10390
10419 std::unique_ptr<HttpTransaction> trans( 10391 std::unique_ptr<HttpTransaction> trans(
10420 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 10392 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
10421 TestCompletionCallback callback; 10393 TestCompletionCallback callback;
10422 10394
10423 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); 10395 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
10468 SSLSocketDataProvider ssl_http11(ASYNC, OK); 10440 SSLSocketDataProvider ssl_http11(ASYNC, OK);
10469 ssl_http11.SetNextProto(kProtoHTTP11); 10441 ssl_http11.SetNextProto(kProtoHTTP11);
10470 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); 10442 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11);
10471 10443
10472 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 10444 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
10473 10445
10474 HttpServerProperties* http_server_properties = 10446 HttpServerProperties* http_server_properties =
10475 session->http_server_properties(); 10447 session->http_server_properties();
10476 const int kUnrestrictedAlternatePort = 1024; 10448 const int kUnrestrictedAlternatePort = 1024;
10477 AlternativeService alternative_service( 10449 AlternativeService alternative_service(
10478 AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", 10450 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org",
10479 kUnrestrictedAlternatePort); 10451 kUnrestrictedAlternatePort);
10480 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 10452 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
10481 http_server_properties->SetAlternativeService( 10453 http_server_properties->SetAlternativeService(
10482 url::SchemeHostPort(restricted_port_request.url), alternative_service, 10454 url::SchemeHostPort(restricted_port_request.url), alternative_service,
10483 expiration); 10455 expiration);
10484 10456
10485 std::unique_ptr<HttpTransaction> trans( 10457 std::unique_ptr<HttpTransaction> trans(
10486 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 10458 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
10487 TestCompletionCallback callback; 10459 TestCompletionCallback callback;
10488 10460
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
10522 SSLSocketDataProvider ssl_http11(ASYNC, OK); 10494 SSLSocketDataProvider ssl_http11(ASYNC, OK);
10523 ssl_http11.SetNextProto(kProtoHTTP11); 10495 ssl_http11.SetNextProto(kProtoHTTP11);
10524 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); 10496 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11);
10525 10497
10526 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 10498 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
10527 10499
10528 HttpServerProperties* http_server_properties = 10500 HttpServerProperties* http_server_properties =
10529 session->http_server_properties(); 10501 session->http_server_properties();
10530 const int kUnrestrictedAlternatePort = 1024; 10502 const int kUnrestrictedAlternatePort = 1024;
10531 AlternativeService alternative_service( 10503 AlternativeService alternative_service(
10532 AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", 10504 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org",
10533 kUnrestrictedAlternatePort); 10505 kUnrestrictedAlternatePort);
10534 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 10506 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
10535 http_server_properties->SetAlternativeService( 10507 http_server_properties->SetAlternativeService(
10536 url::SchemeHostPort(restricted_port_request.url), alternative_service, 10508 url::SchemeHostPort(restricted_port_request.url), alternative_service,
10537 expiration); 10509 expiration);
10538 10510
10539 std::unique_ptr<HttpTransaction> trans( 10511 std::unique_ptr<HttpTransaction> trans(
10540 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 10512 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
10541 TestCompletionCallback callback; 10513 TestCompletionCallback callback;
10542 10514
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
10574 10546
10575 SSLSocketDataProvider ssl(ASYNC, OK); 10547 SSLSocketDataProvider ssl(ASYNC, OK);
10576 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 10548 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
10577 10549
10578 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 10550 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
10579 10551
10580 HttpServerProperties* http_server_properties = 10552 HttpServerProperties* http_server_properties =
10581 session->http_server_properties(); 10553 session->http_server_properties();
10582 const int kRestrictedAlternatePort = 80; 10554 const int kRestrictedAlternatePort = 80;
10583 AlternativeService alternative_service( 10555 AlternativeService alternative_service(
10584 AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", 10556 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org",
10585 kRestrictedAlternatePort); 10557 kRestrictedAlternatePort);
10586 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 10558 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
10587 http_server_properties->SetAlternativeService( 10559 http_server_properties->SetAlternativeService(
10588 url::SchemeHostPort(restricted_port_request.url), alternative_service, 10560 url::SchemeHostPort(restricted_port_request.url), alternative_service,
10589 expiration); 10561 expiration);
10590 10562
10591 std::unique_ptr<HttpTransaction> trans( 10563 std::unique_ptr<HttpTransaction> trans(
10592 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 10564 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
10593 TestCompletionCallback callback; 10565 TestCompletionCallback callback;
10594 10566
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
10627 SSLSocketDataProvider ssl_http11(ASYNC, OK); 10599 SSLSocketDataProvider ssl_http11(ASYNC, OK);
10628 ssl_http11.SetNextProto(kProtoHTTP11); 10600 ssl_http11.SetNextProto(kProtoHTTP11);
10629 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); 10601 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11);
10630 10602
10631 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 10603 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
10632 10604
10633 HttpServerProperties* http_server_properties = 10605 HttpServerProperties* http_server_properties =
10634 session->http_server_properties(); 10606 session->http_server_properties();
10635 const int kRestrictedAlternatePort = 80; 10607 const int kRestrictedAlternatePort = 80;
10636 AlternativeService alternative_service( 10608 AlternativeService alternative_service(
10637 AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", 10609 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org",
10638 kRestrictedAlternatePort); 10610 kRestrictedAlternatePort);
10639 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 10611 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
10640 http_server_properties->SetAlternativeService( 10612 http_server_properties->SetAlternativeService(
10641 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, 10613 url::SchemeHostPort(unrestricted_port_request.url), alternative_service,
10642 expiration); 10614 expiration);
10643 10615
10644 std::unique_ptr<HttpTransaction> trans( 10616 std::unique_ptr<HttpTransaction> trans(
10645 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 10617 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
10646 TestCompletionCallback callback; 10618 TestCompletionCallback callback;
10647 10619
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
10679 10651
10680 SSLSocketDataProvider ssl(ASYNC, OK); 10652 SSLSocketDataProvider ssl(ASYNC, OK);
10681 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 10653 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
10682 10654
10683 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 10655 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
10684 10656
10685 HttpServerProperties* http_server_properties = 10657 HttpServerProperties* http_server_properties =
10686 session->http_server_properties(); 10658 session->http_server_properties();
10687 const int kUnrestrictedAlternatePort = 1025; 10659 const int kUnrestrictedAlternatePort = 1025;
10688 AlternativeService alternative_service( 10660 AlternativeService alternative_service(
10689 AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", 10661 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org",
10690 kUnrestrictedAlternatePort); 10662 kUnrestrictedAlternatePort);
10691 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 10663 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
10692 http_server_properties->SetAlternativeService( 10664 http_server_properties->SetAlternativeService(
10693 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, 10665 url::SchemeHostPort(unrestricted_port_request.url), alternative_service,
10694 expiration); 10666 expiration);
10695 10667
10696 std::unique_ptr<HttpTransaction> trans( 10668 std::unique_ptr<HttpTransaction> trans(
10697 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 10669 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
10698 TestCompletionCallback callback; 10670 TestCompletionCallback callback;
10699 10671
(...skipping 23 matching lines...) Expand all
10723 StaticSocketDataProvider data( 10695 StaticSocketDataProvider data(
10724 data_reads, arraysize(data_reads), NULL, 0); 10696 data_reads, arraysize(data_reads), NULL, 0);
10725 session_deps_.socket_factory->AddSocketDataProvider(&data); 10697 session_deps_.socket_factory->AddSocketDataProvider(&data);
10726 10698
10727 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 10699 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
10728 10700
10729 HttpServerProperties* http_server_properties = 10701 HttpServerProperties* http_server_properties =
10730 session->http_server_properties(); 10702 session->http_server_properties();
10731 const int kUnsafePort = 7; 10703 const int kUnsafePort = 7;
10732 AlternativeService alternative_service( 10704 AlternativeService alternative_service(
10733 AlternateProtocolFromNextProto(GetProtocol()), "www.example.org", 10705 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org",
10734 kUnsafePort); 10706 kUnsafePort);
10735 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 10707 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
10736 http_server_properties->SetAlternativeService( 10708 http_server_properties->SetAlternativeService(
10737 url::SchemeHostPort(request.url), alternative_service, expiration); 10709 url::SchemeHostPort(request.url), alternative_service, expiration);
10738 10710
10739 std::unique_ptr<HttpTransaction> trans( 10711 std::unique_ptr<HttpTransaction> trans(
10740 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 10712 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
10741 TestCompletionCallback callback; 10713 TestCompletionCallback callback;
10742 10714
10743 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); 10715 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
(...skipping 26 matching lines...) Expand all
10770 MockRead(ASYNC, OK)}; 10742 MockRead(ASYNC, OK)};
10771 10743
10772 StaticSocketDataProvider first_transaction( 10744 StaticSocketDataProvider first_transaction(
10773 data_reads, arraysize(data_reads), NULL, 0); 10745 data_reads, arraysize(data_reads), NULL, 0);
10774 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); 10746 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction);
10775 SSLSocketDataProvider ssl_http11(ASYNC, OK); 10747 SSLSocketDataProvider ssl_http11(ASYNC, OK);
10776 ssl_http11.SetNextProto(kProtoHTTP11); 10748 ssl_http11.SetNextProto(kProtoHTTP11);
10777 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); 10749 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11);
10778 10750
10779 SSLSocketDataProvider ssl_http2(ASYNC, OK); 10751 SSLSocketDataProvider ssl_http2(ASYNC, OK);
10780 ssl_http2.SetNextProto(GetProtocol()); 10752 ssl_http2.SetNextProto(kProtoHTTP2);
10781 ssl_http2.cert = 10753 ssl_http2.cert =
10782 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 10754 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
10783 ASSERT_TRUE(ssl_http2.cert.get()); 10755 ASSERT_TRUE(ssl_http2.cert.get());
10784 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2); 10756 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2);
10785 10757
10786 std::unique_ptr<SpdySerializedFrame> req( 10758 std::unique_ptr<SpdySerializedFrame> req(
10787 spdy_util_.ConstructSpdyGet("https://www.example.org/", 1, LOWEST)); 10759 spdy_util_.ConstructSpdyGet("https://www.example.org/", 1, LOWEST));
10788 MockWrite spdy_writes[] = {CreateMockWrite(*req, 0)}; 10760 MockWrite spdy_writes[] = {CreateMockWrite(*req, 0)};
10789 10761
10790 std::unique_ptr<SpdySerializedFrame> resp( 10762 std::unique_ptr<SpdySerializedFrame> resp(
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
10837 ASSERT_TRUE(response->headers); 10809 ASSERT_TRUE(response->headers);
10838 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); 10810 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine());
10839 EXPECT_TRUE(response->was_fetched_via_spdy); 10811 EXPECT_TRUE(response->was_fetched_via_spdy);
10840 EXPECT_TRUE(response->was_npn_negotiated); 10812 EXPECT_TRUE(response->was_npn_negotiated);
10841 10813
10842 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk()); 10814 ASSERT_THAT(ReadTransaction(trans.get(), &response_data), IsOk());
10843 EXPECT_EQ("hello!", response_data); 10815 EXPECT_EQ("hello!", response_data);
10844 } 10816 }
10845 10817
10846 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { 10818 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) {
10847 // SPDY/3.1 is not supported.
10848 if (GetProtocol() != kProtoHTTP2) {
10849 return;
10850 }
10851
10852 HttpRequestInfo request; 10819 HttpRequestInfo request;
10853 request.method = "GET"; 10820 request.method = "GET";
10854 request.url = GURL("https://www.example.org/"); 10821 request.url = GURL("https://www.example.org/");
10855 request.load_flags = 0; 10822 request.load_flags = 0;
10856 10823
10857 // First transaction receives Alt-Svc header over HTTP/1.1. 10824 // First transaction receives Alt-Svc header over HTTP/1.1.
10858 MockRead data_reads[] = { 10825 MockRead data_reads[] = {
10859 MockRead("HTTP/1.1 200 OK\r\n"), 10826 MockRead("HTTP/1.1 200 OK\r\n"),
10860 MockRead(kAlternativeServiceHttpHeader), 10827 MockRead(kAlternativeServiceHttpHeader),
10861 MockRead("\r\n"), 10828 MockRead("\r\n"),
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
10906 CreateMockRead(*resp2, 4), 10873 CreateMockRead(*resp2, 4),
10907 CreateMockRead(*data2, 5), 10874 CreateMockRead(*data2, 5),
10908 MockRead(ASYNC, 0, 6), 10875 MockRead(ASYNC, 0, 6),
10909 }; 10876 };
10910 10877
10911 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 10878 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
10912 arraysize(spdy_writes)); 10879 arraysize(spdy_writes));
10913 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 10880 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
10914 10881
10915 SSLSocketDataProvider ssl_http2(ASYNC, OK); 10882 SSLSocketDataProvider ssl_http2(ASYNC, OK);
10916 ssl_http2.SetNextProto(GetProtocol()); 10883 ssl_http2.SetNextProto(kProtoHTTP2);
10917 ssl_http2.cert = 10884 ssl_http2.cert =
10918 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 10885 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
10919 ASSERT_TRUE(ssl_http2.cert); 10886 ASSERT_TRUE(ssl_http2.cert);
10920 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2); 10887 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2);
10921 10888
10922 StaticSocketDataProvider hanging_socket3(NULL, 0, NULL, 0); 10889 StaticSocketDataProvider hanging_socket3(NULL, 0, NULL, 0);
10923 hanging_socket3.set_connect_data(never_finishing_connect); 10890 hanging_socket3.set_connect_data(never_finishing_connect);
10924 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket3); 10891 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket3);
10925 10892
10926 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 10893 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
10966 ASSERT_TRUE(response); 10933 ASSERT_TRUE(response);
10967 ASSERT_TRUE(response->headers); 10934 ASSERT_TRUE(response->headers);
10968 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); 10935 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine());
10969 EXPECT_TRUE(response->was_fetched_via_spdy); 10936 EXPECT_TRUE(response->was_fetched_via_spdy);
10970 EXPECT_TRUE(response->was_npn_negotiated); 10937 EXPECT_TRUE(response->was_npn_negotiated);
10971 ASSERT_THAT(ReadTransaction(&trans3, &response_data), IsOk()); 10938 ASSERT_THAT(ReadTransaction(&trans3, &response_data), IsOk());
10972 EXPECT_EQ("hello!", response_data); 10939 EXPECT_EQ("hello!", response_data);
10973 } 10940 }
10974 10941
10975 TEST_P(HttpNetworkTransactionTest, StallAlternativeServiceForNpnSpdy) { 10942 TEST_P(HttpNetworkTransactionTest, StallAlternativeServiceForNpnSpdy) {
10976 // SPDY/3.1 is not supported.
10977 if (GetProtocol() != kProtoHTTP2) {
10978 return;
10979 }
10980
10981 HttpRequestInfo request; 10943 HttpRequestInfo request;
10982 request.method = "GET"; 10944 request.method = "GET";
10983 request.url = GURL("https://www.example.org/"); 10945 request.url = GURL("https://www.example.org/");
10984 request.load_flags = 0; 10946 request.load_flags = 0;
10985 10947
10986 MockRead data_reads[] = { 10948 MockRead data_reads[] = {
10987 MockRead("HTTP/1.1 200 OK\r\n"), 10949 MockRead("HTTP/1.1 200 OK\r\n"),
10988 MockRead(kAlternativeServiceHttpHeader), 10950 MockRead(kAlternativeServiceHttpHeader),
10989 MockRead("\r\n"), 10951 MockRead("\r\n"),
10990 MockRead("hello world"), 10952 MockRead("hello world"),
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
11128 }; 11090 };
11129 11091
11130 StaticSocketDataProvider first_transaction( 11092 StaticSocketDataProvider first_transaction(
11131 data_reads, arraysize(data_reads), NULL, 0); 11093 data_reads, arraysize(data_reads), NULL, 0);
11132 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); 11094 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction);
11133 SSLSocketDataProvider ssl_http11(ASYNC, OK); 11095 SSLSocketDataProvider ssl_http11(ASYNC, OK);
11134 ssl_http11.SetNextProto(kProtoHTTP11); 11096 ssl_http11.SetNextProto(kProtoHTTP11);
11135 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); 11097 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11);
11136 11098
11137 SSLSocketDataProvider ssl_http2(ASYNC, OK); 11099 SSLSocketDataProvider ssl_http2(ASYNC, OK);
11138 ssl_http2.SetNextProto(GetProtocol()); 11100 ssl_http2.SetNextProto(kProtoHTTP2);
11139 ssl_http2.cert = 11101 ssl_http2.cert =
11140 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 11102 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
11141 ASSERT_TRUE(ssl_http2.cert); 11103 ASSERT_TRUE(ssl_http2.cert);
11142 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2); 11104 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2);
11143 11105
11144 std::unique_ptr<SpdySerializedFrame> req( 11106 std::unique_ptr<SpdySerializedFrame> req(
11145 spdy_util_.ConstructSpdyGet("https://www.example.org/", 1, LOWEST)); 11107 spdy_util_.ConstructSpdyGet("https://www.example.org/", 1, LOWEST));
11146 MockWrite spdy_writes[] = { 11108 MockWrite spdy_writes[] = {
11147 MockWrite(ASYNC, 0, 11109 MockWrite(ASYNC, 0,
11148 "CONNECT www.example.org:443 HTTP/1.1\r\n" 11110 "CONNECT www.example.org:443 HTTP/1.1\r\n"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
11238 }; 11200 };
11239 11201
11240 StaticSocketDataProvider first_transaction( 11202 StaticSocketDataProvider first_transaction(
11241 data_reads, arraysize(data_reads), NULL, 0); 11203 data_reads, arraysize(data_reads), NULL, 0);
11242 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); 11204 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction);
11243 SSLSocketDataProvider ssl_http11(ASYNC, OK); 11205 SSLSocketDataProvider ssl_http11(ASYNC, OK);
11244 ssl_http11.SetNextProto(kProtoHTTP11); 11206 ssl_http11.SetNextProto(kProtoHTTP11);
11245 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); 11207 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11);
11246 11208
11247 SSLSocketDataProvider ssl_http2(ASYNC, OK); 11209 SSLSocketDataProvider ssl_http2(ASYNC, OK);
11248 ssl_http2.SetNextProto(GetProtocol()); 11210 ssl_http2.SetNextProto(kProtoHTTP2);
11249 ssl_http2.cert = 11211 ssl_http2.cert =
11250 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 11212 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
11251 ASSERT_TRUE(ssl_http2.cert); 11213 ASSERT_TRUE(ssl_http2.cert);
11252 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2); 11214 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2);
11253 11215
11254 std::unique_ptr<SpdySerializedFrame> req( 11216 std::unique_ptr<SpdySerializedFrame> req(
11255 spdy_util_.ConstructSpdyGet("https://www.example.org/", 1, LOWEST)); 11217 spdy_util_.ConstructSpdyGet("https://www.example.org/", 1, LOWEST));
11256 MockWrite spdy_writes[] = {CreateMockWrite(*req, 0)}; 11218 MockWrite spdy_writes[] = {CreateMockWrite(*req, 0)};
11257 11219
11258 std::unique_ptr<SpdySerializedFrame> resp( 11220 std::unique_ptr<SpdySerializedFrame> resp(
(...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after
11981 // Simulate the SSL handshake completing with an NPN negotiation followed by an 11943 // Simulate the SSL handshake completing with an NPN negotiation followed by an
11982 // immediate server closing of the socket. 11944 // immediate server closing of the socket.
11983 // Regression test for https://crbug.com/46369. 11945 // Regression test for https://crbug.com/46369.
11984 TEST_P(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { 11946 TEST_P(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) {
11985 HttpRequestInfo request; 11947 HttpRequestInfo request;
11986 request.method = "GET"; 11948 request.method = "GET";
11987 request.url = GURL("https://www.example.org/"); 11949 request.url = GURL("https://www.example.org/");
11988 request.load_flags = 0; 11950 request.load_flags = 0;
11989 11951
11990 SSLSocketDataProvider ssl(ASYNC, OK); 11952 SSLSocketDataProvider ssl(ASYNC, OK);
11991 ssl.SetNextProto(GetProtocol()); 11953 ssl.SetNextProto(kProtoHTTP2);
11992 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 11954 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
11993 11955
11994 std::unique_ptr<SpdySerializedFrame> req( 11956 std::unique_ptr<SpdySerializedFrame> req(
11995 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 11957 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
11996 MockWrite spdy_writes[] = {CreateMockWrite(*req, 1)}; 11958 MockWrite spdy_writes[] = {CreateMockWrite(*req, 1)};
11997 11959
11998 MockRead spdy_reads[] = { 11960 MockRead spdy_reads[] = {
11999 MockRead(SYNCHRONOUS, 0, 0) // Not async - return 0 immediately. 11961 MockRead(SYNCHRONOUS, 0, 0) // Not async - return 0 immediately.
12000 }; 11962 };
12001 11963
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
12416 spdy_util_.ConstructSpdyBodyFrame(1, true)); 12378 spdy_util_.ConstructSpdyBodyFrame(1, true));
12417 MockRead spdy_reads[] = { 12379 MockRead spdy_reads[] = {
12418 CreateMockRead(*resp, 1), CreateMockRead(*data, 2), MockRead(ASYNC, 0, 3), 12380 CreateMockRead(*resp, 1), CreateMockRead(*data, 2), MockRead(ASYNC, 0, 3),
12419 }; 12381 };
12420 12382
12421 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, 12383 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes,
12422 arraysize(spdy_writes)); 12384 arraysize(spdy_writes));
12423 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); 12385 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data);
12424 12386
12425 SSLSocketDataProvider ssl(ASYNC, OK); 12387 SSLSocketDataProvider ssl(ASYNC, OK);
12426 ssl.SetNextProto(GetProtocol()); 12388 ssl.SetNextProto(kProtoHTTP2);
12427 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 12389 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
12428 12390
12429 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 12391 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
12430 12392
12431 // Set up an initial SpdySession in the pool to reuse. 12393 // Set up an initial SpdySession in the pool to reuse.
12432 HostPortPair host_port_pair("www.example.org", 443); 12394 HostPortPair host_port_pair("www.example.org", 443);
12433 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), 12395 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
12434 PRIVACY_MODE_DISABLED); 12396 PRIVACY_MODE_DISABLED);
12435 base::WeakPtr<SpdySession> spdy_session = 12397 base::WeakPtr<SpdySession> spdy_session =
12436 CreateInsecureSpdySession(session.get(), key, BoundNetLog()); 12398 CreateInsecureSpdySession(session.get(), key, BoundNetLog());
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
12818 } 12780 }
12819 12781
12820 TEST_P(HttpNetworkTransactionTest, UseIPConnectionPooling) { 12782 TEST_P(HttpNetworkTransactionTest, UseIPConnectionPooling) {
12821 // Set up a special HttpNetworkSession with a MockCachingHostResolver. 12783 // Set up a special HttpNetworkSession with a MockCachingHostResolver.
12822 session_deps_.host_resolver.reset(new MockCachingHostResolver()); 12784 session_deps_.host_resolver.reset(new MockCachingHostResolver());
12823 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 12785 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
12824 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); 12786 SpdySessionPoolPeer pool_peer(session->spdy_session_pool());
12825 pool_peer.DisableDomainAuthenticationVerification(); 12787 pool_peer.DisableDomainAuthenticationVerification();
12826 12788
12827 SSLSocketDataProvider ssl(ASYNC, OK); 12789 SSLSocketDataProvider ssl(ASYNC, OK);
12828 ssl.SetNextProto(GetProtocol()); 12790 ssl.SetNextProto(kProtoHTTP2);
12829 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 12791 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
12830 12792
12831 std::unique_ptr<SpdySerializedFrame> host1_req( 12793 std::unique_ptr<SpdySerializedFrame> host1_req(
12832 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); 12794 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST));
12833 spdy_util_.UpdateWithStreamDestruction(1); 12795 spdy_util_.UpdateWithStreamDestruction(1);
12834 std::unique_ptr<SpdySerializedFrame> host2_req( 12796 std::unique_ptr<SpdySerializedFrame> host2_req(
12835 spdy_util_.ConstructSpdyGet("https://www.gmail.com", 3, LOWEST)); 12797 spdy_util_.ConstructSpdyGet("https://www.gmail.com", 3, LOWEST));
12836 MockWrite spdy_writes[] = { 12798 MockWrite spdy_writes[] = {
12837 CreateMockWrite(*host1_req, 0), CreateMockWrite(*host2_req, 3), 12799 CreateMockWrite(*host1_req, 0), CreateMockWrite(*host2_req, 3),
12838 }; 12800 };
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
12913 } 12875 }
12914 12876
12915 TEST_P(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) { 12877 TEST_P(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) {
12916 // Set up a special HttpNetworkSession with a MockCachingHostResolver. 12878 // Set up a special HttpNetworkSession with a MockCachingHostResolver.
12917 session_deps_.host_resolver.reset(new MockCachingHostResolver()); 12879 session_deps_.host_resolver.reset(new MockCachingHostResolver());
12918 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 12880 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
12919 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); 12881 SpdySessionPoolPeer pool_peer(session->spdy_session_pool());
12920 pool_peer.DisableDomainAuthenticationVerification(); 12882 pool_peer.DisableDomainAuthenticationVerification();
12921 12883
12922 SSLSocketDataProvider ssl(ASYNC, OK); 12884 SSLSocketDataProvider ssl(ASYNC, OK);
12923 ssl.SetNextProto(GetProtocol()); 12885 ssl.SetNextProto(kProtoHTTP2);
12924 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 12886 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
12925 12887
12926 std::unique_ptr<SpdySerializedFrame> host1_req( 12888 std::unique_ptr<SpdySerializedFrame> host1_req(
12927 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); 12889 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST));
12928 spdy_util_.UpdateWithStreamDestruction(1); 12890 spdy_util_.UpdateWithStreamDestruction(1);
12929 std::unique_ptr<SpdySerializedFrame> host2_req( 12891 std::unique_ptr<SpdySerializedFrame> host2_req(
12930 spdy_util_.ConstructSpdyGet("https://www.gmail.com", 3, LOWEST)); 12892 spdy_util_.ConstructSpdyGet("https://www.gmail.com", 3, LOWEST));
12931 MockWrite spdy_writes[] = { 12893 MockWrite spdy_writes[] = {
12932 CreateMockWrite(*host1_req, 0), CreateMockWrite(*host2_req, 3), 12894 CreateMockWrite(*host1_req, 0), CreateMockWrite(*host2_req, 3),
12933 }; 12895 };
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
13039 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. 13001 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver.
13040 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443)); 13002 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443));
13041 HttpNetworkSession::Params params = 13003 HttpNetworkSession::Params params =
13042 SpdySessionDependencies::CreateSessionParams(&session_deps_); 13004 SpdySessionDependencies::CreateSessionParams(&session_deps_);
13043 params.host_resolver = &host_resolver; 13005 params.host_resolver = &host_resolver;
13044 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 13006 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
13045 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); 13007 SpdySessionPoolPeer pool_peer(session->spdy_session_pool());
13046 pool_peer.DisableDomainAuthenticationVerification(); 13008 pool_peer.DisableDomainAuthenticationVerification();
13047 13009
13048 SSLSocketDataProvider ssl(ASYNC, OK); 13010 SSLSocketDataProvider ssl(ASYNC, OK);
13049 ssl.SetNextProto(GetProtocol()); 13011 ssl.SetNextProto(kProtoHTTP2);
13050 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 13012 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
13051 13013
13052 std::unique_ptr<SpdySerializedFrame> host1_req( 13014 std::unique_ptr<SpdySerializedFrame> host1_req(
13053 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); 13015 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST));
13054 spdy_util_.UpdateWithStreamDestruction(1); 13016 spdy_util_.UpdateWithStreamDestruction(1);
13055 std::unique_ptr<SpdySerializedFrame> host2_req( 13017 std::unique_ptr<SpdySerializedFrame> host2_req(
13056 spdy_util_.ConstructSpdyGet("https://www.gmail.com", 3, LOWEST)); 13018 spdy_util_.ConstructSpdyGet("https://www.gmail.com", 3, LOWEST));
13057 MockWrite spdy_writes[] = { 13019 MockWrite spdy_writes[] = {
13058 CreateMockWrite(*host1_req, 0), CreateMockWrite(*host2_req, 3), 13020 CreateMockWrite(*host1_req, 0), CreateMockWrite(*host2_req, 3),
13059 }; 13021 };
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
13167 MockRead reads2[] = { 13129 MockRead reads2[] = {
13168 MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), 13130 MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"),
13169 MockRead(ASYNC, 2, "hello"), 13131 MockRead(ASYNC, 2, "hello"),
13170 MockRead(ASYNC, OK, 3), 13132 MockRead(ASYNC, OK, 3),
13171 }; 13133 };
13172 13134
13173 SequencedSocketData data2(reads2, arraysize(reads2), writes2, 13135 SequencedSocketData data2(reads2, arraysize(reads2), writes2,
13174 arraysize(writes2)); 13136 arraysize(writes2));
13175 13137
13176 SSLSocketDataProvider ssl(ASYNC, OK); 13138 SSLSocketDataProvider ssl(ASYNC, OK);
13177 ssl.SetNextProto(GetProtocol()); 13139 ssl.SetNextProto(kProtoHTTP2);
13178 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 13140 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
13179 session_deps_.socket_factory->AddSocketDataProvider(&data1); 13141 session_deps_.socket_factory->AddSocketDataProvider(&data1);
13180 session_deps_.socket_factory->AddSocketDataProvider(&data2); 13142 session_deps_.socket_factory->AddSocketDataProvider(&data2);
13181 13143
13182 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 13144 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
13183 13145
13184 // Start the first transaction to set up the SpdySession 13146 // Start the first transaction to set up the SpdySession
13185 HttpRequestInfo request1; 13147 HttpRequestInfo request1;
13186 request1.method = "GET"; 13148 request1.method = "GET";
13187 request1.url = GURL(https_url); 13149 request1.url = GURL(https_url);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
13220 base::FilePath certs_dir = GetTestCertsDirectory(); 13182 base::FilePath certs_dir = GetTestCertsDirectory();
13221 scoped_refptr<X509Certificate> cert( 13183 scoped_refptr<X509Certificate> cert(
13222 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); 13184 ImportCertFromFile(certs_dir, "spdy_pooling.pem"));
13223 ASSERT_TRUE(cert); 13185 ASSERT_TRUE(cert);
13224 bool common_name_fallback_used; 13186 bool common_name_fallback_used;
13225 EXPECT_EQ(valid, 13187 EXPECT_EQ(valid,
13226 cert->VerifyNameMatch(server.host(), &common_name_fallback_used)); 13188 cert->VerifyNameMatch(server.host(), &common_name_fallback_used));
13227 EXPECT_TRUE( 13189 EXPECT_TRUE(
13228 cert->VerifyNameMatch(alternative.host(), &common_name_fallback_used)); 13190 cert->VerifyNameMatch(alternative.host(), &common_name_fallback_used));
13229 SSLSocketDataProvider ssl(ASYNC, OK); 13191 SSLSocketDataProvider ssl(ASYNC, OK);
13230 ssl.SetNextProto(GetProtocol()); 13192 ssl.SetNextProto(kProtoHTTP2);
13231 ssl.cert = cert; 13193 ssl.cert = cert;
13232 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 13194 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
13233 13195
13234 // If pooling, then start a request to alternative first to create a 13196 // If pooling, then start a request to alternative first to create a
13235 // SpdySession. 13197 // SpdySession.
13236 std::string url0 = "https://www.example.org:443"; 13198 std::string url0 = "https://www.example.org:443";
13237 // Second request to server, which has an alternative service, and could 13199 // Second request to server, which has an alternative service, and could
13238 // open a connection to the alternative host or pool to the existing one. 13200 // open a connection to the alternative host or pool to the existing one.
13239 std::string url1("https://"); 13201 std::string url1("https://");
13240 url1.append(server.host()); 13202 url1.append(server.host());
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
13288 // Connection to the server fails. 13250 // Connection to the server fails.
13289 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); 13251 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED);
13290 StaticSocketDataProvider data_refused; 13252 StaticSocketDataProvider data_refused;
13291 data_refused.set_connect_data(mock_connect); 13253 data_refused.set_connect_data(mock_connect);
13292 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); 13254 session_deps_.socket_factory->AddSocketDataProvider(&data_refused);
13293 13255
13294 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 13256 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
13295 HttpServerProperties* http_server_properties = 13257 HttpServerProperties* http_server_properties =
13296 session->http_server_properties(); 13258 session->http_server_properties();
13297 AlternativeService alternative_service( 13259 AlternativeService alternative_service(
13298 AlternateProtocolFromNextProto(GetProtocol()), alternative); 13260 AlternateProtocolFromNextProto(kProtoHTTP2), alternative);
13299 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 13261 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
13300 http_server_properties->SetAlternativeService(server, alternative_service, 13262 http_server_properties->SetAlternativeService(server, alternative_service,
13301 expiration); 13263 expiration);
13302 13264
13303 // First request to alternative. 13265 // First request to alternative.
13304 if (pooling) { 13266 if (pooling) {
13305 std::unique_ptr<HttpTransaction> trans0( 13267 std::unique_ptr<HttpTransaction> trans0(
13306 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 13268 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
13307 HttpRequestInfo request0; 13269 HttpRequestInfo request0;
13308 request0.method = "GET"; 13270 request0.method = "GET";
(...skipping 29 matching lines...) Expand all
13338 EXPECT_THAT(rv, IsError(ERR_CONNECTION_REFUSED)); 13300 EXPECT_THAT(rv, IsError(ERR_CONNECTION_REFUSED));
13339 } else { 13301 } else {
13340 EXPECT_THAT(rv, IsError(ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN)); 13302 EXPECT_THAT(rv, IsError(ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN));
13341 } 13303 }
13342 } 13304 }
13343 } 13305 }
13344 }; 13306 };
13345 13307
13346 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, 13308 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend,
13347 AltSvcCertificateVerificationTest, 13309 AltSvcCertificateVerificationTest,
13348 testing::Values(kTestCaseSPDY31, 13310 testing::Values(kTestCaseNoPriorityDependencies,
13349 kTestCaseHTTP2NoPriorityDependencies, 13311 kTestCasePriorityDependencies));
13350 kTestCaseHTTP2PriorityDependencies));
13351 13312
13352 // The alternative service host must exhibit a certificate that is valid for the 13313 // The alternative service host must exhibit a certificate that is valid for the
13353 // origin host. Test that this is enforced when pooling to an existing 13314 // origin host. Test that this is enforced when pooling to an existing
13354 // connection. 13315 // connection.
13355 TEST_P(AltSvcCertificateVerificationTest, PoolingValid) { 13316 TEST_P(AltSvcCertificateVerificationTest, PoolingValid) {
13356 Run(true, true); 13317 Run(true, true);
13357 } 13318 }
13358 13319
13359 TEST_P(AltSvcCertificateVerificationTest, PoolingInvalid) { 13320 TEST_P(AltSvcCertificateVerificationTest, PoolingInvalid) {
13360 Run(true, false); 13321 Run(true, false);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
13392 // mocked. This way the request relies on the alternate Job. 13353 // mocked. This way the request relies on the alternate Job.
13393 StaticSocketDataProvider data_refused; 13354 StaticSocketDataProvider data_refused;
13394 data_refused.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); 13355 data_refused.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED));
13395 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); 13356 session_deps_.socket_factory->AddSocketDataProvider(&data_refused);
13396 13357
13397 // Set up alternative service for server. 13358 // Set up alternative service for server.
13398 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 13359 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
13399 HttpServerProperties* http_server_properties = 13360 HttpServerProperties* http_server_properties =
13400 session->http_server_properties(); 13361 session->http_server_properties();
13401 AlternativeService alternative_service( 13362 AlternativeService alternative_service(
13402 AlternateProtocolFromNextProto(GetProtocol()), alternative); 13363 AlternateProtocolFromNextProto(kProtoHTTP2), alternative);
13403 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 13364 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
13404 http_server_properties->SetAlternativeService(server, alternative_service, 13365 http_server_properties->SetAlternativeService(server, alternative_service,
13405 expiration); 13366 expiration);
13406 13367
13407 std::unique_ptr<HttpTransaction> trans( 13368 std::unique_ptr<HttpTransaction> trans(
13408 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 13369 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
13409 HttpRequestInfo request; 13370 HttpRequestInfo request;
13410 request.method = "GET"; 13371 request.method = "GET";
13411 request.url = GURL("https://www.example.org:443"); 13372 request.url = GURL("https://www.example.org:443");
13412 request.load_flags = 0; 13373 request.load_flags = 0;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
13462 }; 13423 };
13463 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), 13424 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads),
13464 http_writes, arraysize(http_writes)); 13425 http_writes, arraysize(http_writes));
13465 session_deps_.socket_factory->AddSocketDataProvider(&http_data); 13426 session_deps_.socket_factory->AddSocketDataProvider(&http_data);
13466 13427
13467 // Set up alternative service for server. 13428 // Set up alternative service for server.
13468 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 13429 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
13469 HttpServerProperties* http_server_properties = 13430 HttpServerProperties* http_server_properties =
13470 session->http_server_properties(); 13431 session->http_server_properties();
13471 AlternativeService alternative_service( 13432 AlternativeService alternative_service(
13472 AlternateProtocolFromNextProto(GetProtocol()), alternative); 13433 AlternateProtocolFromNextProto(kProtoHTTP2), alternative);
13473 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 13434 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
13474 http_server_properties->SetAlternativeService(server, alternative_service, 13435 http_server_properties->SetAlternativeService(server, alternative_service,
13475 expiration); 13436 expiration);
13476 13437
13477 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); 13438 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get());
13478 HttpRequestInfo request1; 13439 HttpRequestInfo request1;
13479 request1.method = "GET"; 13440 request1.method = "GET";
13480 request1.url = GURL("https://www.example.org:443"); 13441 request1.url = GURL("https://www.example.org:443");
13481 request1.load_flags = 0; 13442 request1.load_flags = 0;
13482 TestCompletionCallback callback1; 13443 TestCompletionCallback callback1;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
13570 // to the server is mocked. This way |request2| relies on the alternate Job. 13531 // to the server is mocked. This way |request2| relies on the alternate Job.
13571 StaticSocketDataProvider data_refused; 13532 StaticSocketDataProvider data_refused;
13572 data_refused.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); 13533 data_refused.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED));
13573 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); 13534 session_deps_.socket_factory->AddSocketDataProvider(&data_refused);
13574 13535
13575 // Set up alternative service for server. 13536 // Set up alternative service for server.
13576 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 13537 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
13577 HttpServerProperties* http_server_properties = 13538 HttpServerProperties* http_server_properties =
13578 session->http_server_properties(); 13539 session->http_server_properties();
13579 AlternativeService alternative_service( 13540 AlternativeService alternative_service(
13580 AlternateProtocolFromNextProto(GetProtocol()), alternative); 13541 AlternateProtocolFromNextProto(kProtoHTTP2), alternative);
13581 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 13542 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
13582 http_server_properties->SetAlternativeService(server, alternative_service, 13543 http_server_properties->SetAlternativeService(server, alternative_service,
13583 expiration); 13544 expiration);
13584 13545
13585 // First transaction to alternative to open an HTTP/1.1 socket. 13546 // First transaction to alternative to open an HTTP/1.1 socket.
13586 std::unique_ptr<HttpTransaction> trans1( 13547 std::unique_ptr<HttpTransaction> trans1(
13587 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 13548 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
13588 HttpRequestInfo request1; 13549 HttpRequestInfo request1;
13589 request1.method = "GET"; 13550 request1.method = "GET";
13590 request1.url = GURL(alternative_url); 13551 request1.url = GURL(alternative_url);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
13640 std::string response_data3; 13601 std::string response_data3;
13641 ASSERT_THAT(ReadTransaction(trans3.get(), &response_data3), IsOk()); 13602 ASSERT_THAT(ReadTransaction(trans3.get(), &response_data3), IsOk());
13642 EXPECT_EQ("second HTTP/1.1 response from alternative", response_data3); 13603 EXPECT_EQ("second HTTP/1.1 response from alternative", response_data3);
13643 } 13604 }
13644 13605
13645 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttpOverTunnel) { 13606 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttpOverTunnel) {
13646 const std::string https_url = "https://www.example.org:8080/"; 13607 const std::string https_url = "https://www.example.org:8080/";
13647 const std::string http_url = "http://www.example.org:8080/"; 13608 const std::string http_url = "http://www.example.org:8080/";
13648 13609
13649 // Separate SPDY util instance for naked and wrapped requests. 13610 // Separate SPDY util instance for naked and wrapped requests.
13650 SpdyTestUtil spdy_util_wrapped(GetProtocol(), GetDependenciesFromPriority()); 13611 SpdyTestUtil spdy_util_wrapped(GetDependenciesFromPriority());
13651 13612
13652 // SPDY GET for HTTPS URL (through CONNECT tunnel) 13613 // SPDY GET for HTTPS URL (through CONNECT tunnel)
13653 const HostPortPair host_port_pair("www.example.org", 8080); 13614 const HostPortPair host_port_pair("www.example.org", 8080);
13654 std::unique_ptr<SpdySerializedFrame> connect( 13615 std::unique_ptr<SpdySerializedFrame> connect(
13655 spdy_util_.ConstructSpdyConnect(NULL, 0, 1, LOWEST, host_port_pair)); 13616 spdy_util_.ConstructSpdyConnect(NULL, 0, 1, LOWEST, host_port_pair));
13656 std::unique_ptr<SpdySerializedFrame> req1( 13617 std::unique_ptr<SpdySerializedFrame> req1(
13657 spdy_util_wrapped.ConstructSpdyGet(https_url.c_str(), 1, LOWEST)); 13618 spdy_util_wrapped.ConstructSpdyGet(https_url.c_str(), 1, LOWEST));
13658 std::unique_ptr<SpdySerializedFrame> wrapped_req1( 13619 std::unique_ptr<SpdySerializedFrame> wrapped_req1(
13659 spdy_util_.ConstructWrappedSpdyFrame(req1, 1)); 13620 spdy_util_.ConstructWrappedSpdyFrame(req1, 1));
13660 13621
13661 // SPDY GET for HTTP URL (through the proxy, but not the tunnel). 13622 // SPDY GET for HTTP URL (through the proxy, but not the tunnel).
13662 SpdyHeaderBlock req2_block; 13623 SpdyHeaderBlock req2_block;
13663 spdy_util_.MaybeAddVersionHeader(&req2_block);
13664 req2_block[spdy_util_.GetMethodKey()] = "GET"; 13624 req2_block[spdy_util_.GetMethodKey()] = "GET";
13665 req2_block[spdy_util_.GetHostKey()] = "www.example.org:8080"; 13625 req2_block[spdy_util_.GetHostKey()] = "www.example.org:8080";
13666 req2_block[spdy_util_.GetSchemeKey()] = "http"; 13626 req2_block[spdy_util_.GetSchemeKey()] = "http";
13667 req2_block[spdy_util_.GetPathKey()] = "/"; 13627 req2_block[spdy_util_.GetPathKey()] = "/";
13668 std::unique_ptr<SpdySerializedFrame> req2( 13628 std::unique_ptr<SpdySerializedFrame> req2(
13669 spdy_util_.ConstructSpdySyn(3, std::move(req2_block), MEDIUM, true)); 13629 spdy_util_.ConstructSpdySyn(3, std::move(req2_block), MEDIUM, true));
13670 13630
13671 MockWrite writes1[] = { 13631 MockWrite writes1[] = {
13672 CreateMockWrite(*connect, 0), CreateMockWrite(*wrapped_req1, 2), 13632 CreateMockWrite(*connect, 0), CreateMockWrite(*wrapped_req1, 2),
13673 CreateMockWrite(*req2, 6), 13633 CreateMockWrite(*req2, 6),
(...skipping 27 matching lines...) Expand all
13701 SequencedSocketData data1(reads1, arraysize(reads1), writes1, 13661 SequencedSocketData data1(reads1, arraysize(reads1), writes1,
13702 arraysize(writes1)); 13662 arraysize(writes1));
13703 MockConnect connect_data1(ASYNC, OK); 13663 MockConnect connect_data1(ASYNC, OK);
13704 data1.set_connect_data(connect_data1); 13664 data1.set_connect_data(connect_data1);
13705 13665
13706 session_deps_.proxy_service = 13666 session_deps_.proxy_service =
13707 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70"); 13667 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70");
13708 TestNetLog log; 13668 TestNetLog log;
13709 session_deps_.net_log = &log; 13669 session_deps_.net_log = &log;
13710 SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy 13670 SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy
13711 ssl1.SetNextProto(GetProtocol()); 13671 ssl1.SetNextProto(kProtoHTTP2);
13712 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); 13672 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1);
13713 SSLSocketDataProvider ssl2(ASYNC, OK); // to the server 13673 SSLSocketDataProvider ssl2(ASYNC, OK); // to the server
13714 ssl2.SetNextProto(GetProtocol()); 13674 ssl2.SetNextProto(kProtoHTTP2);
13715 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); 13675 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2);
13716 session_deps_.socket_factory->AddSocketDataProvider(&data1); 13676 session_deps_.socket_factory->AddSocketDataProvider(&data1);
13717 13677
13718 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); 13678 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_);
13719 13679
13720 // Start the first transaction to set up the SpdySession 13680 // Start the first transaction to set up the SpdySession
13721 HttpRequestInfo request1; 13681 HttpRequestInfo request1;
13722 request1.method = "GET"; 13682 request1.method = "GET";
13723 request1.url = GURL(https_url); 13683 request1.url = GURL(https_url);
13724 request1.load_flags = 0; 13684 request1.load_flags = 0;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
13767 // Test that in the case where we have a SPDY session to a SPDY proxy 13727 // Test that in the case where we have a SPDY session to a SPDY proxy
13768 // that we do not pool other origins that resolve to the same IP when 13728 // that we do not pool other origins that resolve to the same IP when
13769 // the certificate does not match the new origin. 13729 // the certificate does not match the new origin.
13770 // http://crbug.com/134690 13730 // http://crbug.com/134690
13771 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionIfCertDoesNotMatch) { 13731 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionIfCertDoesNotMatch) {
13772 const std::string url1 = "http://www.example.org/"; 13732 const std::string url1 = "http://www.example.org/";
13773 const std::string url2 = "https://news.example.org/"; 13733 const std::string url2 = "https://news.example.org/";
13774 const std::string ip_addr = "1.2.3.4"; 13734 const std::string ip_addr = "1.2.3.4";
13775 13735
13776 // Second SpdyTestUtil instance for the second socket. 13736 // Second SpdyTestUtil instance for the second socket.
13777 SpdyTestUtil spdy_util_secure(GetProtocol(), GetDependenciesFromPriority()); 13737 SpdyTestUtil spdy_util_secure(GetDependenciesFromPriority());
13778 13738
13779 // SPDY GET for HTTP URL (through SPDY proxy) 13739 // SPDY GET for HTTP URL (through SPDY proxy)
13780 SpdyHeaderBlock headers( 13740 SpdyHeaderBlock headers(
13781 spdy_util_.ConstructGetHeaderBlockForProxy("http://www.example.org/")); 13741 spdy_util_.ConstructGetHeaderBlockForProxy("http://www.example.org/"));
13782 std::unique_ptr<SpdySerializedFrame> req1( 13742 std::unique_ptr<SpdySerializedFrame> req1(
13783 spdy_util_.ConstructSpdySyn(1, std::move(headers), LOWEST, true)); 13743 spdy_util_.ConstructSpdySyn(1, std::move(headers), LOWEST, true));
13784 13744
13785 MockWrite writes1[] = { 13745 MockWrite writes1[] = {
13786 CreateMockWrite(*req1, 0), 13746 CreateMockWrite(*req1, 0),
13787 }; 13747 };
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
13825 13785
13826 // Set up a proxy config that sends HTTP requests to a proxy, and 13786 // Set up a proxy config that sends HTTP requests to a proxy, and
13827 // all others direct. 13787 // all others direct.
13828 ProxyConfig proxy_config; 13788 ProxyConfig proxy_config;
13829 proxy_config.proxy_rules().ParseFromString("http=https://proxy:443"); 13789 proxy_config.proxy_rules().ParseFromString("http=https://proxy:443");
13830 session_deps_.proxy_service.reset(new ProxyService( 13790 session_deps_.proxy_service.reset(new ProxyService(
13831 base::WrapUnique(new ProxyConfigServiceFixed(proxy_config)), nullptr, 13791 base::WrapUnique(new ProxyConfigServiceFixed(proxy_config)), nullptr,
13832 NULL)); 13792 NULL));
13833 13793
13834 SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy 13794 SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy
13835 ssl1.SetNextProto(GetProtocol()); 13795 ssl1.SetNextProto(kProtoHTTP2);
13836 // Load a valid cert. Note, that this does not need to 13796 // Load a valid cert. Note, that this does not need to
13837 // be valid for proxy because the MockSSLClientSocket does 13797 // be valid for proxy because the MockSSLClientSocket does
13838 // not actually verify it. But SpdySession will use this 13798 // not actually verify it. But SpdySession will use this
13839 // to see if it is valid for the new origin 13799 // to see if it is valid for the new origin
13840 ssl1.cert = ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"); 13800 ssl1.cert = ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem");
13841 ASSERT_TRUE(ssl1.cert); 13801 ASSERT_TRUE(ssl1.cert);
13842 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); 13802 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1);
13843 session_deps_.socket_factory->AddSocketDataProvider(&data1); 13803 session_deps_.socket_factory->AddSocketDataProvider(&data1);
13844 13804
13845 SSLSocketDataProvider ssl2(ASYNC, OK); // to the server 13805 SSLSocketDataProvider ssl2(ASYNC, OK); // to the server
13846 ssl2.SetNextProto(GetProtocol()); 13806 ssl2.SetNextProto(kProtoHTTP2);
13847 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); 13807 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2);
13848 session_deps_.socket_factory->AddSocketDataProvider(&data2); 13808 session_deps_.socket_factory->AddSocketDataProvider(&data2);
13849 13809
13850 session_deps_.host_resolver.reset(new MockCachingHostResolver()); 13810 session_deps_.host_resolver.reset(new MockCachingHostResolver());
13851 session_deps_.host_resolver->rules()->AddRule("news.example.org", ip_addr); 13811 session_deps_.host_resolver->rules()->AddRule("news.example.org", ip_addr);
13852 session_deps_.host_resolver->rules()->AddRule("proxy", ip_addr); 13812 session_deps_.host_resolver->rules()->AddRule("proxy", ip_addr);
13853 13813
13854 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); 13814 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_);
13855 13815
13856 // Start the first transaction to set up the SpdySession 13816 // Start the first transaction to set up the SpdySession
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
13912 MockRead reads2[] = { 13872 MockRead reads2[] = {
13913 CreateMockRead(*resp2, 1), 13873 CreateMockRead(*resp2, 1),
13914 CreateMockRead(*body2, 2), 13874 CreateMockRead(*body2, 2),
13915 MockRead(ASYNC, OK, 3) // EOF 13875 MockRead(ASYNC, OK, 3) // EOF
13916 }; 13876 };
13917 13877
13918 SequencedSocketData data2(reads2, arraysize(reads2), writes2, 13878 SequencedSocketData data2(reads2, arraysize(reads2), writes2,
13919 arraysize(writes2)); 13879 arraysize(writes2));
13920 13880
13921 SSLSocketDataProvider ssl1(ASYNC, OK); 13881 SSLSocketDataProvider ssl1(ASYNC, OK);
13922 ssl1.SetNextProto(GetProtocol()); 13882 ssl1.SetNextProto(kProtoHTTP2);
13923 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); 13883 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1);
13924 session_deps_.socket_factory->AddSocketDataProvider(&data1); 13884 session_deps_.socket_factory->AddSocketDataProvider(&data1);
13925 13885
13926 SSLSocketDataProvider ssl2(ASYNC, OK); 13886 SSLSocketDataProvider ssl2(ASYNC, OK);
13927 ssl2.SetNextProto(GetProtocol()); 13887 ssl2.SetNextProto(kProtoHTTP2);
13928 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); 13888 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2);
13929 session_deps_.socket_factory->AddSocketDataProvider(&data2); 13889 session_deps_.socket_factory->AddSocketDataProvider(&data2);
13930 13890
13931 std::unique_ptr<HttpNetworkSession> session( 13891 std::unique_ptr<HttpNetworkSession> session(
13932 SpdySessionDependencies::SpdyCreateSession(&session_deps_)); 13892 SpdySessionDependencies::SpdyCreateSession(&session_deps_));
13933 13893
13934 // Start the first transaction to set up the SpdySession and verify that 13894 // Start the first transaction to set up the SpdySession and verify that
13935 // connection was closed. 13895 // connection was closed.
13936 HttpRequestInfo request1; 13896 HttpRequestInfo request1;
13937 request1.method = "GET"; 13897 request1.method = "GET";
(...skipping 24 matching lines...) Expand all
13962 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 13922 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
13963 ClientSocketPoolManager::set_max_sockets_per_pool( 13923 ClientSocketPoolManager::set_max_sockets_per_pool(
13964 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 13924 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
13965 13925
13966 // Use two different hosts with different IPs so they don't get pooled. 13926 // Use two different hosts with different IPs so they don't get pooled.
13967 session_deps_.host_resolver->rules()->AddRule("www.a.com", "10.0.0.1"); 13927 session_deps_.host_resolver->rules()->AddRule("www.a.com", "10.0.0.1");
13968 session_deps_.host_resolver->rules()->AddRule("www.b.com", "10.0.0.2"); 13928 session_deps_.host_resolver->rules()->AddRule("www.b.com", "10.0.0.2");
13969 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 13929 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
13970 13930
13971 SSLSocketDataProvider ssl1(ASYNC, OK); 13931 SSLSocketDataProvider ssl1(ASYNC, OK);
13972 ssl1.SetNextProto(GetProtocol()); 13932 ssl1.SetNextProto(kProtoHTTP2);
13973 SSLSocketDataProvider ssl2(ASYNC, OK); 13933 SSLSocketDataProvider ssl2(ASYNC, OK);
13974 ssl2.SetNextProto(GetProtocol()); 13934 ssl2.SetNextProto(kProtoHTTP2);
13975 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); 13935 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1);
13976 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); 13936 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2);
13977 13937
13978 std::unique_ptr<SpdySerializedFrame> host1_req( 13938 std::unique_ptr<SpdySerializedFrame> host1_req(
13979 spdy_util_.ConstructSpdyGet("https://www.a.com", 1, DEFAULT_PRIORITY)); 13939 spdy_util_.ConstructSpdyGet("https://www.a.com", 1, DEFAULT_PRIORITY));
13980 MockWrite spdy1_writes[] = { 13940 MockWrite spdy1_writes[] = {
13981 CreateMockWrite(*host1_req, 0), 13941 CreateMockWrite(*host1_req, 0),
13982 }; 13942 };
13983 std::unique_ptr<SpdySerializedFrame> host1_resp( 13943 std::unique_ptr<SpdySerializedFrame> host1_resp(
13984 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 13944 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
13985 std::unique_ptr<SpdySerializedFrame> host1_resp_body( 13945 std::unique_ptr<SpdySerializedFrame> host1_resp_body(
13986 spdy_util_.ConstructSpdyBodyFrame(1, true)); 13946 spdy_util_.ConstructSpdyBodyFrame(1, true));
13987 MockRead spdy1_reads[] = { 13947 MockRead spdy1_reads[] = {
13988 CreateMockRead(*host1_resp, 1), CreateMockRead(*host1_resp_body, 2), 13948 CreateMockRead(*host1_resp, 1), CreateMockRead(*host1_resp_body, 2),
13989 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 3), 13949 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 3),
13990 }; 13950 };
13991 13951
13992 // Use a separate test instance for the separate SpdySession that will be 13952 // Use a separate test instance for the separate SpdySession that will be
13993 // created. 13953 // created.
13994 SpdyTestUtil spdy_util_2(GetProtocol(), GetDependenciesFromPriority()); 13954 SpdyTestUtil spdy_util_2(GetDependenciesFromPriority());
13995 std::unique_ptr<SequencedSocketData> spdy1_data( 13955 std::unique_ptr<SequencedSocketData> spdy1_data(
13996 new SequencedSocketData(spdy1_reads, arraysize(spdy1_reads), spdy1_writes, 13956 new SequencedSocketData(spdy1_reads, arraysize(spdy1_reads), spdy1_writes,
13997 arraysize(spdy1_writes))); 13957 arraysize(spdy1_writes)));
13998 session_deps_.socket_factory->AddSocketDataProvider(spdy1_data.get()); 13958 session_deps_.socket_factory->AddSocketDataProvider(spdy1_data.get());
13999 13959
14000 std::unique_ptr<SpdySerializedFrame> host2_req( 13960 std::unique_ptr<SpdySerializedFrame> host2_req(
14001 spdy_util_2.ConstructSpdyGet("https://www.b.com", 1, DEFAULT_PRIORITY)); 13961 spdy_util_2.ConstructSpdyGet("https://www.b.com", 1, DEFAULT_PRIORITY));
14002 MockWrite spdy2_writes[] = { 13962 MockWrite spdy2_writes[] = {
14003 CreateMockWrite(*host2_req, 0), 13963 CreateMockWrite(*host2_req, 0),
14004 }; 13964 };
(...skipping 1827 matching lines...) Expand 10 before | Expand all | Expand 10 after
15832 #if !defined(OS_IOS) 15792 #if !defined(OS_IOS)
15833 TEST_P(HttpNetworkTransactionTest, TokenBindingSpdy) { 15793 TEST_P(HttpNetworkTransactionTest, TokenBindingSpdy) {
15834 const std::string https_url = "https://www.example.com"; 15794 const std::string https_url = "https://www.example.com";
15835 HttpRequestInfo request; 15795 HttpRequestInfo request;
15836 request.url = GURL(https_url); 15796 request.url = GURL(https_url);
15837 request.method = "GET"; 15797 request.method = "GET";
15838 15798
15839 SSLSocketDataProvider ssl(ASYNC, OK); 15799 SSLSocketDataProvider ssl(ASYNC, OK);
15840 ssl.token_binding_negotiated = true; 15800 ssl.token_binding_negotiated = true;
15841 ssl.token_binding_key_param = TB_PARAM_ECDSAP256; 15801 ssl.token_binding_key_param = TB_PARAM_ECDSAP256;
15842 ssl.SetNextProto(GetProtocol()); 15802 ssl.SetNextProto(kProtoHTTP2);
15843 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); 15803 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
15844 15804
15845 std::unique_ptr<SpdySerializedFrame> resp( 15805 std::unique_ptr<SpdySerializedFrame> resp(
15846 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 15806 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
15847 std::unique_ptr<SpdySerializedFrame> body( 15807 std::unique_ptr<SpdySerializedFrame> body(
15848 spdy_util_.ConstructSpdyBodyFrame(1, true)); 15808 spdy_util_.ConstructSpdyBodyFrame(1, true));
15849 MockRead reads[] = {CreateMockRead(*resp), CreateMockRead(*body), 15809 MockRead reads[] = {CreateMockRead(*resp), CreateMockRead(*body),
15850 MockRead(ASYNC, ERR_IO_PENDING)}; 15810 MockRead(ASYNC, ERR_IO_PENDING)};
15851 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); 15811 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
15852 session_deps_.socket_factory->AddSocketDataProvider(&data); 15812 session_deps_.socket_factory->AddSocketDataProvider(&data);
15853 session_deps_.channel_id_service.reset(new ChannelIDService( 15813 session_deps_.channel_id_service.reset(new ChannelIDService(
15854 new DefaultChannelIDStore(nullptr), base::ThreadTaskRunnerHandle::Get())); 15814 new DefaultChannelIDStore(nullptr), base::ThreadTaskRunnerHandle::Get()));
15855 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 15815 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
15856 15816
15857 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); 15817 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get());
15858 TestCompletionCallback callback; 15818 TestCompletionCallback callback;
15859 EXPECT_EQ(ERR_IO_PENDING, 15819 EXPECT_EQ(ERR_IO_PENDING,
15860 trans.Start(&request, callback.callback(), BoundNetLog())); 15820 trans.Start(&request, callback.callback(), BoundNetLog()));
15861 base::RunLoop().RunUntilIdle(); 15821 base::RunLoop().RunUntilIdle();
15862 15822
15863 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); 15823 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy);
15864 HttpRequestHeaders headers; 15824 HttpRequestHeaders headers;
15865 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); 15825 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers));
15866 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); 15826 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding));
15867 } 15827 }
15868 #endif // !defined(OS_IOS) 15828 #endif // !defined(OS_IOS)
15869 15829
15870 } // namespace net 15830 } // namespace net
OLDNEW
« no previous file with comments | « net/http/bidirectional_stream_unittest.cc ('k') | net/http/http_proxy_client_socket_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698