diff options
author | yhirano@chromium.org <yhirano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-21 06:50:50 +0000 |
---|---|---|
committer | yhirano@chromium.org <yhirano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-21 06:50:50 +0000 |
commit | 3732cea41964d9db33072fafde00b95913f1c1b7 (patch) | |
tree | a9d82b879d0f5247f96802dfac2c1f959296a423 /net/socket | |
parent | ebd73710916292f90280b4e0516045e25044e431 (diff) | |
download | chromium_src-3732cea41964d9db33072fafde00b95913f1c1b7.zip chromium_src-3732cea41964d9db33072fafde00b95913f1c1b7.tar.gz chromium_src-3732cea41964d9db33072fafde00b95913f1c1b7.tar.bz2 |
Introduce RequestWebSocketStream into HttpStreamFactory
Introduce RequestWebSocketStream into HttpStreamFactory to reuse its functionality that handles socket pool, proxy and SSL.
BUG=237444
Review URL: https://chromiumcodereview.appspot.com/14813024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207735 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket')
-rw-r--r-- | net/socket/client_socket_pool_manager.cc | 27 | ||||
-rw-r--r-- | net/socket/client_socket_pool_manager.h | 25 | ||||
-rw-r--r-- | net/socket/socket_test_util.cc | 25 | ||||
-rw-r--r-- | net/socket/socket_test_util.h | 8 |
4 files changed, 82 insertions, 3 deletions
diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc index 0b49b56..c00b5ec 100644 --- a/net/socket/client_socket_pool_manager.cc +++ b/net/socket/client_socket_pool_manager.cc @@ -88,7 +88,8 @@ int InitSocketPoolHelper(const GURL& request_url, scoped_refptr<SOCKSSocketParams> socks_params; scoped_ptr<HostPortPair> proxy_host_port; - bool using_ssl = request_url.SchemeIs("https") || force_spdy_over_ssl; + bool using_ssl = request_url.SchemeIs("https") || + request_url.SchemeIs("wss") || force_spdy_over_ssl; HostPortPair origin_host_port = HostPortPair(request_url.HostNoBrackets(), @@ -393,6 +394,30 @@ int InitSocketHandleForHttpRequest( 0, socket_handle, resolution_callback, callback); } +int InitSocketHandleForWebSocketRequest( + const GURL& request_url, + const HttpRequestHeaders& request_extra_headers, + int request_load_flags, + RequestPriority request_priority, + HttpNetworkSession* session, + const ProxyInfo& proxy_info, + bool force_spdy_over_ssl, + bool want_spdy_over_npn, + const SSLConfig& ssl_config_for_origin, + const SSLConfig& ssl_config_for_proxy, + PrivacyMode privacy_mode, + const BoundNetLog& net_log, + ClientSocketHandle* socket_handle, + const OnHostResolutionCallback& resolution_callback, + const CompletionCallback& callback) { + DCHECK(socket_handle); + return InitSocketPoolHelper( + request_url, request_extra_headers, request_load_flags, request_priority, + session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn, + ssl_config_for_origin, ssl_config_for_proxy, true, privacy_mode, net_log, + 0, socket_handle, resolution_callback, callback); +} + int InitSocketHandleForRawConnect( const HostPortPair& host_port_pair, HttpNetworkSession* session, diff --git a/net/socket/client_socket_pool_manager.h b/net/socket/client_socket_pool_manager.h index 434a463..a514d25 100644 --- a/net/socket/client_socket_pool_manager.h +++ b/net/socket/client_socket_pool_manager.h @@ -108,6 +108,31 @@ int InitSocketHandleForHttpRequest( // A helper method that uses the passed in proxy information to initialize a // ClientSocketHandle with the relevant socket pool. Use this method for +// HTTP/HTTPS requests for WebSocket handshake. +// |ssl_config_for_origin| is only used if the request +// uses SSL and |ssl_config_for_proxy| is used if the proxy server is HTTPS. +// |resolution_callback| will be invoked after the the hostname is +// resolved. If |resolution_callback| does not return OK, then the +// connection will be aborted with that value. +int InitSocketHandleForWebSocketRequest( + const GURL& request_url, + const HttpRequestHeaders& request_extra_headers, + int request_load_flags, + RequestPriority request_priority, + HttpNetworkSession* session, + const ProxyInfo& proxy_info, + bool force_spdy_over_ssl, + bool want_spdy_over_npn, + const SSLConfig& ssl_config_for_origin, + const SSLConfig& ssl_config_for_proxy, + PrivacyMode privacy_mode, + const BoundNetLog& net_log, + ClientSocketHandle* socket_handle, + const OnHostResolutionCallback& resolution_callback, + const CompletionCallback& callback); + +// A helper method that uses the passed in proxy information to initialize a +// ClientSocketHandle with the relevant socket pool. Use this method for // a raw socket connection to a host-port pair (that needs to tunnel through // the proxies). NET_EXPORT int InitSocketHandleForRawConnect( diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc index a14ab2a..dbc59d7 100644 --- a/net/socket/socket_test_util.cc +++ b/net/socket/socket_test_util.cc @@ -877,7 +877,10 @@ int MockTCPClientSocket::Connect(const CompletionCallback& callback) { connected_ = true; peer_closed_connection_ = false; if (data_->connect_data().mode == ASYNC) { - RunCallbackAsync(callback, data_->connect_data().result); + if (data_->connect_data().result == ERR_IO_PENDING) + pending_callback_ = callback; + else + RunCallbackAsync(callback, data_->connect_data().result); return ERR_IO_PENDING; } return data_->connect_data().result; @@ -940,6 +943,11 @@ void MockTCPClientSocket::OnReadComplete(const MockRead& data) { RunCallback(callback, rv); } +void MockTCPClientSocket::OnConnectComplete(const MockConnect& data) { + CompletionCallback callback = pending_callback_; + RunCallback(callback, data.result); +} + int MockTCPClientSocket::CompleteRead() { DCHECK(pending_buf_); DCHECK(pending_buf_len_ > 0); @@ -1171,6 +1179,10 @@ const BoundNetLog& DeterministicMockUDPClientSocket::NetLog() const { void DeterministicMockUDPClientSocket::OnReadComplete(const MockRead& data) {} +void DeterministicMockUDPClientSocket::OnConnectComplete( + const MockConnect& data) { + NOTIMPLEMENTED(); +} DeterministicMockTCPClientSocket::DeterministicMockTCPClientSocket( net::NetLog* net_log, @@ -1261,6 +1273,9 @@ bool DeterministicMockTCPClientSocket::GetSSLInfo(SSLInfo* ssl_info) { void DeterministicMockTCPClientSocket::OnReadComplete(const MockRead& data) {} +void DeterministicMockTCPClientSocket::OnConnectComplete( + const MockConnect& data) {} + // static void MockSSLClientSocket::ConnectCallback( MockSSLClientSocket *ssl_client_socket, @@ -1407,6 +1422,10 @@ void MockSSLClientSocket::OnReadComplete(const MockRead& data) { NOTIMPLEMENTED(); } +void MockSSLClientSocket::OnConnectComplete(const MockConnect& data) { + NOTIMPLEMENTED(); +} + MockUDPClientSocket::MockUDPClientSocket(SocketDataProvider* data, net::NetLog* net_log) : connected_(false), @@ -1526,6 +1545,10 @@ void MockUDPClientSocket::OnReadComplete(const MockRead& data) { RunCallback(callback, rv); } +void MockUDPClientSocket::OnConnectComplete(const MockConnect& data) { + NOTIMPLEMENTED(); +} + int MockUDPClientSocket::CompleteRead() { DCHECK(pending_buf_); DCHECK(pending_buf_len_ > 0); diff --git a/net/socket/socket_test_util.h b/net/socket/socket_test_util.h index bab980c..6afe170 100644 --- a/net/socket/socket_test_util.h +++ b/net/socket/socket_test_util.h @@ -199,6 +199,7 @@ class AsyncSocket { // data.async is ignored, and this read is completed synchronously as // part of this call. virtual void OnReadComplete(const MockRead& data) = 0; + virtual void OnConnectComplete(const MockConnect& data) = 0; }; // SocketDataProvider which responds based on static tables of mock reads and @@ -229,7 +230,7 @@ class StaticSocketDataProvider : public SocketDataProvider { // SocketDataProvider implementation. virtual MockRead GetNextRead() OVERRIDE; virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE; - virtual void Reset() OVERRIDE; + ; virtual void Reset() OVERRIDE; private: MockRead* reads_; @@ -696,6 +697,7 @@ class MockTCPClientSocket : public MockClientSocket, public AsyncSocket { // AsyncSocket: virtual void OnReadComplete(const MockRead& data) OVERRIDE; + virtual void OnConnectComplete(const MockConnect& data) OVERRIDE; private: int CompleteRead(); @@ -803,6 +805,7 @@ class DeterministicMockUDPClientSocket // AsyncSocket implementation. virtual void OnReadComplete(const MockRead& data) OVERRIDE; + virtual void OnConnectComplete(const MockConnect& data) OVERRIDE; private: bool connected_; @@ -845,6 +848,7 @@ class DeterministicMockTCPClientSocket // AsyncSocket: virtual void OnReadComplete(const MockRead& data) OVERRIDE; + virtual void OnConnectComplete(const MockConnect& data) OVERRIDE; private: DeterministicSocketHelper helper_; @@ -887,6 +891,7 @@ class MockSSLClientSocket : public MockClientSocket, public AsyncSocket { // This MockSocket does not implement the manual async IO feature. virtual void OnReadComplete(const MockRead& data) OVERRIDE; + virtual void OnConnectComplete(const MockConnect& data) OVERRIDE; virtual bool WasChannelIDSent() const OVERRIDE; virtual void set_channel_id_sent(bool channel_id_sent) OVERRIDE; @@ -931,6 +936,7 @@ class MockUDPClientSocket // AsyncSocket implementation. virtual void OnReadComplete(const MockRead& data) OVERRIDE; + virtual void OnConnectComplete(const MockConnect& data) OVERRIDE; private: int CompleteRead(); |