diff options
author | ukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-16 08:13:05 +0000 |
---|---|---|
committer | ukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-16 08:13:05 +0000 |
commit | 8123fd04c4fc5f4382797ca4d2873b29a2654e19 (patch) | |
tree | 2dbc776b8a9501a2dd101e1affbb14e7a5381b80 /net/socket_stream | |
parent | 35586caef21853ec304a7d9f9c702653704dbc96 (diff) | |
download | chromium_src-8123fd04c4fc5f4382797ca4d2873b29a2654e19.zip chromium_src-8123fd04c4fc5f4382797ca4d2873b29a2654e19.tar.gz chromium_src-8123fd04c4fc5f4382797ca4d2873b29a2654e19.tar.bz2 |
Try https proxy for websocket connection.
Safari always uses "https" to get proxies for websocket connection,
so chrome also tries it as well.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/398004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@32045 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket_stream')
-rw-r--r-- | net/socket_stream/socket_stream.cc | 17 | ||||
-rw-r--r-- | net/socket_stream/socket_stream.h | 1 |
2 files changed, 17 insertions, 1 deletions
diff --git a/net/socket_stream/socket_stream.cc b/net/socket_stream/socket_stream.cc index 7227fe9..d9c6a88 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 (i.e. websocket URL), + // 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; } diff --git a/net/socket_stream/socket_stream.h b/net/socket_stream/socket_stream.h index f6ac674..cf6a6b0 100644 --- a/net/socket_stream/socket_stream.h +++ b/net/socket_stream/socket_stream.h @@ -270,6 +270,7 @@ class SocketStream : public base::RefCountedThreadSafe<SocketStream> { ProxyMode proxy_mode_; + GURL proxy_url_; ProxyService::PacRequest* pac_request_; ProxyInfo proxy_info_; |