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 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 scoped_ptr<HttpStreamBase> stream_; | 194 scoped_ptr<HttpStreamBase> stream_; |
195 scoped_ptr<WebSocketStreamBase> websocket_stream_; | 195 scoped_ptr<WebSocketStreamBase> websocket_stream_; |
196 SSLConfig used_ssl_config_; | 196 SSLConfig used_ssl_config_; |
197 ProxyInfo used_proxy_info_; | 197 ProxyInfo used_proxy_info_; |
198 | 198 |
199 DISALLOW_COPY_AND_ASSIGN(StreamRequestWaiter); | 199 DISALLOW_COPY_AND_ASSIGN(StreamRequestWaiter); |
200 }; | 200 }; |
201 | 201 |
202 class WebSocketSpdyStream : public MockWebSocketStream { | 202 class WebSocketSpdyStream : public MockWebSocketStream { |
203 public: | 203 public: |
204 explicit WebSocketSpdyStream(SpdySession* spdy_session) | 204 explicit WebSocketSpdyStream(const base::WeakPtr<SpdySession>& spdy_session) |
205 : MockWebSocketStream(kStreamTypeSpdy), spdy_session_(spdy_session) {} | 205 : MockWebSocketStream(kStreamTypeSpdy), spdy_session_(spdy_session) {} |
206 | 206 |
207 virtual ~WebSocketSpdyStream() {} | 207 virtual ~WebSocketSpdyStream() {} |
208 | 208 |
209 SpdySession* spdy_session() { return spdy_session_.get(); } | 209 SpdySession* spdy_session() { return spdy_session_.get(); } |
210 | 210 |
211 private: | 211 private: |
212 scoped_refptr<SpdySession> spdy_session_; | 212 base::WeakPtr<SpdySession> spdy_session_; |
213 }; | 213 }; |
214 | 214 |
215 class WebSocketBasicStream : public MockWebSocketStream { | 215 class WebSocketBasicStream : public MockWebSocketStream { |
216 public: | 216 public: |
217 explicit WebSocketBasicStream(ClientSocketHandle* connection) | 217 explicit WebSocketBasicStream(ClientSocketHandle* connection) |
218 : MockWebSocketStream(kStreamTypeBasic), connection_(connection) {} | 218 : MockWebSocketStream(kStreamTypeBasic), connection_(connection) {} |
219 | 219 |
220 virtual ~WebSocketBasicStream() { | 220 virtual ~WebSocketBasicStream() { |
221 connection_->socket()->Disconnect(); | 221 connection_->socket()->Disconnect(); |
222 } | 222 } |
223 | 223 |
224 ClientSocketHandle* connection() { return connection_.get(); } | 224 ClientSocketHandle* connection() { return connection_.get(); } |
225 | 225 |
226 private: | 226 private: |
227 scoped_ptr<ClientSocketHandle> connection_; | 227 scoped_ptr<ClientSocketHandle> connection_; |
228 }; | 228 }; |
229 | 229 |
230 class WebSocketStreamFactory : public WebSocketStreamBase::Factory { | 230 class WebSocketStreamFactory : public WebSocketStreamBase::Factory { |
231 public: | 231 public: |
232 virtual ~WebSocketStreamFactory() {} | 232 virtual ~WebSocketStreamFactory() {} |
233 | 233 |
234 virtual WebSocketStreamBase* CreateBasicStream(ClientSocketHandle* connection, | 234 virtual WebSocketStreamBase* CreateBasicStream(ClientSocketHandle* connection, |
235 bool using_proxy) OVERRIDE { | 235 bool using_proxy) OVERRIDE { |
236 return new WebSocketBasicStream(connection); | 236 return new WebSocketBasicStream(connection); |
237 } | 237 } |
238 | 238 |
239 virtual WebSocketStreamBase* CreateSpdyStream( | 239 virtual WebSocketStreamBase* CreateSpdyStream( |
240 SpdySession* spdy_session, | 240 const base::WeakPtr<SpdySession>& spdy_session, |
241 bool use_relative_url) OVERRIDE { | 241 bool use_relative_url) OVERRIDE { |
242 return new WebSocketSpdyStream(spdy_session); | 242 return new WebSocketSpdyStream(spdy_session); |
243 } | 243 } |
244 }; | 244 }; |
245 | 245 |
246 struct TestCase { | 246 struct TestCase { |
247 int num_streams; | 247 int num_streams; |
248 bool ssl; | 248 bool ssl; |
249 }; | 249 }; |
250 | 250 |
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1015 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, | 1015 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, |
1016 HostPortPair("myproxy", 8888)))); | 1016 HostPortPair("myproxy", 8888)))); |
1017 EXPECT_FALSE(waiter.used_proxy_info().is_direct()); | 1017 EXPECT_FALSE(waiter.used_proxy_info().is_direct()); |
1018 } | 1018 } |
1019 | 1019 |
1020 TEST_P(HttpStreamFactoryTest, RequestSpdyHttpStream) { | 1020 TEST_P(HttpStreamFactoryTest, RequestSpdyHttpStream) { |
1021 SpdySessionDependencies session_deps(GetParam(), | 1021 SpdySessionDependencies session_deps(GetParam(), |
1022 ProxyService::CreateDirect()); | 1022 ProxyService::CreateDirect()); |
1023 | 1023 |
1024 MockRead mock_read(ASYNC, OK); | 1024 MockRead mock_read(ASYNC, OK); |
1025 StaticSocketDataProvider socket_data(&mock_read, 1, NULL, 0); | 1025 DeterministicSocketData socket_data(&mock_read, 1, NULL, 0); |
1026 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 1026 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
1027 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 1027 session_deps.deterministic_socket_factory->AddSocketDataProvider( |
| 1028 &socket_data); |
1028 | 1029 |
1029 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); | 1030 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); |
1030 ssl_socket_data.SetNextProto(GetParam()); | 1031 ssl_socket_data.SetNextProto(GetParam()); |
1031 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); | 1032 session_deps.deterministic_socket_factory->AddSSLSocketDataProvider( |
| 1033 &ssl_socket_data); |
1032 | 1034 |
1033 HostPortPair host_port_pair("www.google.com", 443); | 1035 HostPortPair host_port_pair("www.google.com", 443); |
1034 scoped_refptr<HttpNetworkSession> | 1036 scoped_refptr<HttpNetworkSession> |
1035 session(SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 1037 session(SpdySessionDependencies::SpdyCreateSessionDeterministic( |
| 1038 &session_deps)); |
1036 | 1039 |
1037 // Now request a stream. | 1040 // Now request a stream. |
1038 HttpRequestInfo request_info; | 1041 HttpRequestInfo request_info; |
1039 request_info.method = "GET"; | 1042 request_info.method = "GET"; |
1040 request_info.url = GURL("https://www.google.com"); | 1043 request_info.url = GURL("https://www.google.com"); |
1041 request_info.load_flags = 0; | 1044 request_info.load_flags = 0; |
1042 | 1045 |
1043 SSLConfig ssl_config; | 1046 SSLConfig ssl_config; |
1044 StreamRequestWaiter waiter; | 1047 StreamRequestWaiter waiter; |
1045 scoped_ptr<HttpStreamRequest> request( | 1048 scoped_ptr<HttpStreamRequest> request( |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1142 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1145 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
1143 EXPECT_TRUE(waiter1.used_proxy_info().is_direct()); | 1146 EXPECT_TRUE(waiter1.used_proxy_info().is_direct()); |
1144 } | 1147 } |
1145 | 1148 |
1146 TEST_P(HttpStreamFactoryTest, OrphanedWebSocketStream) { | 1149 TEST_P(HttpStreamFactoryTest, OrphanedWebSocketStream) { |
1147 UseAlternateProtocolsScopedSetter use_alternate_protocols(true); | 1150 UseAlternateProtocolsScopedSetter use_alternate_protocols(true); |
1148 SpdySessionDependencies session_deps(GetParam(), | 1151 SpdySessionDependencies session_deps(GetParam(), |
1149 ProxyService::CreateDirect()); | 1152 ProxyService::CreateDirect()); |
1150 | 1153 |
1151 MockRead mock_read(ASYNC, OK); | 1154 MockRead mock_read(ASYNC, OK); |
1152 StaticSocketDataProvider socket_data(&mock_read, 1, NULL, 0); | 1155 DeterministicSocketData socket_data(&mock_read, 1, NULL, 0); |
1153 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 1156 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
1154 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 1157 session_deps.deterministic_socket_factory->AddSocketDataProvider( |
| 1158 &socket_data); |
1155 | 1159 |
1156 MockRead mock_read2(ASYNC, OK); | 1160 MockRead mock_read2(ASYNC, OK); |
1157 StaticSocketDataProvider socket_data2(&mock_read2, 1, NULL, 0); | 1161 DeterministicSocketData socket_data2(&mock_read2, 1, NULL, 0); |
1158 socket_data2.set_connect_data(MockConnect(ASYNC, ERR_IO_PENDING)); | 1162 socket_data2.set_connect_data(MockConnect(ASYNC, ERR_IO_PENDING)); |
1159 session_deps.socket_factory->AddSocketDataProvider(&socket_data2); | 1163 session_deps.deterministic_socket_factory->AddSocketDataProvider( |
| 1164 &socket_data2); |
1160 | 1165 |
1161 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); | 1166 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); |
1162 ssl_socket_data.SetNextProto(GetParam()); | 1167 ssl_socket_data.SetNextProto(GetParam()); |
1163 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); | 1168 session_deps.deterministic_socket_factory->AddSSLSocketDataProvider( |
| 1169 &ssl_socket_data); |
1164 | 1170 |
1165 scoped_refptr<HttpNetworkSession> | 1171 scoped_refptr<HttpNetworkSession> |
1166 session(SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 1172 session(SpdySessionDependencies::SpdyCreateSessionDeterministic( |
| 1173 &session_deps)); |
1167 | 1174 |
1168 // Now request a stream. | 1175 // Now request a stream. |
1169 HttpRequestInfo request_info; | 1176 HttpRequestInfo request_info; |
1170 request_info.method = "GET"; | 1177 request_info.method = "GET"; |
1171 request_info.url = GURL("ws://www.google.com:8888"); | 1178 request_info.url = GURL("ws://www.google.com:8888"); |
1172 request_info.load_flags = 0; | 1179 request_info.load_flags = 0; |
1173 | 1180 |
1174 session->http_server_properties()->SetAlternateProtocol( | 1181 session->http_server_properties()->SetAlternateProtocol( |
1175 HostPortPair("www.google.com", 8888), | 1182 HostPortPair("www.google.com", 8888), |
1176 9999, | 1183 9999, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1209 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 1216 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
1210 | 1217 |
1211 // Make sure there is no orphaned job. it is already canceled. | 1218 // Make sure there is no orphaned job. it is already canceled. |
1212 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( | 1219 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( |
1213 session->websocket_stream_factory())->num_orphaned_jobs()); | 1220 session->websocket_stream_factory())->num_orphaned_jobs()); |
1214 } | 1221 } |
1215 | 1222 |
1216 } // namespace | 1223 } // namespace |
1217 | 1224 |
1218 } // namespace net | 1225 } // namespace net |
OLD | NEW |