| 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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 virtual ~MockWebSocketHandshakeStream() {} | 55 virtual ~MockWebSocketHandshakeStream() {} |
| 56 | 56 |
| 57 StreamType type() const { | 57 StreamType type() const { |
| 58 return type_; | 58 return type_; |
| 59 } | 59 } |
| 60 | 60 |
| 61 // HttpStreamBase methods | 61 // HttpStreamBase methods |
| 62 virtual int InitializeStream(const HttpRequestInfo* request_info, | 62 virtual int InitializeStream(const HttpRequestInfo* request_info, |
| 63 RequestPriority priority, | 63 RequestPriority priority, |
| 64 const BoundNetLog& net_log, | 64 const BoundNetLog& net_log, |
| 65 const CompletionCallback& callback) OVERRIDE { | 65 const CompletionCallback& callback) override { |
| 66 return ERR_IO_PENDING; | 66 return ERR_IO_PENDING; |
| 67 } | 67 } |
| 68 virtual int SendRequest(const HttpRequestHeaders& request_headers, | 68 virtual int SendRequest(const HttpRequestHeaders& request_headers, |
| 69 HttpResponseInfo* response, | 69 HttpResponseInfo* response, |
| 70 const CompletionCallback& callback) OVERRIDE { | 70 const CompletionCallback& callback) override { |
| 71 return ERR_IO_PENDING; | 71 return ERR_IO_PENDING; |
| 72 } | 72 } |
| 73 virtual int ReadResponseHeaders(const CompletionCallback& callback) OVERRIDE { | 73 virtual int ReadResponseHeaders(const CompletionCallback& callback) override { |
| 74 return ERR_IO_PENDING; | 74 return ERR_IO_PENDING; |
| 75 } | 75 } |
| 76 virtual int ReadResponseBody(IOBuffer* buf, | 76 virtual int ReadResponseBody(IOBuffer* buf, |
| 77 int buf_len, | 77 int buf_len, |
| 78 const CompletionCallback& callback) OVERRIDE { | 78 const CompletionCallback& callback) override { |
| 79 return ERR_IO_PENDING; | 79 return ERR_IO_PENDING; |
| 80 } | 80 } |
| 81 virtual void Close(bool not_reusable) OVERRIDE {} | 81 virtual void Close(bool not_reusable) override {} |
| 82 virtual bool IsResponseBodyComplete() const OVERRIDE { return false; } | 82 virtual bool IsResponseBodyComplete() const override { return false; } |
| 83 virtual bool CanFindEndOfResponse() const OVERRIDE { return false; } | 83 virtual bool CanFindEndOfResponse() const override { return false; } |
| 84 virtual bool IsConnectionReused() const OVERRIDE { return false; } | 84 virtual bool IsConnectionReused() const override { return false; } |
| 85 virtual void SetConnectionReused() OVERRIDE {} | 85 virtual void SetConnectionReused() override {} |
| 86 virtual bool IsConnectionReusable() const OVERRIDE { return false; } | 86 virtual bool IsConnectionReusable() const override { return false; } |
| 87 virtual int64 GetTotalReceivedBytes() const OVERRIDE { return 0; } | 87 virtual int64 GetTotalReceivedBytes() const override { return 0; } |
| 88 virtual bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const | 88 virtual bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const |
| 89 OVERRIDE { | 89 override { |
| 90 return false; | 90 return false; |
| 91 } | 91 } |
| 92 virtual void GetSSLInfo(SSLInfo* ssl_info) OVERRIDE {} | 92 virtual void GetSSLInfo(SSLInfo* ssl_info) override {} |
| 93 virtual void GetSSLCertRequestInfo( | 93 virtual void GetSSLCertRequestInfo( |
| 94 SSLCertRequestInfo* cert_request_info) OVERRIDE {} | 94 SSLCertRequestInfo* cert_request_info) override {} |
| 95 virtual bool IsSpdyHttpStream() const OVERRIDE { return false; } | 95 virtual bool IsSpdyHttpStream() const override { return false; } |
| 96 virtual void Drain(HttpNetworkSession* session) OVERRIDE {} | 96 virtual void Drain(HttpNetworkSession* session) override {} |
| 97 virtual void SetPriority(RequestPriority priority) OVERRIDE {} | 97 virtual void SetPriority(RequestPriority priority) override {} |
| 98 | 98 |
| 99 virtual scoped_ptr<WebSocketStream> Upgrade() OVERRIDE { | 99 virtual scoped_ptr<WebSocketStream> Upgrade() override { |
| 100 return scoped_ptr<WebSocketStream>(); | 100 return scoped_ptr<WebSocketStream>(); |
| 101 } | 101 } |
| 102 | 102 |
| 103 private: | 103 private: |
| 104 const StreamType type_; | 104 const StreamType type_; |
| 105 }; | 105 }; |
| 106 | 106 |
| 107 // HttpStreamFactoryImpl subclass that can wait until a preconnect is complete. | 107 // HttpStreamFactoryImpl subclass that can wait until a preconnect is complete. |
| 108 class MockHttpStreamFactoryImplForPreconnect : public HttpStreamFactoryImpl { | 108 class MockHttpStreamFactoryImplForPreconnect : public HttpStreamFactoryImpl { |
| 109 public: | 109 public: |
| 110 MockHttpStreamFactoryImplForPreconnect(HttpNetworkSession* session, | 110 MockHttpStreamFactoryImplForPreconnect(HttpNetworkSession* session, |
| 111 bool for_websockets) | 111 bool for_websockets) |
| 112 : HttpStreamFactoryImpl(session, for_websockets), | 112 : HttpStreamFactoryImpl(session, for_websockets), |
| 113 preconnect_done_(false), | 113 preconnect_done_(false), |
| 114 waiting_for_preconnect_(false) {} | 114 waiting_for_preconnect_(false) {} |
| 115 | 115 |
| 116 | 116 |
| 117 void WaitForPreconnects() { | 117 void WaitForPreconnects() { |
| 118 while (!preconnect_done_) { | 118 while (!preconnect_done_) { |
| 119 waiting_for_preconnect_ = true; | 119 waiting_for_preconnect_ = true; |
| 120 base::MessageLoop::current()->Run(); | 120 base::MessageLoop::current()->Run(); |
| 121 waiting_for_preconnect_ = false; | 121 waiting_for_preconnect_ = false; |
| 122 } | 122 } |
| 123 } | 123 } |
| 124 | 124 |
| 125 private: | 125 private: |
| 126 // HttpStreamFactoryImpl methods. | 126 // HttpStreamFactoryImpl methods. |
| 127 virtual void OnPreconnectsCompleteInternal() OVERRIDE { | 127 virtual void OnPreconnectsCompleteInternal() override { |
| 128 preconnect_done_ = true; | 128 preconnect_done_ = true; |
| 129 if (waiting_for_preconnect_) | 129 if (waiting_for_preconnect_) |
| 130 base::MessageLoop::current()->Quit(); | 130 base::MessageLoop::current()->Quit(); |
| 131 } | 131 } |
| 132 | 132 |
| 133 bool preconnect_done_; | 133 bool preconnect_done_; |
| 134 bool waiting_for_preconnect_; | 134 bool waiting_for_preconnect_; |
| 135 }; | 135 }; |
| 136 | 136 |
| 137 class StreamRequestWaiter : public HttpStreamRequest::Delegate { | 137 class StreamRequestWaiter : public HttpStreamRequest::Delegate { |
| 138 public: | 138 public: |
| 139 StreamRequestWaiter() | 139 StreamRequestWaiter() |
| 140 : waiting_for_stream_(false), | 140 : waiting_for_stream_(false), |
| 141 stream_done_(false) {} | 141 stream_done_(false) {} |
| 142 | 142 |
| 143 // HttpStreamRequest::Delegate | 143 // HttpStreamRequest::Delegate |
| 144 | 144 |
| 145 virtual void OnStreamReady( | 145 virtual void OnStreamReady( |
| 146 const SSLConfig& used_ssl_config, | 146 const SSLConfig& used_ssl_config, |
| 147 const ProxyInfo& used_proxy_info, | 147 const ProxyInfo& used_proxy_info, |
| 148 HttpStreamBase* stream) OVERRIDE { | 148 HttpStreamBase* stream) override { |
| 149 stream_done_ = true; | 149 stream_done_ = true; |
| 150 if (waiting_for_stream_) | 150 if (waiting_for_stream_) |
| 151 base::MessageLoop::current()->Quit(); | 151 base::MessageLoop::current()->Quit(); |
| 152 stream_.reset(stream); | 152 stream_.reset(stream); |
| 153 used_ssl_config_ = used_ssl_config; | 153 used_ssl_config_ = used_ssl_config; |
| 154 used_proxy_info_ = used_proxy_info; | 154 used_proxy_info_ = used_proxy_info; |
| 155 } | 155 } |
| 156 | 156 |
| 157 virtual void OnWebSocketHandshakeStreamReady( | 157 virtual void OnWebSocketHandshakeStreamReady( |
| 158 const SSLConfig& used_ssl_config, | 158 const SSLConfig& used_ssl_config, |
| 159 const ProxyInfo& used_proxy_info, | 159 const ProxyInfo& used_proxy_info, |
| 160 WebSocketHandshakeStreamBase* stream) OVERRIDE { | 160 WebSocketHandshakeStreamBase* stream) override { |
| 161 stream_done_ = true; | 161 stream_done_ = true; |
| 162 if (waiting_for_stream_) | 162 if (waiting_for_stream_) |
| 163 base::MessageLoop::current()->Quit(); | 163 base::MessageLoop::current()->Quit(); |
| 164 websocket_stream_.reset(stream); | 164 websocket_stream_.reset(stream); |
| 165 used_ssl_config_ = used_ssl_config; | 165 used_ssl_config_ = used_ssl_config; |
| 166 used_proxy_info_ = used_proxy_info; | 166 used_proxy_info_ = used_proxy_info; |
| 167 } | 167 } |
| 168 | 168 |
| 169 virtual void OnStreamFailed( | 169 virtual void OnStreamFailed( |
| 170 int status, | 170 int status, |
| 171 const SSLConfig& used_ssl_config) OVERRIDE {} | 171 const SSLConfig& used_ssl_config) override {} |
| 172 | 172 |
| 173 virtual void OnCertificateError( | 173 virtual void OnCertificateError( |
| 174 int status, | 174 int status, |
| 175 const SSLConfig& used_ssl_config, | 175 const SSLConfig& used_ssl_config, |
| 176 const SSLInfo& ssl_info) OVERRIDE {} | 176 const SSLInfo& ssl_info) override {} |
| 177 | 177 |
| 178 virtual void OnNeedsProxyAuth(const HttpResponseInfo& proxy_response, | 178 virtual void OnNeedsProxyAuth(const HttpResponseInfo& proxy_response, |
| 179 const SSLConfig& used_ssl_config, | 179 const SSLConfig& used_ssl_config, |
| 180 const ProxyInfo& used_proxy_info, | 180 const ProxyInfo& used_proxy_info, |
| 181 HttpAuthController* auth_controller) OVERRIDE {} | 181 HttpAuthController* auth_controller) override {} |
| 182 | 182 |
| 183 virtual void OnNeedsClientAuth(const SSLConfig& used_ssl_config, | 183 virtual void OnNeedsClientAuth(const SSLConfig& used_ssl_config, |
| 184 SSLCertRequestInfo* cert_info) OVERRIDE {} | 184 SSLCertRequestInfo* cert_info) override {} |
| 185 | 185 |
| 186 virtual void OnHttpsProxyTunnelResponse(const HttpResponseInfo& response_info, | 186 virtual void OnHttpsProxyTunnelResponse(const HttpResponseInfo& response_info, |
| 187 const SSLConfig& used_ssl_config, | 187 const SSLConfig& used_ssl_config, |
| 188 const ProxyInfo& used_proxy_info, | 188 const ProxyInfo& used_proxy_info, |
| 189 HttpStreamBase* stream) OVERRIDE {} | 189 HttpStreamBase* stream) override {} |
| 190 | 190 |
| 191 void WaitForStream() { | 191 void WaitForStream() { |
| 192 while (!stream_done_) { | 192 while (!stream_done_) { |
| 193 waiting_for_stream_ = true; | 193 waiting_for_stream_ = true; |
| 194 base::MessageLoop::current()->Run(); | 194 base::MessageLoop::current()->Run(); |
| 195 waiting_for_stream_ = false; | 195 waiting_for_stream_ = false; |
| 196 } | 196 } |
| 197 } | 197 } |
| 198 | 198 |
| 199 const SSLConfig& used_ssl_config() const { | 199 const SSLConfig& used_ssl_config() const { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 scoped_ptr<ClientSocketHandle> connection_; | 257 scoped_ptr<ClientSocketHandle> connection_; |
| 258 }; | 258 }; |
| 259 | 259 |
| 260 class WebSocketStreamCreateHelper | 260 class WebSocketStreamCreateHelper |
| 261 : public WebSocketHandshakeStreamBase::CreateHelper { | 261 : public WebSocketHandshakeStreamBase::CreateHelper { |
| 262 public: | 262 public: |
| 263 virtual ~WebSocketStreamCreateHelper() {} | 263 virtual ~WebSocketStreamCreateHelper() {} |
| 264 | 264 |
| 265 virtual WebSocketHandshakeStreamBase* CreateBasicStream( | 265 virtual WebSocketHandshakeStreamBase* CreateBasicStream( |
| 266 scoped_ptr<ClientSocketHandle> connection, | 266 scoped_ptr<ClientSocketHandle> connection, |
| 267 bool using_proxy) OVERRIDE { | 267 bool using_proxy) override { |
| 268 return new WebSocketBasicHandshakeStream(connection.Pass()); | 268 return new WebSocketBasicHandshakeStream(connection.Pass()); |
| 269 } | 269 } |
| 270 | 270 |
| 271 virtual WebSocketHandshakeStreamBase* CreateSpdyStream( | 271 virtual WebSocketHandshakeStreamBase* CreateSpdyStream( |
| 272 const base::WeakPtr<SpdySession>& spdy_session, | 272 const base::WeakPtr<SpdySession>& spdy_session, |
| 273 bool use_relative_url) OVERRIDE { | 273 bool use_relative_url) override { |
| 274 return new WebSocketSpdyHandshakeStream(spdy_session); | 274 return new WebSocketSpdyHandshakeStream(spdy_session); |
| 275 } | 275 } |
| 276 }; | 276 }; |
| 277 | 277 |
| 278 struct TestCase { | 278 struct TestCase { |
| 279 int num_streams; | 279 int num_streams; |
| 280 bool ssl; | 280 bool ssl; |
| 281 }; | 281 }; |
| 282 | 282 |
| 283 TestCase kTests[] = { | 283 TestCase kTests[] = { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 | 322 |
| 323 int last_num_streams() const { | 323 int last_num_streams() const { |
| 324 return last_num_streams_; | 324 return last_num_streams_; |
| 325 } | 325 } |
| 326 | 326 |
| 327 virtual int RequestSocket(const std::string& group_name, | 327 virtual int RequestSocket(const std::string& group_name, |
| 328 const void* socket_params, | 328 const void* socket_params, |
| 329 RequestPriority priority, | 329 RequestPriority priority, |
| 330 ClientSocketHandle* handle, | 330 ClientSocketHandle* handle, |
| 331 const CompletionCallback& callback, | 331 const CompletionCallback& callback, |
| 332 const BoundNetLog& net_log) OVERRIDE { | 332 const BoundNetLog& net_log) override { |
| 333 ADD_FAILURE(); | 333 ADD_FAILURE(); |
| 334 return ERR_UNEXPECTED; | 334 return ERR_UNEXPECTED; |
| 335 } | 335 } |
| 336 | 336 |
| 337 virtual void RequestSockets(const std::string& group_name, | 337 virtual void RequestSockets(const std::string& group_name, |
| 338 const void* socket_params, | 338 const void* socket_params, |
| 339 int num_sockets, | 339 int num_sockets, |
| 340 const BoundNetLog& net_log) OVERRIDE { | 340 const BoundNetLog& net_log) override { |
| 341 last_num_streams_ = num_sockets; | 341 last_num_streams_ = num_sockets; |
| 342 } | 342 } |
| 343 | 343 |
| 344 virtual void CancelRequest(const std::string& group_name, | 344 virtual void CancelRequest(const std::string& group_name, |
| 345 ClientSocketHandle* handle) OVERRIDE { | 345 ClientSocketHandle* handle) override { |
| 346 ADD_FAILURE(); | 346 ADD_FAILURE(); |
| 347 } | 347 } |
| 348 virtual void ReleaseSocket(const std::string& group_name, | 348 virtual void ReleaseSocket(const std::string& group_name, |
| 349 scoped_ptr<StreamSocket> socket, | 349 scoped_ptr<StreamSocket> socket, |
| 350 int id) OVERRIDE { | 350 int id) override { |
| 351 ADD_FAILURE(); | 351 ADD_FAILURE(); |
| 352 } | 352 } |
| 353 virtual void CloseIdleSockets() OVERRIDE { | 353 virtual void CloseIdleSockets() override { |
| 354 ADD_FAILURE(); | 354 ADD_FAILURE(); |
| 355 } | 355 } |
| 356 virtual int IdleSocketCount() const OVERRIDE { | 356 virtual int IdleSocketCount() const override { |
| 357 ADD_FAILURE(); | 357 ADD_FAILURE(); |
| 358 return 0; | 358 return 0; |
| 359 } | 359 } |
| 360 virtual int IdleSocketCountInGroup( | 360 virtual int IdleSocketCountInGroup( |
| 361 const std::string& group_name) const OVERRIDE { | 361 const std::string& group_name) const override { |
| 362 ADD_FAILURE(); | 362 ADD_FAILURE(); |
| 363 return 0; | 363 return 0; |
| 364 } | 364 } |
| 365 virtual LoadState GetLoadState( | 365 virtual LoadState GetLoadState( |
| 366 const std::string& group_name, | 366 const std::string& group_name, |
| 367 const ClientSocketHandle* handle) const OVERRIDE { | 367 const ClientSocketHandle* handle) const override { |
| 368 ADD_FAILURE(); | 368 ADD_FAILURE(); |
| 369 return LOAD_STATE_IDLE; | 369 return LOAD_STATE_IDLE; |
| 370 } | 370 } |
| 371 virtual base::TimeDelta ConnectionTimeout() const OVERRIDE { | 371 virtual base::TimeDelta ConnectionTimeout() const override { |
| 372 return base::TimeDelta(); | 372 return base::TimeDelta(); |
| 373 } | 373 } |
| 374 | 374 |
| 375 private: | 375 private: |
| 376 int last_num_streams_; | 376 int last_num_streams_; |
| 377 }; | 377 }; |
| 378 | 378 |
| 379 typedef CapturePreconnectsSocketPool<TransportClientSocketPool> | 379 typedef CapturePreconnectsSocketPool<TransportClientSocketPool> |
| 380 CapturePreconnectsTransportSocketPool; | 380 CapturePreconnectsTransportSocketPool; |
| 381 typedef CapturePreconnectsSocketPool<HttpProxyClientSocketPool> | 381 typedef CapturePreconnectsSocketPool<HttpProxyClientSocketPool> |
| (...skipping 926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1308 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 1308 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
| 1309 | 1309 |
| 1310 // Make sure there is no orphaned job. it is already canceled. | 1310 // Make sure there is no orphaned job. it is already canceled. |
| 1311 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( | 1311 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( |
| 1312 session->http_stream_factory_for_websocket())->num_orphaned_jobs()); | 1312 session->http_stream_factory_for_websocket())->num_orphaned_jobs()); |
| 1313 } | 1313 } |
| 1314 | 1314 |
| 1315 } // namespace | 1315 } // namespace |
| 1316 | 1316 |
| 1317 } // namespace net | 1317 } // namespace net |
| OLD | NEW |