Chromium Code Reviews| Index: net/http/http_stream_factory_impl.cc |
| diff --git a/net/http/http_stream_factory_impl.cc b/net/http/http_stream_factory_impl.cc |
| index 2a8664e51a6458ed9d087582066a943a03552c27..7f56c942868eb31d94e063b3be5270b70584fe3c 100644 |
| --- a/net/http/http_stream_factory_impl.cc |
| +++ b/net/http/http_stream_factory_impl.cc |
| @@ -14,6 +14,7 @@ |
| #include "net/http/http_stream_factory_impl_job.h" |
| #include "net/http/http_stream_factory_impl_request.h" |
| #include "net/log/net_log.h" |
| +#include "net/spdy/bidirectional_spdy_stream.h" |
| #include "net/spdy/spdy_http_stream.h" |
| #include "url/gurl.h" |
| @@ -75,6 +76,24 @@ HttpStreamRequest* HttpStreamFactoryImpl::RequestWebSocketHandshakeStream( |
| net_log); |
| } |
| +HttpStreamRequest* HttpStreamFactoryImpl::RequestBidirectionalStream( |
| + const HttpRequestInfo& request_info, |
| + RequestPriority priority, |
| + const SSLConfig& server_ssl_config, |
| + const SSLConfig& proxy_ssl_config, |
| + HttpStreamRequest::Delegate* delegate, |
| + const BoundNetLog& net_log) { |
|
mmenke
2015/10/08 19:31:53
DCHECK the scheme is HTTPS?
xunjieli
2015/10/19 21:07:46
Done.
|
| + DCHECK(!for_websockets_); |
| + Request* request = new Request(request_info.url, this, delegate, nullptr, |
| + net_log, true /** for_bidirectional */); |
|
mmenke
2015/10/08 19:31:53
I'm no HTTP2 expert, but it's my understanding tha
xunjieli
2015/10/19 21:07:46
Acknowledged. Here we don't use RequestStreamInter
|
| + Job* job = new Job(this, session_, request_info, priority, server_ssl_config, |
| + proxy_ssl_config, net_log.net_log()); |
| + request->AttachJob(job); |
| + |
| + job->Start(request); |
| + return request; |
| +} |
| + |
| HttpStreamRequest* HttpStreamFactoryImpl::RequestStreamInternal( |
| const HttpRequestInfo& request_info, |
| RequestPriority priority, |
| @@ -84,11 +103,9 @@ HttpStreamRequest* HttpStreamFactoryImpl::RequestStreamInternal( |
| WebSocketHandshakeStreamBase::CreateHelper* |
| websocket_handshake_stream_create_helper, |
| const BoundNetLog& net_log) { |
| - Request* request = new Request(request_info.url, |
| - this, |
| - delegate, |
| + Request* request = new Request(request_info.url, this, delegate, |
| websocket_handshake_stream_create_helper, |
| - net_log); |
| + net_log, false /** for_bidirectional */); |
| Job* job = new Job(this, session_, request_info, priority, server_ssl_config, |
| proxy_ssl_config, net_log.net_log()); |
| request->AttachJob(job); |
| @@ -260,12 +277,16 @@ void HttpStreamFactoryImpl::OnNewSpdySessionReady( |
| // TODO(ricea): Restore this code path when WebSocket over SPDY |
| // implementation is ready. |
| NOTREACHED(); |
| + } else if (request->for_bidirectional()) { |
| + // TODO(xunjieli): Enable creation of QUIC's version of |
| + // BidirectionalStream. |
|
mmenke
2015/10/08 19:31:53
This seems the wrong place for this comment. Mayb
xunjieli
2015/10/19 21:07:46
Done.
|
| + request->OnBidirectionalStreamReady( |
| + nullptr, used_ssl_config, used_proxy_info, |
| + new BidirectionalSpdyStream(spdy_session)); |
| } else { |
| bool use_relative_url = direct || request->url().SchemeIs("https"); |
| request->OnStreamReady( |
| - NULL, |
| - used_ssl_config, |
| - used_proxy_info, |
| + nullptr, used_ssl_config, used_proxy_info, |
| new SpdyHttpStream(spdy_session, use_relative_url)); |
| } |
| } |