| 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 1477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1488 data2_reads.push_back( | 1488 data2_reads.push_back( |
| 1489 MockRead(ASYNC, kHttpResponse, strlen(kHttpResponse), 1)); | 1489 MockRead(ASYNC, kHttpResponse, strlen(kHttpResponse), 1)); |
| 1490 data2_reads.push_back(MockRead(ASYNC, kHttpData, strlen(kHttpData), 2)); | 1490 data2_reads.push_back(MockRead(ASYNC, kHttpData, strlen(kHttpData), 2)); |
| 1491 data2_reads.push_back(MockRead(ASYNC, OK, 3)); | 1491 data2_reads.push_back(MockRead(ASYNC, OK, 3)); |
| 1492 } | 1492 } |
| 1493 SequencedSocketData data2(&data2_reads[0], data2_reads.size(), | 1493 SequencedSocketData data2(&data2_reads[0], data2_reads.size(), |
| 1494 &data2_writes[0], data2_writes.size()); | 1494 &data2_writes[0], data2_writes.size()); |
| 1495 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 1495 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 1496 | 1496 |
| 1497 // Preconnect a socket. | 1497 // Preconnect a socket. |
| 1498 SSLConfig ssl_config; | 1498 session->http_stream_factory()->PreconnectStreams(1, request); |
| 1499 session->ssl_config_service()->GetSSLConfig(&ssl_config); | |
| 1500 session->GetAlpnProtos(&ssl_config.alpn_protos); | |
| 1501 session->GetNpnProtos(&ssl_config.npn_protos); | |
| 1502 session->http_stream_factory()->PreconnectStreams(1, request, ssl_config, | |
| 1503 ssl_config); | |
| 1504 // Wait for the preconnect to complete. | 1499 // Wait for the preconnect to complete. |
| 1505 // TODO(davidben): Some way to wait for an idle socket count might be handy. | 1500 // TODO(davidben): Some way to wait for an idle socket count might be handy. |
| 1506 base::RunLoop().RunUntilIdle(); | 1501 base::RunLoop().RunUntilIdle(); |
| 1507 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 1502 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
| 1508 | 1503 |
| 1509 // Make the request. | 1504 // Make the request. |
| 1510 TestCompletionCallback callback; | 1505 TestCompletionCallback callback; |
| 1511 | 1506 |
| 1512 std::unique_ptr<HttpTransaction> trans( | 1507 std::unique_ptr<HttpTransaction> trans( |
| 1513 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1508 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| (...skipping 13161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14675 HttpStreamRequest::Delegate* delegate, | 14670 HttpStreamRequest::Delegate* delegate, |
| 14676 WebSocketHandshakeStreamBase::CreateHelper* create_helper, | 14671 WebSocketHandshakeStreamBase::CreateHelper* create_helper, |
| 14677 const BoundNetLog& net_log) override { | 14672 const BoundNetLog& net_log) override { |
| 14678 FakeStreamRequest* fake_request = | 14673 FakeStreamRequest* fake_request = |
| 14679 new FakeStreamRequest(priority, delegate, create_helper); | 14674 new FakeStreamRequest(priority, delegate, create_helper); |
| 14680 last_stream_request_ = fake_request->AsWeakPtr(); | 14675 last_stream_request_ = fake_request->AsWeakPtr(); |
| 14681 return fake_request; | 14676 return fake_request; |
| 14682 } | 14677 } |
| 14683 | 14678 |
| 14684 void PreconnectStreams(int num_streams, | 14679 void PreconnectStreams(int num_streams, |
| 14685 const HttpRequestInfo& info, | 14680 const HttpRequestInfo& info) override { |
| 14686 const SSLConfig& server_ssl_config, | |
| 14687 const SSLConfig& proxy_ssl_config) override { | |
| 14688 ADD_FAILURE(); | 14681 ADD_FAILURE(); |
| 14689 } | 14682 } |
| 14690 | 14683 |
| 14691 const HostMappingRules* GetHostMappingRules() const override { | 14684 const HostMappingRules* GetHostMappingRules() const override { |
| 14692 ADD_FAILURE(); | 14685 ADD_FAILURE(); |
| 14693 return NULL; | 14686 return NULL; |
| 14694 } | 14687 } |
| 14695 | 14688 |
| 14696 private: | 14689 private: |
| 14697 base::WeakPtr<FakeStreamRequest> last_stream_request_; | 14690 base::WeakPtr<FakeStreamRequest> last_stream_request_; |
| (...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15087 }; | 15080 }; |
| 15088 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 15081 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
| 15089 http_writes, arraysize(http_writes)); | 15082 http_writes, arraysize(http_writes)); |
| 15090 session_deps_.socket_factory->AddSocketDataProvider(&http_data); | 15083 session_deps_.socket_factory->AddSocketDataProvider(&http_data); |
| 15091 | 15084 |
| 15092 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15085 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 15093 | 15086 |
| 15094 // Preconnect an SSL socket. A preconnect is needed because connect jobs are | 15087 // Preconnect an SSL socket. A preconnect is needed because connect jobs are |
| 15095 // cancelled when a normal transaction is cancelled. | 15088 // cancelled when a normal transaction is cancelled. |
| 15096 HttpStreamFactory* http_stream_factory = session->http_stream_factory(); | 15089 HttpStreamFactory* http_stream_factory = session->http_stream_factory(); |
| 15097 SSLConfig ssl_config; | 15090 http_stream_factory->PreconnectStreams(1, ssl_request); |
| 15098 session->ssl_config_service()->GetSSLConfig(&ssl_config); | |
| 15099 http_stream_factory->PreconnectStreams(1, ssl_request, ssl_config, | |
| 15100 ssl_config); | |
| 15101 EXPECT_EQ(0, GetIdleSocketCountInSSLSocketPool(session.get())); | 15091 EXPECT_EQ(0, GetIdleSocketCountInSSLSocketPool(session.get())); |
| 15102 | 15092 |
| 15103 // Start the HTTP request. Pool should stall. | 15093 // Start the HTTP request. Pool should stall. |
| 15104 TestCompletionCallback http_callback; | 15094 TestCompletionCallback http_callback; |
| 15105 std::unique_ptr<HttpTransaction> http_trans( | 15095 std::unique_ptr<HttpTransaction> http_trans( |
| 15106 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 15096 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 15107 ASSERT_EQ(ERR_IO_PENDING, | 15097 ASSERT_EQ(ERR_IO_PENDING, |
| 15108 http_trans->Start(&http_request, http_callback.callback(), | 15098 http_trans->Start(&http_request, http_callback.callback(), |
| 15109 BoundNetLog())); | 15099 BoundNetLog())); |
| 15110 EXPECT_TRUE(IsTransportSocketPoolStalled(session.get())); | 15100 EXPECT_TRUE(IsTransportSocketPoolStalled(session.get())); |
| (...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15917 trans->GetTotalSentBytes()); | 15907 trans->GetTotalSentBytes()); |
| 15918 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), | 15908 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), |
| 15919 trans->GetTotalReceivedBytes()); | 15909 trans->GetTotalReceivedBytes()); |
| 15920 } | 15910 } |
| 15921 | 15911 |
| 15922 TEST_P(HttpNetworkTransactionTest, EnableNPN) { | 15912 TEST_P(HttpNetworkTransactionTest, EnableNPN) { |
| 15923 session_deps_.enable_npn = true; | 15913 session_deps_.enable_npn = true; |
| 15924 | 15914 |
| 15925 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15915 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 15926 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 15916 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
| 15917 HttpRequestInfo request; |
| 15918 TestCompletionCallback callback; |
| 15919 EXPECT_EQ(ERR_IO_PENDING, |
| 15920 trans.Start(&request, callback.callback(), BoundNetLog())); |
| 15927 | 15921 |
| 15928 EXPECT_THAT(trans.server_ssl_config_.alpn_protos, | 15922 EXPECT_THAT(trans.server_ssl_config_.alpn_protos, |
| 15929 testing::ElementsAre(kProtoHTTP2, kProtoSPDY31, kProtoHTTP11)); | 15923 testing::ElementsAre(kProtoHTTP2, kProtoSPDY31, kProtoHTTP11)); |
| 15930 EXPECT_THAT(trans.server_ssl_config_.npn_protos, | 15924 EXPECT_THAT(trans.server_ssl_config_.npn_protos, |
| 15931 testing::ElementsAre(kProtoHTTP2, kProtoSPDY31, kProtoHTTP11)); | 15925 testing::ElementsAre(kProtoHTTP2, kProtoSPDY31, kProtoHTTP11)); |
| 15932 } | 15926 } |
| 15933 | 15927 |
| 15934 TEST_P(HttpNetworkTransactionTest, DisableNPN) { | 15928 TEST_P(HttpNetworkTransactionTest, DisableNPN) { |
| 15935 session_deps_.enable_npn = false; | 15929 session_deps_.enable_npn = false; |
| 15936 | 15930 |
| 15937 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15931 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 15938 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 15932 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
| 15933 HttpRequestInfo request; |
| 15934 TestCompletionCallback callback; |
| 15935 EXPECT_EQ(ERR_IO_PENDING, |
| 15936 trans.Start(&request, callback.callback(), BoundNetLog())); |
| 15939 | 15937 |
| 15940 EXPECT_THAT(trans.server_ssl_config_.alpn_protos, | 15938 EXPECT_THAT(trans.server_ssl_config_.alpn_protos, |
| 15941 testing::ElementsAre(kProtoHTTP2, kProtoSPDY31, kProtoHTTP11)); | 15939 testing::ElementsAre(kProtoHTTP2, kProtoSPDY31, kProtoHTTP11)); |
| 15942 EXPECT_TRUE(trans.server_ssl_config_.npn_protos.empty()); | 15940 EXPECT_TRUE(trans.server_ssl_config_.npn_protos.empty()); |
| 15943 } | 15941 } |
| 15944 | 15942 |
| 15945 #if !defined(OS_IOS) | 15943 #if !defined(OS_IOS) |
| 15946 TEST_P(HttpNetworkTransactionTest, TokenBindingSpdy) { | 15944 TEST_P(HttpNetworkTransactionTest, TokenBindingSpdy) { |
| 15947 const std::string https_url = "https://www.example.com"; | 15945 const std::string https_url = "https://www.example.com"; |
| 15948 HttpRequestInfo request; | 15946 HttpRequestInfo request; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 15974 base::MessageLoop::current()->RunUntilIdle(); | 15972 base::MessageLoop::current()->RunUntilIdle(); |
| 15975 | 15973 |
| 15976 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); | 15974 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); |
| 15977 HttpRequestHeaders headers; | 15975 HttpRequestHeaders headers; |
| 15978 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); | 15976 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); |
| 15979 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); | 15977 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); |
| 15980 } | 15978 } |
| 15981 #endif // !defined(OS_IOS) | 15979 #endif // !defined(OS_IOS) |
| 15982 | 15980 |
| 15983 } // namespace net | 15981 } // namespace net |
| OLD | NEW |