| 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/spdy/spdy_session.h" | 5 #include "net/spdy/spdy_session.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 : old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( | 100 : old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( |
| 101 HttpNetworkSession::NORMAL_SOCKET_POOL)), | 101 HttpNetworkSession::NORMAL_SOCKET_POOL)), |
| 102 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( | 102 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( |
| 103 HttpNetworkSession::NORMAL_SOCKET_POOL)), | 103 HttpNetworkSession::NORMAL_SOCKET_POOL)), |
| 104 spdy_util_(GetParam()), | 104 spdy_util_(GetParam()), |
| 105 session_deps_(GetParam()), | 105 session_deps_(GetParam()), |
| 106 spdy_session_pool_(NULL), | 106 spdy_session_pool_(NULL), |
| 107 test_url_(kTestUrl), | 107 test_url_(kTestUrl), |
| 108 test_host_port_pair_(kTestHost, kTestPort), | 108 test_host_port_pair_(kTestHost, kTestPort), |
| 109 key_(test_host_port_pair_, ProxyServer::Direct(), | 109 key_(test_host_port_pair_, ProxyServer::Direct(), |
| 110 PRIVACY_MODE_DISABLED) { | 110 kPrivacyModeDisabled) { |
| 111 } | 111 } |
| 112 | 112 |
| 113 virtual ~SpdySessionTest() { | 113 virtual ~SpdySessionTest() { |
| 114 // Important to restore the per-pool limit first, since the pool limit must | 114 // Important to restore the per-pool limit first, since the pool limit must |
| 115 // always be greater than group limit, and the tests reduce both limits. | 115 // always be greater than group limit, and the tests reduce both limits. |
| 116 ClientSocketPoolManager::set_max_sockets_per_pool( | 116 ClientSocketPoolManager::set_max_sockets_per_pool( |
| 117 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_pool_sockets_); | 117 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_pool_sockets_); |
| 118 ClientSocketPoolManager::set_max_sockets_per_group( | 118 ClientSocketPoolManager::set_max_sockets_per_group( |
| 119 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_group_sockets_); | 119 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_group_sockets_); |
| 120 } | 120 } |
| (...skipping 2591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2712 session_deps_.socket_factory->AddSocketDataProvider(&data); | 2712 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 2713 | 2713 |
| 2714 CreateNetworkSession(); | 2714 CreateNetworkSession(); |
| 2715 | 2715 |
| 2716 TransportClientSocketPool* pool = | 2716 TransportClientSocketPool* pool = |
| 2717 http_session_->GetTransportSocketPool( | 2717 http_session_->GetTransportSocketPool( |
| 2718 HttpNetworkSession::NORMAL_SOCKET_POOL); | 2718 HttpNetworkSession::NORMAL_SOCKET_POOL); |
| 2719 | 2719 |
| 2720 // Create an idle SPDY session. | 2720 // Create an idle SPDY session. |
| 2721 SpdySessionKey key1(HostPortPair("1.com", 80), ProxyServer::Direct(), | 2721 SpdySessionKey key1(HostPortPair("1.com", 80), ProxyServer::Direct(), |
| 2722 PRIVACY_MODE_DISABLED); | 2722 kPrivacyModeDisabled); |
| 2723 base::WeakPtr<SpdySession> session1 = | 2723 base::WeakPtr<SpdySession> session1 = |
| 2724 CreateInsecureSpdySession(http_session_, key1, BoundNetLog()); | 2724 CreateInsecureSpdySession(http_session_, key1, BoundNetLog()); |
| 2725 EXPECT_FALSE(pool->IsStalled()); | 2725 EXPECT_FALSE(pool->IsStalled()); |
| 2726 | 2726 |
| 2727 // Trying to create a new connection should cause the pool to be stalled, and | 2727 // Trying to create a new connection should cause the pool to be stalled, and |
| 2728 // post a task asynchronously to try and close the session. | 2728 // post a task asynchronously to try and close the session. |
| 2729 TestCompletionCallback callback2; | 2729 TestCompletionCallback callback2; |
| 2730 HostPortPair host_port2("2.com", 80); | 2730 HostPortPair host_port2("2.com", 80); |
| 2731 scoped_refptr<TransportSocketParams> params2( | 2731 scoped_refptr<TransportSocketParams> params2( |
| 2732 new TransportSocketParams(host_port2, false, false, | 2732 new TransportSocketParams(host_port2, false, false, |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2772 "3.com", "192.168.0.3", std::string()); | 2772 "3.com", "192.168.0.3", std::string()); |
| 2773 | 2773 |
| 2774 CreateNetworkSession(); | 2774 CreateNetworkSession(); |
| 2775 | 2775 |
| 2776 TransportClientSocketPool* pool = | 2776 TransportClientSocketPool* pool = |
| 2777 http_session_->GetTransportSocketPool( | 2777 http_session_->GetTransportSocketPool( |
| 2778 HttpNetworkSession::NORMAL_SOCKET_POOL); | 2778 HttpNetworkSession::NORMAL_SOCKET_POOL); |
| 2779 | 2779 |
| 2780 // Create an idle SPDY session. | 2780 // Create an idle SPDY session. |
| 2781 SpdySessionKey key1(HostPortPair("1.com", 80), ProxyServer::Direct(), | 2781 SpdySessionKey key1(HostPortPair("1.com", 80), ProxyServer::Direct(), |
| 2782 PRIVACY_MODE_DISABLED); | 2782 kPrivacyModeDisabled); |
| 2783 base::WeakPtr<SpdySession> session1 = | 2783 base::WeakPtr<SpdySession> session1 = |
| 2784 CreateInsecureSpdySession(http_session_, key1, BoundNetLog()); | 2784 CreateInsecureSpdySession(http_session_, key1, BoundNetLog()); |
| 2785 EXPECT_FALSE(pool->IsStalled()); | 2785 EXPECT_FALSE(pool->IsStalled()); |
| 2786 | 2786 |
| 2787 // Set up an alias for the idle SPDY session, increasing its ref count to 2. | 2787 // Set up an alias for the idle SPDY session, increasing its ref count to 2. |
| 2788 SpdySessionKey key2(HostPortPair("2.com", 80), ProxyServer::Direct(), | 2788 SpdySessionKey key2(HostPortPair("2.com", 80), ProxyServer::Direct(), |
| 2789 PRIVACY_MODE_DISABLED); | 2789 kPrivacyModeDisabled); |
| 2790 HostResolver::RequestInfo info(key2.host_port_pair()); | 2790 HostResolver::RequestInfo info(key2.host_port_pair()); |
| 2791 AddressList addresses; | 2791 AddressList addresses; |
| 2792 // Pre-populate the DNS cache, since a synchronous resolution is required in | 2792 // Pre-populate the DNS cache, since a synchronous resolution is required in |
| 2793 // order to create the alias. | 2793 // order to create the alias. |
| 2794 session_deps_.host_resolver->Resolve(info, | 2794 session_deps_.host_resolver->Resolve(info, |
| 2795 DEFAULT_PRIORITY, | 2795 DEFAULT_PRIORITY, |
| 2796 &addresses, | 2796 &addresses, |
| 2797 CompletionCallback(), | 2797 CompletionCallback(), |
| 2798 NULL, | 2798 NULL, |
| 2799 BoundNetLog()); | 2799 BoundNetLog()); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2860 | 2860 |
| 2861 CreateNetworkSession(); | 2861 CreateNetworkSession(); |
| 2862 | 2862 |
| 2863 TransportClientSocketPool* pool = | 2863 TransportClientSocketPool* pool = |
| 2864 http_session_->GetTransportSocketPool( | 2864 http_session_->GetTransportSocketPool( |
| 2865 HttpNetworkSession::NORMAL_SOCKET_POOL); | 2865 HttpNetworkSession::NORMAL_SOCKET_POOL); |
| 2866 | 2866 |
| 2867 // Create a SPDY session. | 2867 // Create a SPDY session. |
| 2868 GURL url1(kDefaultURL); | 2868 GURL url1(kDefaultURL); |
| 2869 SpdySessionKey key1(HostPortPair(url1.host(), 80), | 2869 SpdySessionKey key1(HostPortPair(url1.host(), 80), |
| 2870 ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 2870 ProxyServer::Direct(), kPrivacyModeDisabled); |
| 2871 base::WeakPtr<SpdySession> session1 = | 2871 base::WeakPtr<SpdySession> session1 = |
| 2872 CreateInsecureSpdySession(http_session_, key1, BoundNetLog()); | 2872 CreateInsecureSpdySession(http_session_, key1, BoundNetLog()); |
| 2873 EXPECT_FALSE(pool->IsStalled()); | 2873 EXPECT_FALSE(pool->IsStalled()); |
| 2874 | 2874 |
| 2875 // Create a stream using the session, and send a request. | 2875 // Create a stream using the session, and send a request. |
| 2876 | 2876 |
| 2877 TestCompletionCallback callback1; | 2877 TestCompletionCallback callback1; |
| 2878 base::WeakPtr<SpdyStream> spdy_stream1 = | 2878 base::WeakPtr<SpdyStream> spdy_stream1 = |
| 2879 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, | 2879 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, |
| 2880 session1, url1, DEFAULT_PRIORITY, | 2880 session1, url1, DEFAULT_PRIORITY, |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2921 EXPECT_EQ(OK, callback2.WaitForResult()); | 2921 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 2922 } | 2922 } |
| 2923 | 2923 |
| 2924 // Verify that SpdySessionKey and therefore SpdySession is different when | 2924 // Verify that SpdySessionKey and therefore SpdySession is different when |
| 2925 // privacy mode is enabled or disabled. | 2925 // privacy mode is enabled or disabled. |
| 2926 TEST_P(SpdySessionTest, SpdySessionKeyPrivacyMode) { | 2926 TEST_P(SpdySessionTest, SpdySessionKeyPrivacyMode) { |
| 2927 CreateDeterministicNetworkSession(); | 2927 CreateDeterministicNetworkSession(); |
| 2928 | 2928 |
| 2929 HostPortPair host_port_pair("www.google.com", 443); | 2929 HostPortPair host_port_pair("www.google.com", 443); |
| 2930 SpdySessionKey key_privacy_enabled(host_port_pair, ProxyServer::Direct(), | 2930 SpdySessionKey key_privacy_enabled(host_port_pair, ProxyServer::Direct(), |
| 2931 PRIVACY_MODE_ENABLED); | 2931 kPrivacyModeEnabled); |
| 2932 SpdySessionKey key_privacy_disabled(host_port_pair, ProxyServer::Direct(), | 2932 SpdySessionKey key_privacy_disabled(host_port_pair, ProxyServer::Direct(), |
| 2933 PRIVACY_MODE_DISABLED); | 2933 kPrivacyModeDisabled); |
| 2934 | 2934 |
| 2935 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); | 2935 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); |
| 2936 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); | 2936 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); |
| 2937 | 2937 |
| 2938 // Add SpdySession with PrivacyMode Enabled to the pool. | 2938 // Add SpdySession with PrivacyMode Enabled to the pool. |
| 2939 base::WeakPtr<SpdySession> session_privacy_enabled = | 2939 base::WeakPtr<SpdySession> session_privacy_enabled = |
| 2940 CreateFakeSpdySession(spdy_session_pool_, key_privacy_enabled); | 2940 CreateFakeSpdySession(spdy_session_pool_, key_privacy_enabled); |
| 2941 | 2941 |
| 2942 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); | 2942 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); |
| 2943 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); | 2943 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); |
| (...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4139 TEST(MapRstStreamStatusToProtocolError, MapsValues) { | 4139 TEST(MapRstStreamStatusToProtocolError, MapsValues) { |
| 4140 CHECK_EQ(STATUS_CODE_PROTOCOL_ERROR, | 4140 CHECK_EQ(STATUS_CODE_PROTOCOL_ERROR, |
| 4141 MapRstStreamStatusToProtocolError( | 4141 MapRstStreamStatusToProtocolError( |
| 4142 RST_STREAM_PROTOCOL_ERROR)); | 4142 RST_STREAM_PROTOCOL_ERROR)); |
| 4143 CHECK_EQ(STATUS_CODE_FRAME_TOO_LARGE, | 4143 CHECK_EQ(STATUS_CODE_FRAME_TOO_LARGE, |
| 4144 MapRstStreamStatusToProtocolError( | 4144 MapRstStreamStatusToProtocolError( |
| 4145 RST_STREAM_FRAME_TOO_LARGE)); | 4145 RST_STREAM_FRAME_TOO_LARGE)); |
| 4146 } | 4146 } |
| 4147 | 4147 |
| 4148 } // namespace net | 4148 } // namespace net |
| OLD | NEW |