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

Unified Diff: net/quic/quic_stream_factory.cc

Issue 1744693002: Implement QUIC-based net::BidirectionalStream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@basecl
Patch Set: Created 4 years, 10 months 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/quic/quic_stream_factory.cc
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index 61af6c27e2248687a9380c61ebbd3f98671ffcad..dda420d67fad547130f6ee6d349ab836cd1eaaf0 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -59,6 +59,11 @@
#include "base/cpu.h"
#endif
+#if BUILDFLAG(ENABLE_BIDIRECTIONAL_STREAM)
+#include "net/http/bidirectional_stream_job.h"
+#include "net/quic/bidirectional_stream_quic_job.h"
+#endif
+
using std::min;
using NetworkHandle = net::NetworkChangeNotifier::NetworkHandle;
@@ -496,13 +501,12 @@ int QuicStreamFactory::Job::DoConnectComplete(int rv) {
}
QuicStreamRequest::QuicStreamRequest(QuicStreamFactory* factory)
- : factory_(factory) {}
+ : factory_(factory), for_bidirectional_(false) {}
QuicStreamRequest::~QuicStreamRequest() {
if (factory_ && !callback_.is_null())
factory_->CancelRequest(this);
}
-
int QuicStreamRequest::Request(const HostPortPair& host_port_pair,
PrivacyMode privacy_mode,
int cert_verify_flags,
@@ -510,11 +514,28 @@ int QuicStreamRequest::Request(const HostPortPair& host_port_pair,
base::StringPiece method,
const BoundNetLog& net_log,
const CompletionCallback& callback) {
+ return Request(host_port_pair, privacy_mode, cert_verify_flags, origin_host,
+ method, net_log, callback, false);
+}
+
+int QuicStreamRequest::Request(const HostPortPair& host_port_pair,
+ PrivacyMode privacy_mode,
+ int cert_verify_flags,
+ base::StringPiece origin_host,
+ base::StringPiece method,
+ const BoundNetLog& net_log,
+ const CompletionCallback& callback,
+ bool for_bidirectional) {
DCHECK(!stream_);
+#if BUILDFLAG(ENABLE_BIDIRECTIONAL_STREAM)
+ DCHECK(!bidirectional_stream_job_);
+#endif
DCHECK(callback_.is_null());
DCHECK(factory_);
origin_host_ = origin_host.as_string();
privacy_mode_ = privacy_mode;
+ for_bidirectional_ = for_bidirectional;
+
int rv = factory_->Create(host_port_pair, privacy_mode, cert_verify_flags,
origin_host, method, net_log, this);
if (rv == ERR_IO_PENDING) {
@@ -524,14 +545,29 @@ int QuicStreamRequest::Request(const HostPortPair& host_port_pair,
} else {
factory_ = nullptr;
}
- if (rv == OK)
+ if (rv == OK) {
+#if BUILDFLAG(ENABLE_BIDIRECTIONAL_STREAM)
+ DCHECK(stream_ || (for_bidirectional_ && bidirectional_stream_job_));
+#else
DCHECK(stream_);
+#endif
+ }
return rv;
}
-void QuicStreamRequest::set_stream(scoped_ptr<QuicHttpStream> stream) {
- DCHECK(stream);
- stream_ = std::move(stream);
+void QuicStreamRequest::InitializeStreamFromSession(
+ QuicChromiumClientSession* session) {
+ DCHECK(session);
+ if (for_bidirectional_) {
+#if BUILDFLAG(ENABLE_BIDIRECTIONAL_STREAM)
+ bidirectional_stream_job_.reset(
+ new BidirectionalStreamQuicJob(session->GetWeakPtr()));
+#else
+ DCHECK(false);
+#endif
Ryan Hamilton 2016/02/27 00:21:14 I find this maze of ifdefs exceptionally hard to r
xunjieli 2016/02/29 15:21:37 Acknowledged.
+ } else {
+ stream_.reset(new QuicHttpStream(session->GetWeakPtr()));
+ }
}
void QuicStreamRequest::OnRequestComplete(int rv) {
@@ -548,9 +584,20 @@ base::TimeDelta QuicStreamRequest::GetTimeDelayForWaitingJob() const {
scoped_ptr<QuicHttpStream> QuicStreamRequest::ReleaseStream() {
DCHECK(stream_);
+ DCHECK(!for_bidirectional_);
return std::move(stream_);
}
+#if BUILDFLAG(ENABLE_BIDIRECTIONAL_STREAM)
+scoped_ptr<BidirectionalStreamJob>
+QuicStreamRequest::ReleaseBidirectionalStreamJob() {
+ DCHECK(bidirectional_stream_job_);
+ DCHECK(for_bidirectional_);
+
+ return std::move(bidirectional_stream_job_);
+}
+#endif
+
QuicStreamFactory::QuicStreamFactory(
HostResolver* host_resolver,
ClientSocketFactory* client_socket_factory,
@@ -772,7 +819,7 @@ int QuicStreamFactory::Create(const HostPortPair& host_port_pair,
QuicChromiumClientSession* session = it->second;
if (!session->CanPool(origin_host.as_string(), privacy_mode))
return ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN;
- request->set_stream(CreateFromSession(session));
+ request->InitializeStreamFromSession(session);
return OK;
}
}
@@ -828,7 +875,7 @@ int QuicStreamFactory::Create(const HostPortPair& host_port_pair,
QuicChromiumClientSession* session = it->second;
if (!session->CanPool(origin_host.as_string(), privacy_mode))
return ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN;
- request->set_stream(CreateFromSession(session));
+ request->InitializeStreamFromSession(session);
}
return rv;
}
@@ -906,7 +953,7 @@ void QuicStreamFactory::OnJobComplete(Job* job, int rv) {
request->OnRequestComplete(ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN);
continue;
}
- request->set_stream(CreateFromSession(session));
+ request->InitializeStreamFromSession(session);
++request_it;
}
}

Powered by Google App Engine
This is Rietveld 408576698