Chromium Code Reviews| 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; |
| } |