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 <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 int ReadResponseHeaders(const CompletionCallback& callback) override { | 74 int ReadResponseHeaders(const CompletionCallback& callback) override { |
75 return ERR_IO_PENDING; | 75 return ERR_IO_PENDING; |
76 } | 76 } |
77 int ReadResponseBody(IOBuffer* buf, | 77 int ReadResponseBody(IOBuffer* buf, |
78 int buf_len, | 78 int buf_len, |
79 const CompletionCallback& callback) override { | 79 const CompletionCallback& callback) override { |
80 return ERR_IO_PENDING; | 80 return ERR_IO_PENDING; |
81 } | 81 } |
82 void Close(bool not_reusable) override {} | 82 void Close(bool not_reusable) override {} |
83 bool IsResponseBodyComplete() const override { return false; } | 83 bool IsResponseBodyComplete() const override { return false; } |
84 bool CanFindEndOfResponse() const override { return false; } | |
85 bool IsConnectionReused() const override { return false; } | 84 bool IsConnectionReused() const override { return false; } |
86 void SetConnectionReused() override {} | 85 void SetConnectionReused() override {} |
87 bool IsConnectionReusable() const override { return false; } | 86 bool CanReuseConnection() const override { return false; } |
88 int64 GetTotalReceivedBytes() const override { return 0; } | 87 int64 GetTotalReceivedBytes() const override { return 0; } |
89 bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override { | 88 bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override { |
90 return false; | 89 return false; |
91 } | 90 } |
92 void GetSSLInfo(SSLInfo* ssl_info) override {} | 91 void GetSSLInfo(SSLInfo* ssl_info) override {} |
93 void GetSSLCertRequestInfo(SSLCertRequestInfo* cert_request_info) override {} | 92 void GetSSLCertRequestInfo(SSLCertRequestInfo* cert_request_info) override {} |
94 bool IsSpdyHttpStream() const override { return false; } | |
95 void Drain(HttpNetworkSession* session) override {} | 93 void Drain(HttpNetworkSession* session) override {} |
96 void SetPriority(RequestPriority priority) override {} | 94 void SetPriority(RequestPriority priority) override {} |
97 UploadProgress GetUploadProgress() const override { return UploadProgress(); } | 95 UploadProgress GetUploadProgress() const override { return UploadProgress(); } |
98 HttpStream* RenewStreamForAuth() override { return nullptr; } | 96 HttpStream* RenewStreamForAuth() override { return nullptr; } |
99 | 97 |
100 scoped_ptr<WebSocketStream> Upgrade() override { | 98 scoped_ptr<WebSocketStream> Upgrade() override { |
101 return scoped_ptr<WebSocketStream>(); | 99 return scoped_ptr<WebSocketStream>(); |
102 } | 100 } |
103 | 101 |
104 private: | 102 private: |
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
771 waiter.WaitForStream(); | 769 waiter.WaitForStream(); |
772 | 770 |
773 // The stream shouldn't come from spdy as we are using different privacy mode | 771 // The stream shouldn't come from spdy as we are using different privacy mode |
774 EXPECT_FALSE(request->using_spdy()); | 772 EXPECT_FALSE(request->using_spdy()); |
775 | 773 |
776 SSLConfig used_ssl_config = waiter.used_ssl_config(); | 774 SSLConfig used_ssl_config = waiter.used_ssl_config(); |
777 EXPECT_EQ(used_ssl_config.channel_id_enabled, ssl_config.channel_id_enabled); | 775 EXPECT_EQ(used_ssl_config.channel_id_enabled, ssl_config.channel_id_enabled); |
778 } | 776 } |
779 | 777 |
780 namespace { | 778 namespace { |
| 779 |
781 // Return count of distinct groups in given socket pool. | 780 // Return count of distinct groups in given socket pool. |
782 int GetSocketPoolGroupCount(ClientSocketPool* pool) { | 781 int GetSocketPoolGroupCount(ClientSocketPool* pool) { |
783 int count = 0; | 782 int count = 0; |
784 scoped_ptr<base::DictionaryValue> dict(pool->GetInfoAsValue("", "", false)); | 783 scoped_ptr<base::DictionaryValue> dict(pool->GetInfoAsValue("", "", false)); |
785 EXPECT_TRUE(dict != nullptr); | 784 EXPECT_TRUE(dict != nullptr); |
786 base::DictionaryValue* groups = nullptr; | 785 base::DictionaryValue* groups = nullptr; |
787 if (dict->GetDictionary("groups", &groups) && (groups != nullptr)) { | 786 if (dict->GetDictionary("groups", &groups) && (groups != nullptr)) { |
788 count = static_cast<int>(groups->size()); | 787 count = static_cast<int>(groups->size()); |
789 } | 788 } |
790 return count; | 789 return count; |
791 } | 790 } |
| 791 |
| 792 // Return count of distinct spdy sessions. |
| 793 int GetSpdySessionCount(HttpNetworkSession* session) { |
| 794 scoped_ptr<base::Value> value( |
| 795 session->spdy_session_pool()->SpdySessionPoolInfoToValue()); |
| 796 base::ListValue* session_list; |
| 797 if (!value || !value->GetAsList(&session_list)) |
| 798 return -1; |
| 799 return session_list->GetSize(); |
| 800 } |
| 801 |
792 } // namespace | 802 } // namespace |
793 | 803 |
794 TEST_P(HttpStreamFactoryTest, PrivacyModeUsesDifferentSocketPoolGroup) { | 804 TEST_P(HttpStreamFactoryTest, PrivacyModeUsesDifferentSocketPoolGroup) { |
795 SpdySessionDependencies session_deps( | 805 SpdySessionDependencies session_deps( |
796 GetParam(), ProxyService::CreateDirect()); | 806 GetParam(), ProxyService::CreateDirect()); |
797 | 807 |
798 StaticSocketDataProvider socket_data; | 808 StaticSocketDataProvider socket_data; |
799 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 809 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
800 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 810 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
801 | 811 |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
896 request_info, | 906 request_info, |
897 DEFAULT_PRIORITY, | 907 DEFAULT_PRIORITY, |
898 ssl_config, | 908 ssl_config, |
899 ssl_config, | 909 ssl_config, |
900 &waiter, | 910 &waiter, |
901 BoundNetLog())); | 911 BoundNetLog())); |
902 waiter.WaitForStream(); | 912 waiter.WaitForStream(); |
903 EXPECT_TRUE(waiter.stream_done()); | 913 EXPECT_TRUE(waiter.stream_done()); |
904 ASSERT_TRUE(nullptr != waiter.stream()); | 914 ASSERT_TRUE(nullptr != waiter.stream()); |
905 EXPECT_TRUE(nullptr == waiter.websocket_stream()); | 915 EXPECT_TRUE(nullptr == waiter.websocket_stream()); |
906 EXPECT_FALSE(waiter.stream()->IsSpdyHttpStream()); | |
907 | 916 |
| 917 EXPECT_EQ(0, GetSpdySessionCount(session.get())); |
908 EXPECT_EQ(1, GetSocketPoolGroupCount( | 918 EXPECT_EQ(1, GetSocketPoolGroupCount( |
909 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 919 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); |
910 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( | 920 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( |
911 HttpNetworkSession::NORMAL_SOCKET_POOL))); | 921 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
912 EXPECT_EQ(0, GetSocketPoolGroupCount( | 922 EXPECT_EQ(0, GetSocketPoolGroupCount( |
913 session->GetTransportSocketPool( | 923 session->GetTransportSocketPool( |
914 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 924 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
915 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( | 925 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( |
916 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 926 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
917 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 927 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
(...skipping 27 matching lines...) Expand all Loading... |
945 request_info, | 955 request_info, |
946 DEFAULT_PRIORITY, | 956 DEFAULT_PRIORITY, |
947 ssl_config, | 957 ssl_config, |
948 ssl_config, | 958 ssl_config, |
949 &waiter, | 959 &waiter, |
950 BoundNetLog())); | 960 BoundNetLog())); |
951 waiter.WaitForStream(); | 961 waiter.WaitForStream(); |
952 EXPECT_TRUE(waiter.stream_done()); | 962 EXPECT_TRUE(waiter.stream_done()); |
953 ASSERT_TRUE(nullptr != waiter.stream()); | 963 ASSERT_TRUE(nullptr != waiter.stream()); |
954 EXPECT_TRUE(nullptr == waiter.websocket_stream()); | 964 EXPECT_TRUE(nullptr == waiter.websocket_stream()); |
955 EXPECT_FALSE(waiter.stream()->IsSpdyHttpStream()); | 965 |
| 966 EXPECT_EQ(0, GetSpdySessionCount(session.get())); |
956 EXPECT_EQ(1, GetSocketPoolGroupCount( | 967 EXPECT_EQ(1, GetSocketPoolGroupCount( |
957 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 968 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); |
958 EXPECT_EQ(1, GetSocketPoolGroupCount( | 969 EXPECT_EQ(1, GetSocketPoolGroupCount( |
959 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 970 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); |
960 EXPECT_EQ(0, GetSocketPoolGroupCount( | 971 EXPECT_EQ(0, GetSocketPoolGroupCount( |
961 session->GetTransportSocketPool( | 972 session->GetTransportSocketPool( |
962 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 973 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
963 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( | 974 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( |
964 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 975 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
965 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 976 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
(...skipping 24 matching lines...) Expand all Loading... |
990 request_info, | 1001 request_info, |
991 DEFAULT_PRIORITY, | 1002 DEFAULT_PRIORITY, |
992 ssl_config, | 1003 ssl_config, |
993 ssl_config, | 1004 ssl_config, |
994 &waiter, | 1005 &waiter, |
995 BoundNetLog())); | 1006 BoundNetLog())); |
996 waiter.WaitForStream(); | 1007 waiter.WaitForStream(); |
997 EXPECT_TRUE(waiter.stream_done()); | 1008 EXPECT_TRUE(waiter.stream_done()); |
998 ASSERT_TRUE(nullptr != waiter.stream()); | 1009 ASSERT_TRUE(nullptr != waiter.stream()); |
999 EXPECT_TRUE(nullptr == waiter.websocket_stream()); | 1010 EXPECT_TRUE(nullptr == waiter.websocket_stream()); |
1000 EXPECT_FALSE(waiter.stream()->IsSpdyHttpStream()); | 1011 |
| 1012 EXPECT_EQ(0, GetSpdySessionCount(session.get())); |
1001 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1013 EXPECT_EQ(0, GetSocketPoolGroupCount( |
1002 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1014 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1003 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1015 EXPECT_EQ(0, GetSocketPoolGroupCount( |
1004 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1016 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1005 EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( | 1017 EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( |
1006 HttpNetworkSession::NORMAL_SOCKET_POOL, | 1018 HttpNetworkSession::NORMAL_SOCKET_POOL, |
1007 HostPortPair("myproxy", 8888)))); | 1019 HostPortPair("myproxy", 8888)))); |
1008 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( | 1020 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( |
1009 HttpNetworkSession::NORMAL_SOCKET_POOL, | 1021 HttpNetworkSession::NORMAL_SOCKET_POOL, |
1010 HostPortPair("myproxy", 8888)))); | 1022 HostPortPair("myproxy", 8888)))); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1162 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( | 1174 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( |
1163 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, | 1175 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, |
1164 HostPortPair("myproxy", 8888)))); | 1176 HostPortPair("myproxy", 8888)))); |
1165 EXPECT_FALSE(waiter.used_proxy_info().is_direct()); | 1177 EXPECT_FALSE(waiter.used_proxy_info().is_direct()); |
1166 } | 1178 } |
1167 | 1179 |
1168 TEST_P(HttpStreamFactoryTest, RequestSpdyHttpStream) { | 1180 TEST_P(HttpStreamFactoryTest, RequestSpdyHttpStream) { |
1169 SpdySessionDependencies session_deps(GetParam(), | 1181 SpdySessionDependencies session_deps(GetParam(), |
1170 ProxyService::CreateDirect()); | 1182 ProxyService::CreateDirect()); |
1171 | 1183 |
1172 MockRead mock_read(ASYNC, OK); | 1184 MockRead mock_read(SYNCHRONOUS, ERR_IO_PENDING); |
1173 SequencedSocketData socket_data(&mock_read, 1, nullptr, 0); | 1185 SequencedSocketData socket_data(&mock_read, 1, nullptr, 0); |
1174 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 1186 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
1175 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 1187 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
1176 | 1188 |
1177 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); | 1189 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); |
1178 ssl_socket_data.SetNextProto(GetParam()); | 1190 ssl_socket_data.SetNextProto(GetParam()); |
1179 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); | 1191 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); |
1180 | 1192 |
1181 HostPortPair host_port_pair("www.google.com", 443); | 1193 HostPortPair host_port_pair("www.google.com", 443); |
1182 scoped_refptr<HttpNetworkSession> session( | 1194 scoped_refptr<HttpNetworkSession> session( |
(...skipping 12 matching lines...) Expand all Loading... |
1195 request_info, | 1207 request_info, |
1196 DEFAULT_PRIORITY, | 1208 DEFAULT_PRIORITY, |
1197 ssl_config, | 1209 ssl_config, |
1198 ssl_config, | 1210 ssl_config, |
1199 &waiter, | 1211 &waiter, |
1200 BoundNetLog())); | 1212 BoundNetLog())); |
1201 waiter.WaitForStream(); | 1213 waiter.WaitForStream(); |
1202 EXPECT_TRUE(waiter.stream_done()); | 1214 EXPECT_TRUE(waiter.stream_done()); |
1203 EXPECT_TRUE(nullptr == waiter.websocket_stream()); | 1215 EXPECT_TRUE(nullptr == waiter.websocket_stream()); |
1204 ASSERT_TRUE(nullptr != waiter.stream()); | 1216 ASSERT_TRUE(nullptr != waiter.stream()); |
1205 EXPECT_TRUE(waiter.stream()->IsSpdyHttpStream()); | 1217 |
| 1218 EXPECT_EQ(1, GetSpdySessionCount(session.get())); |
1206 EXPECT_EQ(1, GetSocketPoolGroupCount( | 1219 EXPECT_EQ(1, GetSocketPoolGroupCount( |
1207 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1220 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1208 EXPECT_EQ(1, GetSocketPoolGroupCount( | 1221 EXPECT_EQ(1, GetSocketPoolGroupCount( |
1209 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1222 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1210 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1223 EXPECT_EQ(0, GetSocketPoolGroupCount( |
1211 session->GetTransportSocketPool( | 1224 session->GetTransportSocketPool( |
1212 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1225 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
1213 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1226 EXPECT_EQ(0, GetSocketPoolGroupCount( |
1214 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1227 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
1215 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 1228 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1412 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 1425 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
1413 | 1426 |
1414 // Make sure there is no orphaned job. it is already canceled. | 1427 // Make sure there is no orphaned job. it is already canceled. |
1415 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( | 1428 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( |
1416 session->http_stream_factory_for_websocket())->num_orphaned_jobs()); | 1429 session->http_stream_factory_for_websocket())->num_orphaned_jobs()); |
1417 } | 1430 } |
1418 | 1431 |
1419 } // namespace | 1432 } // namespace |
1420 | 1433 |
1421 } // namespace net | 1434 } // namespace net |
OLD | NEW |