| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/http/http_stream_factory_impl.h" | 5 #include "net/http/http_stream_factory_impl.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 2083 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2094 ASSERT_NE(nullptr, waiter1.stream()); | 2094 ASSERT_NE(nullptr, waiter1.stream()); |
| 2095 ASSERT_NE(nullptr, waiter2.stream()); | 2095 ASSERT_NE(nullptr, waiter2.stream()); |
| 2096 ASSERT_NE(waiter1.stream(), waiter2.stream()); | 2096 ASSERT_NE(waiter1.stream(), waiter2.stream()); |
| 2097 | 2097 |
| 2098 // Establishing the SpdySession will close idle H2 sockets. | 2098 // Establishing the SpdySession will close idle H2 sockets. |
| 2099 EXPECT_EQ(0, session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL) | 2099 EXPECT_EQ(0, session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL) |
| 2100 ->IdleSocketCount()); | 2100 ->IdleSocketCount()); |
| 2101 EXPECT_EQ(1, GetSpdySessionCount(session.get())); | 2101 EXPECT_EQ(1, GetSpdySessionCount(session.get())); |
| 2102 } | 2102 } |
| 2103 | 2103 |
| 2104 // Regression test for https://crbug.com/706974. |
| 2105 TEST_F(HttpStreamFactoryTest, TwoSpdyConnects) { |
| 2106 SpdySessionDependencies session_deps(ProxyService::CreateDirect()); |
| 2107 |
| 2108 SSLSocketDataProvider ssl_socket_data0(ASYNC, OK); |
| 2109 ssl_socket_data0.next_proto = kProtoHTTP2; |
| 2110 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data0); |
| 2111 |
| 2112 MockRead reads0[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING)}; |
| 2113 SequencedSocketData data0(reads0, arraysize(reads0), nullptr, 0); |
| 2114 data0.set_connect_data(MockConnect(ASYNC, OK)); |
| 2115 session_deps.socket_factory->AddSocketDataProvider(&data0); |
| 2116 |
| 2117 SSLSocketDataProvider ssl_socket_data1(ASYNC, OK); |
| 2118 ssl_socket_data1.next_proto = kProtoHTTP2; |
| 2119 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data1); |
| 2120 |
| 2121 SequencedSocketData data1(nullptr, 0, nullptr, 0); |
| 2122 data1.set_connect_data(MockConnect(ASYNC, OK)); |
| 2123 session_deps.socket_factory->AddSocketDataProvider(&data1); |
| 2124 |
| 2125 std::unique_ptr<HttpNetworkSession> session = |
| 2126 SpdySessionDependencies::SpdyCreateSession(&session_deps); |
| 2127 HttpRequestInfo request_info; |
| 2128 request_info.method = "GET"; |
| 2129 request_info.url = GURL("https://www.google.com"); |
| 2130 request_info.load_flags = 0; |
| 2131 SSLConfig ssl_config; |
| 2132 |
| 2133 // Request two streams at once and make sure they use the same connection. |
| 2134 StreamRequestWaiter waiter1; |
| 2135 std::unique_ptr<HttpStreamRequest> request1 = |
| 2136 session->http_stream_factory()->RequestStream( |
| 2137 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter1, |
| 2138 /* enable_ip_based_pooling = */ true, |
| 2139 /* enable_alternative_services = */ true, NetLogWithSource()); |
| 2140 |
| 2141 StreamRequestWaiter waiter2; |
| 2142 std::unique_ptr<HttpStreamRequest> request2 = |
| 2143 session->http_stream_factory()->RequestStream( |
| 2144 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter2, |
| 2145 /* enable_ip_based_pooling = */ true, |
| 2146 /* enable_alternative_services = */ true, NetLogWithSource()); |
| 2147 |
| 2148 waiter1.WaitForStream(); |
| 2149 waiter2.WaitForStream(); |
| 2150 |
| 2151 EXPECT_TRUE(waiter1.stream_done()); |
| 2152 EXPECT_TRUE(waiter2.stream_done()); |
| 2153 ASSERT_NE(nullptr, waiter1.stream()); |
| 2154 ASSERT_NE(nullptr, waiter2.stream()); |
| 2155 ASSERT_NE(waiter1.stream(), waiter2.stream()); |
| 2156 |
| 2157 // Establishing the SpdySession will close the extra H2 socket. |
| 2158 EXPECT_EQ(0, session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL) |
| 2159 ->IdleSocketCount()); |
| 2160 EXPECT_EQ(1, GetSpdySessionCount(session.get())); |
| 2161 EXPECT_TRUE(data0.AllReadDataConsumed()); |
| 2162 EXPECT_TRUE(data1.AllReadDataConsumed()); |
| 2163 } |
| 2164 |
| 2104 TEST_F(HttpStreamFactoryTest, RequestBidirectionalStreamImpl) { | 2165 TEST_F(HttpStreamFactoryTest, RequestBidirectionalStreamImpl) { |
| 2105 SpdySessionDependencies session_deps(ProxyService::CreateDirect()); | 2166 SpdySessionDependencies session_deps(ProxyService::CreateDirect()); |
| 2106 | 2167 |
| 2107 MockRead mock_read(ASYNC, OK); | 2168 MockRead mock_read(ASYNC, OK); |
| 2108 SequencedSocketData socket_data(&mock_read, 1, nullptr, 0); | 2169 SequencedSocketData socket_data(&mock_read, 1, nullptr, 0); |
| 2109 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 2170 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
| 2110 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 2171 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
| 2111 | 2172 |
| 2112 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); | 2173 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); |
| 2113 ssl_socket_data.next_proto = kProtoHTTP2; | 2174 ssl_socket_data.next_proto = kProtoHTTP2; |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2513 HttpNetworkSession::NORMAL_SOCKET_POOL))); | 2574 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
| 2514 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetTransportSocketPool( | 2575 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetTransportSocketPool( |
| 2515 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 2576 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 2516 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( | 2577 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( |
| 2517 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 2578 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 2518 } | 2579 } |
| 2519 | 2580 |
| 2520 } // namespace | 2581 } // namespace |
| 2521 | 2582 |
| 2522 } // namespace net | 2583 } // namespace net |
| OLD | NEW |