Index: net/http/http_stream_factory_impl_job.cc |
diff --git a/net/http/http_stream_factory_impl_job.cc b/net/http/http_stream_factory_impl_job.cc |
index 2cd3bcbe0b6c7cf73b0129896405537a9a92cfcb..de46c194450d0273400e353ef26a7555d0b7e12c 100644 |
--- a/net/http/http_stream_factory_impl_job.cc |
+++ b/net/http/http_stream_factory_impl_job.cc |
@@ -1164,8 +1164,17 @@ int HttpStreamFactoryImpl::Job::DoCreateStream() { |
if (connection_->socket() && !connection_->is_reused()) |
SetSocketMotivation(); |
- if (!using_spdy_) { |
+ if (!using_spdy_) |
DCHECK(!IsSpdyAlternative()); |
+ |
+ if (!using_spdy_ || |
+ // While websockets over HTTP/2 are not supported, it is still valid to |
+ // have websockets tunneled over HTTP/2 proxy (via CONNECT). If websockets |
+ // are secure (wss://), HttpProxyClientSocket with established tunnel is |
+ // wrapped with yet another socket (SSLClientSocket), and |using_spdy_| |
+ // will be false, but for ws: scheme, HttpProxyClientSocket won't be |
+ // wrapped into anything. |
+ (using_spdy_ && proxy_info_.is_https() && delegate_->for_websockets())) { |
// We may get ftp scheme when fetching ftp resources through proxy. |
bool using_proxy = (proxy_info_.is_http() || proxy_info_.is_https()) && |
(request_info_.url.SchemeIs(url::kHttpScheme) || |