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 93b85df394c223f1ec0b7644111c55d1aee545c8..e7d1ac34311b51abf7b5f8ea4c607f18946efa49 100644 |
--- a/net/http/http_stream_factory_impl.cc |
+++ b/net/http/http_stream_factory_impl.cc |
@@ -18,6 +18,10 @@ |
#include "net/spdy/spdy_http_stream.h" |
#include "url/gurl.h" |
+#if defined(ENABLE_BIDIRECTIONAL_STREAM) |
Ryan Hamilton
2016/01/08 21:36:33
drive-by comment: Instead of doing #ifdefs, would
|
+#include "net/spdy/bidirectional_stream_spdy_job.h" |
+#endif |
+ |
namespace net { |
HttpStreamFactoryImpl::HttpStreamFactoryImpl(HttpNetworkSession* session, |
@@ -76,6 +80,34 @@ HttpStreamRequest* HttpStreamFactoryImpl::RequestWebSocketHandshakeStream( |
net_log); |
} |
+HttpStreamRequest* HttpStreamFactoryImpl::RequestBidirectionalStreamJob( |
+ const HttpRequestInfo& request_info, |
+ RequestPriority priority, |
+ const SSLConfig& server_ssl_config, |
+ const SSLConfig& proxy_ssl_config, |
+ HttpStreamRequest::Delegate* delegate, |
+ const BoundNetLog& net_log) { |
+ DCHECK(!for_websockets_); |
+ DCHECK(request_info.url.SchemeIs(url::kHttpsScheme)); |
+ |
+// TODO(xunjieli): Create QUIC's version of BidirectionalStreamJob. |
+#if defined(ENABLE_BIDIRECTIONAL_STREAM) |
+ Request* request = |
+ new Request(request_info.url, this, delegate, nullptr, net_log, |
+ Request::BIDIRECTIONAL_STREAM_SPDY_JOB); |
+ 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; |
+ |
+#else |
+ DCHECK(false); |
+ return nullptr; |
+#endif |
+} |
+ |
HttpStreamRequest* HttpStreamFactoryImpl::RequestStreamInternal( |
const HttpRequestInfo& request_info, |
RequestPriority priority, |
@@ -85,11 +117,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, Request::HTTP_STREAM); |
Job* job = new Job(this, session_, request_info, priority, server_ssl_config, |
proxy_ssl_config, net_log.net_log()); |
request->AttachJob(job); |
@@ -275,12 +305,18 @@ void HttpStreamFactoryImpl::OnNewSpdySessionReady( |
// TODO(ricea): Restore this code path when WebSocket over SPDY |
// implementation is ready. |
NOTREACHED(); |
+ } else if (request->for_bidirectional()) { |
+#if defined(ENABLE_BIDIRECTIONAL_STREAM) |
+ request->OnBidirectionalStreamJobReady( |
+ nullptr, used_ssl_config, used_proxy_info, |
+ new BidirectionalStreamSpdyJob(spdy_session)); |
+#else |
+ DCHECK(false); |
+#endif |
} 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)); |
} |
} |