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

Unified Diff: net/quic/chromium/quic_chromium_client_session.cc

Issue 2844493002: QuicChromiumClientSession::StreamRequest to be created by the session (Closed)
Patch Set: Rebase Created 3 years, 8 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/chromium/quic_chromium_client_session.cc
diff --git a/net/quic/chromium/quic_chromium_client_session.cc b/net/quic/chromium/quic_chromium_client_session.cc
index e7a334289a587bff6ee4f8c3fc7457ad29395f57..0701f6a1599e92df8acaf55aff1c7af1f3c3a83b 100644
--- a/net/quic/chromium/quic_chromium_client_session.cc
+++ b/net/quic/chromium/quic_chromium_client_session.cc
@@ -186,37 +186,43 @@ class QuicServerPushHelper : public ServerPushDelegate::ServerPushHelper {
} // namespace
-QuicChromiumClientSession::StreamRequest::StreamRequest() : stream_(nullptr) {}
+QuicChromiumClientSession::StreamRequest::StreamRequest(
+ const base::WeakPtr<QuicChromiumClientSession>& session)
+ : session_(session), stream_(nullptr) {}
QuicChromiumClientSession::StreamRequest::~StreamRequest() {
- CancelRequest();
+ if (stream_)
+ stream_->Reset(QUIC_STREAM_CANCELLED);
+
+ if (session_)
+ session_->CancelRequest(this);
}
int QuicChromiumClientSession::StreamRequest::StartRequest(
- const base::WeakPtr<QuicChromiumClientSession>& session,
- QuicChromiumClientStream** stream,
const CompletionCallback& callback) {
- session_ = session;
- stream_ = stream;
- int rv = session_->TryCreateStream(this, stream_);
+ DCHECK(session_);
+ int rv = session_->TryCreateStream(this);
if (rv == ERR_IO_PENDING) {
callback_ = callback;
+ } else {
+ session_.reset();
}
return rv;
}
-void QuicChromiumClientSession::StreamRequest::CancelRequest() {
- if (session_)
- session_->CancelRequest(this);
- session_.reset();
- callback_.Reset();
+QuicChromiumClientStream*
+QuicChromiumClientSession::StreamRequest::ReleaseStream() {
+ DCHECK(stream_);
+ QuicChromiumClientStream* stream = stream_;
+ stream_ = nullptr;
+ return stream;
}
void QuicChromiumClientSession::StreamRequest::OnRequestCompleteSuccess(
QuicChromiumClientStream* stream) {
session_.reset();
- *stream_ = stream;
+ stream_ = stream;
base::ResetAndReturn(&callback_).Run(OK);
}
@@ -456,9 +462,15 @@ void QuicChromiumClientSession::RemoveObserver(Observer* observer) {
observers_.erase(observer);
}
-int QuicChromiumClientSession::TryCreateStream(
- StreamRequest* request,
- QuicChromiumClientStream** stream) {
+std::unique_ptr<QuicChromiumClientSession::StreamRequest>
+QuicChromiumClientSession::CreateStreamRequest() {
+ // base::MakeUnique does not work because the StreamRequest constructor
+ // is private.
+ return std::unique_ptr<StreamRequest>(
+ new StreamRequest(weak_factory_.GetWeakPtr()));
+}
+
+int QuicChromiumClientSession::TryCreateStream(StreamRequest* request) {
if (goaway_received()) {
DVLOG(1) << "Going away.";
return ERR_CONNECTION_CLOSED;
@@ -475,7 +487,7 @@ int QuicChromiumClientSession::TryCreateStream(
}
if (GetNumOpenOutgoingStreams() < max_open_outgoing_streams()) {
- *stream = CreateOutgoingReliableStreamImpl();
+ request->stream_ = CreateOutgoingReliableStreamImpl();
return OK;
}
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.h ('k') | net/quic/chromium/quic_chromium_client_session_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698