Index: net/socket_stream/socket_stream.cc |
diff --git a/net/socket_stream/socket_stream.cc b/net/socket_stream/socket_stream.cc |
index 7227fe900e16566ef8c7726c250e9f215c10d169..5d89416ca834c2b6ed5f613f22c5e84281f261cc 100644 |
--- a/net/socket_stream/socket_stream.cc |
+++ b/net/socket_stream/socket_stream.cc |
@@ -47,6 +47,7 @@ SocketStream::SocketStream(const GURL& url, Delegate* delegate) |
next_state_(STATE_NONE), |
factory_(ClientSocketFactory::GetDefaultFactory()), |
proxy_mode_(kDirectConnection), |
+ proxy_url_(url), |
pac_request_(NULL), |
ALLOW_THIS_IN_INITIALIZER_LIST( |
io_callback_(this, &SocketStream::OnIOCompleted)), |
@@ -414,7 +415,7 @@ int SocketStream::DoResolveProxy() { |
next_state_ = STATE_RESOLVE_PROXY_COMPLETE; |
return proxy_service()->ResolveProxy( |
- url_, &proxy_info_, &io_callback_, &pac_request_, load_log_); |
+ proxy_url_, &proxy_info_, &io_callback_, &pac_request_, load_log_); |
} |
int SocketStream::DoResolveProxyComplete(int result) { |
@@ -427,6 +428,20 @@ int SocketStream::DoResolveProxyComplete(int result) { |
delegate_->OnError(this, result); |
proxy_info_.UseDirect(); |
} |
+ if (proxy_info_.is_direct()) { |
+ // If proxy was not found for original URL (ie. websocket URL), |
tyoshino (SeeGerritForStatus)
2009/11/16 07:33:49
i.e.
|
+ // try again with https URL, like Safari implementation. |
+ // Note that we don't want to use http proxy, because we'll use tunnel |
+ // proxy using CONNECT method, which is used by https proxy. |
+ if (!proxy_url_.SchemeIs("https")) { |
+ GURL::Replacements repl; |
+ repl.SetSchemeStr("https"); |
+ proxy_url_ = url_.ReplaceComponents(repl); |
+ DLOG(INFO) << "Try https proxy: " << proxy_url_; |
+ next_state_ = STATE_RESOLVE_PROXY; |
+ return OK; |
+ } |
+ } |
return OK; |
} |