| 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 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" |
| 13 #include "base/macros.h" | 13 #include "base/macros.h" |
| 14 #include "net/base/port_util.h" | 14 #include "net/base/port_util.h" |
| 15 #include "net/base/test_completion_callback.h" | 15 #include "net/base/test_completion_callback.h" |
| 16 #include "net/cert/mock_cert_verifier.h" | 16 #include "net/cert/mock_cert_verifier.h" |
| 17 #include "net/dns/mock_host_resolver.h" | 17 #include "net/dns/mock_host_resolver.h" |
| 18 #include "net/http/http_auth_handler_factory.h" | 18 #include "net/http/http_auth_handler_factory.h" |
| 19 #include "net/http/http_network_session.h" | 19 #include "net/http/http_network_session.h" |
| 20 #include "net/http/http_network_session_peer.h" | 20 #include "net/http/http_network_session_peer.h" |
| 21 #include "net/http/http_network_transaction.h" | 21 #include "net/http/http_network_transaction.h" |
| 22 #include "net/http/http_request_info.h" | 22 #include "net/http/http_request_info.h" |
| 23 #include "net/http/http_server_properties.h" | 23 #include "net/http/http_server_properties.h" |
| 24 #include "net/http/http_server_properties_impl.h" | 24 #include "net/http/http_server_properties_impl.h" |
| 25 #include "net/http/http_stream.h" | 25 #include "net/http/http_stream.h" |
| 26 #include "net/http/transport_security_state.h" | 26 #include "net/http/transport_security_state.h" |
| 27 #include "net/log/net_log.h" | 27 #include "net/log/net_log.h" |
| 28 #include "net/net_features.h" |
| 28 #include "net/proxy/proxy_info.h" | 29 #include "net/proxy/proxy_info.h" |
| 29 #include "net/proxy/proxy_service.h" | 30 #include "net/proxy/proxy_service.h" |
| 30 #include "net/quic/quic_server_id.h" | 31 #include "net/quic/quic_server_id.h" |
| 31 #include "net/quic/test_tools/quic_stream_factory_peer.h" | 32 #include "net/quic/test_tools/quic_stream_factory_peer.h" |
| 32 #include "net/socket/client_socket_handle.h" | 33 #include "net/socket/client_socket_handle.h" |
| 33 #include "net/socket/mock_client_socket_pool_manager.h" | 34 #include "net/socket/mock_client_socket_pool_manager.h" |
| 34 #include "net/socket/next_proto.h" | 35 #include "net/socket/next_proto.h" |
| 35 #include "net/socket/socket_test_util.h" | 36 #include "net/socket/socket_test_util.h" |
| 36 #include "net/spdy/spdy_session.h" | 37 #include "net/spdy/spdy_session.h" |
| 37 #include "net/spdy/spdy_session_pool.h" | 38 #include "net/spdy/spdy_session_pool.h" |
| 38 #include "net/spdy/spdy_test_util_common.h" | 39 #include "net/spdy/spdy_test_util_common.h" |
| 39 #include "net/ssl/ssl_config_service.h" | 40 #include "net/ssl/ssl_config_service.h" |
| 40 #include "net/ssl/ssl_config_service_defaults.h" | 41 #include "net/ssl/ssl_config_service_defaults.h" |
| 41 // This file can be included from net/http even though | 42 // This file can be included from net/http even though |
| 42 // it is in net/websockets because it doesn't | 43 // it is in net/websockets because it doesn't |
| 43 // introduce any link dependency to net/websockets. | 44 // introduce any link dependency to net/websockets. |
| 44 #include "net/websockets/websocket_handshake_stream_base.h" | 45 #include "net/websockets/websocket_handshake_stream_base.h" |
| 45 #include "testing/gtest/include/gtest/gtest.h" | 46 #include "testing/gtest/include/gtest/gtest.h" |
| 46 | 47 |
| 47 #if defined(ENABLE_BIDIRECTIONAL_STREAM) | 48 #if BUILDFLAG(ENABLE_BIDIRECTIONAL_STREAM) |
| 48 #include "net/http/bidirectional_stream_job.h" | 49 #include "net/http/bidirectional_stream_job.h" |
| 49 #endif | 50 #endif |
| 50 | 51 |
| 51 namespace net { | 52 namespace net { |
| 52 | 53 |
| 53 class BidirectionalStreamJob; | 54 class BidirectionalStreamJob; |
| 54 | 55 |
| 55 namespace { | 56 namespace { |
| 56 | 57 |
| 57 class MockWebSocketHandshakeStream : public WebSocketHandshakeStreamBase { | 58 class MockWebSocketHandshakeStream : public WebSocketHandshakeStreamBase { |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 used_ssl_config_ = used_ssl_config; | 174 used_ssl_config_ = used_ssl_config; |
| 174 used_proxy_info_ = used_proxy_info; | 175 used_proxy_info_ = used_proxy_info; |
| 175 } | 176 } |
| 176 | 177 |
| 177 void OnBidirectionalStreamJobReady(const SSLConfig& used_ssl_config, | 178 void OnBidirectionalStreamJobReady(const SSLConfig& used_ssl_config, |
| 178 const ProxyInfo& used_proxy_info, | 179 const ProxyInfo& used_proxy_info, |
| 179 BidirectionalStreamJob* stream) override { | 180 BidirectionalStreamJob* stream) override { |
| 180 stream_done_ = true; | 181 stream_done_ = true; |
| 181 if (waiting_for_stream_) | 182 if (waiting_for_stream_) |
| 182 base::MessageLoop::current()->QuitWhenIdle(); | 183 base::MessageLoop::current()->QuitWhenIdle(); |
| 183 #if defined(ENABLE_BIDIRECTIONAL_STREAM) | 184 #if BUILDFLAG(ENABLE_BIDIRECTIONAL_STREAM) |
| 184 bidirectional_stream_job_.reset(stream); | 185 bidirectional_stream_job_.reset(stream); |
| 185 #else | 186 #else |
| 186 DCHECK(!stream); | 187 DCHECK(!stream); |
| 187 #endif | 188 #endif |
| 188 used_ssl_config_ = used_ssl_config; | 189 used_ssl_config_ = used_ssl_config; |
| 189 used_proxy_info_ = used_proxy_info; | 190 used_proxy_info_ = used_proxy_info; |
| 190 } | 191 } |
| 191 | 192 |
| 192 void OnStreamFailed(int status, | 193 void OnStreamFailed(int status, |
| 193 const SSLConfig& used_ssl_config, | 194 const SSLConfig& used_ssl_config, |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 } | 236 } |
| 236 | 237 |
| 237 HttpStream* stream() { | 238 HttpStream* stream() { |
| 238 return stream_.get(); | 239 return stream_.get(); |
| 239 } | 240 } |
| 240 | 241 |
| 241 MockWebSocketHandshakeStream* websocket_stream() { | 242 MockWebSocketHandshakeStream* websocket_stream() { |
| 242 return static_cast<MockWebSocketHandshakeStream*>(websocket_stream_.get()); | 243 return static_cast<MockWebSocketHandshakeStream*>(websocket_stream_.get()); |
| 243 } | 244 } |
| 244 | 245 |
| 245 #if defined(ENABLE_BIDIRECTIONAL_STREAM) | 246 #if BUILDFLAG(ENABLE_BIDIRECTIONAL_STREAM) |
| 246 BidirectionalStreamJob* bidirectional_stream_job() { | 247 BidirectionalStreamJob* bidirectional_stream_job() { |
| 247 return bidirectional_stream_job_.get(); | 248 return bidirectional_stream_job_.get(); |
| 248 } | 249 } |
| 249 #endif | 250 #endif |
| 250 | 251 |
| 251 bool stream_done() const { return stream_done_; } | 252 bool stream_done() const { return stream_done_; } |
| 252 int error_status() const { return error_status_; } | 253 int error_status() const { return error_status_; } |
| 253 | 254 |
| 254 private: | 255 private: |
| 255 bool waiting_for_stream_; | 256 bool waiting_for_stream_; |
| 256 bool stream_done_; | 257 bool stream_done_; |
| 257 scoped_ptr<HttpStream> stream_; | 258 scoped_ptr<HttpStream> stream_; |
| 258 scoped_ptr<WebSocketHandshakeStreamBase> websocket_stream_; | 259 scoped_ptr<WebSocketHandshakeStreamBase> websocket_stream_; |
| 259 #if defined(ENABLE_BIDIRECTIONAL_STREAM) | 260 #if BUILDFLAG(ENABLE_BIDIRECTIONAL_STREAM) |
| 260 scoped_ptr<BidirectionalStreamJob> bidirectional_stream_job_; | 261 scoped_ptr<BidirectionalStreamJob> bidirectional_stream_job_; |
| 261 #endif | 262 #endif |
| 262 SSLConfig used_ssl_config_; | 263 SSLConfig used_ssl_config_; |
| 263 ProxyInfo used_proxy_info_; | 264 ProxyInfo used_proxy_info_; |
| 264 int error_status_; | 265 int error_status_; |
| 265 | 266 |
| 266 DISALLOW_COPY_AND_ASSIGN(StreamRequestWaiter); | 267 DISALLOW_COPY_AND_ASSIGN(StreamRequestWaiter); |
| 267 }; | 268 }; |
| 268 | 269 |
| 269 class WebSocketSpdyHandshakeStream : public MockWebSocketHandshakeStream { | 270 class WebSocketSpdyHandshakeStream : public MockWebSocketHandshakeStream { |
| (...skipping 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1377 EXPECT_EQ(1, GetSocketPoolGroupCount( | 1378 EXPECT_EQ(1, GetSocketPoolGroupCount( |
| 1378 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1379 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); |
| 1379 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1380 EXPECT_EQ(0, GetSocketPoolGroupCount( |
| 1380 session->GetTransportSocketPool( | 1381 session->GetTransportSocketPool( |
| 1381 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1382 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 1382 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1383 EXPECT_EQ(0, GetSocketPoolGroupCount( |
| 1383 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1384 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 1384 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 1385 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
| 1385 } | 1386 } |
| 1386 | 1387 |
| 1387 #if defined(ENABLE_BIDIRECTIONAL_STREAM) | 1388 #if BUILDFLAG(ENABLE_BIDIRECTIONAL_STREAM) |
| 1388 TEST_P(HttpStreamFactoryTest, RequestBidirectionalStreamJob) { | 1389 TEST_P(HttpStreamFactoryTest, RequestBidirectionalStreamJob) { |
| 1389 SpdySessionDependencies session_deps(GetParam(), | 1390 SpdySessionDependencies session_deps(GetParam(), |
| 1390 ProxyService::CreateDirect()); | 1391 ProxyService::CreateDirect()); |
| 1391 | 1392 |
| 1392 MockRead mock_read(ASYNC, OK); | 1393 MockRead mock_read(ASYNC, OK); |
| 1393 SequencedSocketData socket_data(&mock_read, 1, nullptr, 0); | 1394 SequencedSocketData socket_data(&mock_read, 1, nullptr, 0); |
| 1394 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 1395 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
| 1395 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 1396 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
| 1396 | 1397 |
| 1397 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); | 1398 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1681 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 1682 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
| 1682 | 1683 |
| 1683 // Make sure there is no orphaned job. it is already canceled. | 1684 // Make sure there is no orphaned job. it is already canceled. |
| 1684 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( | 1685 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( |
| 1685 session->http_stream_factory_for_websocket())->num_orphaned_jobs()); | 1686 session->http_stream_factory_for_websocket())->num_orphaned_jobs()); |
| 1686 } | 1687 } |
| 1687 | 1688 |
| 1688 } // namespace | 1689 } // namespace |
| 1689 | 1690 |
| 1690 } // namespace net | 1691 } // namespace net |
| OLD | NEW |