summaryrefslogtreecommitdiffstats
path: root/net/socket_stream
diff options
context:
space:
mode:
authorukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-16 08:13:05 +0000
committerukai@chromium.org <ukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-16 08:13:05 +0000
commit8123fd04c4fc5f4382797ca4d2873b29a2654e19 (patch)
tree2dbc776b8a9501a2dd101e1affbb14e7a5381b80 /net/socket_stream
parent35586caef21853ec304a7d9f9c702653704dbc96 (diff)
downloadchromium_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.cc17
-rw-r--r--net/socket_stream/socket_stream.h1
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_;