| Index: net/http/http_stream_factory_impl_request.cc
|
| diff --git a/net/http/http_stream_factory_impl_request.cc b/net/http/http_stream_factory_impl_request.cc
|
| index b2a9ef02a0bece72f802f63e86f7cb85b93f17fe..e39a03e862227a8f86761f08c1d22fbade9d70aa 100644
|
| --- a/net/http/http_stream_factory_impl_request.cc
|
| +++ b/net/http/http_stream_factory_impl_request.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/callback.h"
|
| #include "base/logging.h"
|
| #include "base/stl_util.h"
|
| +#include "net/http/bidirectional_stream_job.h"
|
| #include "net/http/http_stream_factory_impl_job.h"
|
| #include "net/spdy/spdy_http_stream.h"
|
| #include "net/spdy/spdy_session.h"
|
| @@ -19,7 +20,8 @@ HttpStreamFactoryImpl::Request::Request(
|
| HttpStreamRequest::Delegate* delegate,
|
| WebSocketHandshakeStreamBase::CreateHelper*
|
| websocket_handshake_stream_create_helper,
|
| - const BoundNetLog& net_log)
|
| + const BoundNetLog& net_log,
|
| + StreamType stream_type)
|
| : url_(url),
|
| factory_(factory),
|
| websocket_handshake_stream_create_helper_(
|
| @@ -29,7 +31,8 @@ HttpStreamFactoryImpl::Request::Request(
|
| completed_(false),
|
| was_npn_negotiated_(false),
|
| protocol_negotiated_(kProtoUnknown),
|
| - using_spdy_(false) {
|
| + using_spdy_(false),
|
| + for_bidirectional_(stream_type == BIDIRECTIONAL_STREAM_SPDY_JOB) {
|
| DCHECK(factory_);
|
| DCHECK(delegate_);
|
|
|
| @@ -77,6 +80,7 @@ void HttpStreamFactoryImpl::Request::OnStreamReady(
|
| const ProxyInfo& used_proxy_info,
|
| HttpStream* stream) {
|
| DCHECK(!factory_->for_websockets_);
|
| + DCHECK(!for_bidirectional_);
|
| DCHECK(stream);
|
| DCHECK(completed_);
|
|
|
| @@ -84,12 +88,28 @@ void HttpStreamFactoryImpl::Request::OnStreamReady(
|
| delegate_->OnStreamReady(used_ssl_config, used_proxy_info, stream);
|
| }
|
|
|
| +void HttpStreamFactoryImpl::Request::OnBidirectionalStreamJobReady(
|
| + Job* job,
|
| + const SSLConfig& used_ssl_config,
|
| + const ProxyInfo& used_proxy_info,
|
| + BidirectionalStreamJob* stream) {
|
| + DCHECK(!factory_->for_websockets_);
|
| + DCHECK(for_bidirectional_);
|
| + DCHECK(stream);
|
| + DCHECK(completed_);
|
| +
|
| + OnJobSucceeded(job);
|
| + delegate_->OnBidirectionalStreamJobReady(used_ssl_config, used_proxy_info,
|
| + stream);
|
| +}
|
| +
|
| void HttpStreamFactoryImpl::Request::OnWebSocketHandshakeStreamReady(
|
| Job* job,
|
| const SSLConfig& used_ssl_config,
|
| const ProxyInfo& used_proxy_info,
|
| WebSocketHandshakeStreamBase* stream) {
|
| DCHECK(factory_->for_websockets_);
|
| + DCHECK(!for_bidirectional_);
|
| DCHECK(stream);
|
| DCHECK(completed_);
|
|
|
| @@ -252,6 +272,7 @@ bool HttpStreamFactoryImpl::Request::HasSpdySessionKey() const {
|
| void HttpStreamFactoryImpl::Request::OnNewSpdySessionReady(
|
| Job* job,
|
| scoped_ptr<HttpStream> stream,
|
| + scoped_ptr<BidirectionalStreamJob> bidirectional_stream_job,
|
| const base::WeakPtr<SpdySession>& spdy_session,
|
| bool direct) {
|
| DCHECK(job);
|
| @@ -286,7 +307,15 @@ void HttpStreamFactoryImpl::Request::OnNewSpdySessionReady(
|
| // TODO(ricea): Re-instate this code when WebSockets over SPDY is
|
| // implemented.
|
| NOTREACHED();
|
| + } else if (for_bidirectional_) {
|
| + DCHECK(bidirectional_stream_job);
|
| + DCHECK(!stream);
|
| + delegate_->OnBidirectionalStreamJobReady(
|
| + job->server_ssl_config(), job->proxy_info(),
|
| + bidirectional_stream_job.release());
|
| } else {
|
| + DCHECK(!bidirectional_stream_job);
|
| + DCHECK(stream);
|
| delegate_->OnStreamReady(job->server_ssl_config(), job->proxy_info(),
|
| stream.release());
|
| }
|
|
|