summaryrefslogtreecommitdiffstats
path: root/net/socket
diff options
context:
space:
mode:
authoryhirano@chromium.org <yhirano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-21 06:50:50 +0000
committeryhirano@chromium.org <yhirano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-21 06:50:50 +0000
commit3732cea41964d9db33072fafde00b95913f1c1b7 (patch)
treea9d82b879d0f5247f96802dfac2c1f959296a423 /net/socket
parentebd73710916292f90280b4e0516045e25044e431 (diff)
downloadchromium_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.cc27
-rw-r--r--net/socket/client_socket_pool_manager.h25
-rw-r--r--net/socket/socket_test_util.cc25
-rw-r--r--net/socket/socket_test_util.h8
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();