Index: net/socket_stream/socket_stream.cc |
diff --git a/net/socket_stream/socket_stream.cc b/net/socket_stream/socket_stream.cc |
index 4075e02da67d39df6715d7069b32b7200def9f6a..41f62a962ad9acfbd6aa4861cbf9f7f86d0b5440 100644 |
--- a/net/socket_stream/socket_stream.cc |
+++ b/net/socket_stream/socket_stream.cc |
@@ -31,6 +31,8 @@ |
#include "net/socket/ssl_client_socket.h" |
#include "net/socket/tcp_client_socket.h" |
#include "net/socket_stream/socket_stream_metrics.h" |
+#include "net/spdy/spdy_session.h" |
+#include "net/spdy/spdy_stream.h" |
#include "net/url_request/url_request.h" |
static const int kMaxPendingSendAllowed = 32768; // 32 kilobytes. |
@@ -438,6 +440,10 @@ void SocketStream::DoLoop(int result) { |
DCHECK_LE(result, OK); |
Finish(result); |
return; |
+ case STATE_SPDY: |
+ DCHECK_EQ(result, OK); |
+ result = DoSpdy(); |
+ break; |
default: |
NOTREACHED() << "bad state " << state; |
Finish(result); |
@@ -463,6 +469,11 @@ int SocketStream::DoResolveProxy() { |
return ERR_INVALID_ARGUMENT; |
} |
+ // |endpoint_| indicates the final destination endpoint. |
+ endpoint_ = HostPortPair(url_.HostNoBrackets(), url_.EffectiveIntPort()); |
+ |
+ // TODO(ukai): check alternate protocols? |
+ |
return proxy_service()->ResolveProxy( |
proxy_url_, &proxy_info_, &io_callback_, &pac_request_, net_log_); |
} |
@@ -541,6 +552,25 @@ int SocketStream::DoResolveHostComplete(int result) { |
return result; |
} |
+const HostPortPair& SocketStream::GetHostPortPair() const { |
+ return endpoint_; |
+} |
+ |
+const ProxyServer& SocketStream::proxy_server() const { |
+ return proxy_info_.proxy_server(); |
+} |
+ |
+void SocketStream::SwitchToSpdy() { |
+ DCHECK_EQ(STATE_TCP_CONNECT, next_state_); |
+ next_state_ = STATE_SPDY; |
+} |
+ |
+int SocketStream::DoSpdy() { |
+ metrics_->OnConnected(); |
+ net_log_.EndEvent(NetLog::TYPE_SOCKET_STREAM_CONNECT, NULL); |
+ return ERR_IO_PENDING; // Finish DoLoop. |
+} |
+ |
int SocketStream::DoTcpConnect(int result) { |
if (result != OK) { |
next_state_ = STATE_CLOSE; |
@@ -843,6 +873,8 @@ int SocketStream::DoSSLConnectComplete(int result) { |
} |
} |
+ // TODO(ukai): upgrade to spdy session if possible. |
+ |
if (result == OK) |
result = DidEstablishConnection(); |
else |