Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1856)

Unified Diff: net/http/http_stream_factory_impl_request.cc

Issue 1326503003: Added a net::BidirectionalStream to expose a bidirectional streaming interface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use std::move Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());
}

Powered by Google App Engine
This is Rietveld 408576698