| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |