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

Side by Side 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, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/chromium/quic_chromium_client_session.h" 5 #include "net/quic/chromium/quic_chromium_client_session.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 179
180 const GURL& GetURL() const override { return request_url_; } 180 const GURL& GetURL() const override { return request_url_; }
181 181
182 private: 182 private:
183 base::WeakPtr<QuicChromiumClientSession> session_; 183 base::WeakPtr<QuicChromiumClientSession> session_;
184 const GURL request_url_; 184 const GURL request_url_;
185 }; 185 };
186 186
187 } // namespace 187 } // namespace
188 188
189 QuicChromiumClientSession::StreamRequest::StreamRequest() : stream_(nullptr) {} 189 QuicChromiumClientSession::StreamRequest::StreamRequest(
190 const base::WeakPtr<QuicChromiumClientSession>& session)
191 : session_(session), stream_(nullptr) {}
190 192
191 QuicChromiumClientSession::StreamRequest::~StreamRequest() { 193 QuicChromiumClientSession::StreamRequest::~StreamRequest() {
192 CancelRequest(); 194 if (stream_)
195 stream_->Reset(QUIC_STREAM_CANCELLED);
196
197 if (session_)
198 session_->CancelRequest(this);
193 } 199 }
194 200
195 int QuicChromiumClientSession::StreamRequest::StartRequest( 201 int QuicChromiumClientSession::StreamRequest::StartRequest(
196 const base::WeakPtr<QuicChromiumClientSession>& session,
197 QuicChromiumClientStream** stream,
198 const CompletionCallback& callback) { 202 const CompletionCallback& callback) {
199 session_ = session; 203 DCHECK(session_);
200 stream_ = stream; 204 int rv = session_->TryCreateStream(this);
201 int rv = session_->TryCreateStream(this, stream_);
202 if (rv == ERR_IO_PENDING) { 205 if (rv == ERR_IO_PENDING) {
203 callback_ = callback; 206 callback_ = callback;
207 } else {
208 session_.reset();
204 } 209 }
205 210
206 return rv; 211 return rv;
207 } 212 }
208 213
209 void QuicChromiumClientSession::StreamRequest::CancelRequest() { 214 QuicChromiumClientStream*
210 if (session_) 215 QuicChromiumClientSession::StreamRequest::ReleaseStream() {
211 session_->CancelRequest(this); 216 DCHECK(stream_);
212 session_.reset(); 217 QuicChromiumClientStream* stream = stream_;
213 callback_.Reset(); 218 stream_ = nullptr;
219 return stream;
214 } 220 }
215 221
216 void QuicChromiumClientSession::StreamRequest::OnRequestCompleteSuccess( 222 void QuicChromiumClientSession::StreamRequest::OnRequestCompleteSuccess(
217 QuicChromiumClientStream* stream) { 223 QuicChromiumClientStream* stream) {
218 session_.reset(); 224 session_.reset();
219 *stream_ = stream; 225 stream_ = stream;
220 base::ResetAndReturn(&callback_).Run(OK); 226 base::ResetAndReturn(&callback_).Run(OK);
221 } 227 }
222 228
223 void QuicChromiumClientSession::StreamRequest::OnRequestCompleteFailure( 229 void QuicChromiumClientSession::StreamRequest::OnRequestCompleteFailure(
224 int rv) { 230 int rv) {
225 session_.reset(); 231 session_.reset();
226 base::ResetAndReturn(&callback_).Run(rv); 232 base::ResetAndReturn(&callback_).Run(rv);
227 } 233 }
228 234
229 QuicChromiumClientSession::QuicChromiumClientSession( 235 QuicChromiumClientSession::QuicChromiumClientSession(
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 455
450 DCHECK(!base::ContainsKey(observers_, observer)); 456 DCHECK(!base::ContainsKey(observers_, observer));
451 observers_.insert(observer); 457 observers_.insert(observer);
452 } 458 }
453 459
454 void QuicChromiumClientSession::RemoveObserver(Observer* observer) { 460 void QuicChromiumClientSession::RemoveObserver(Observer* observer) {
455 DCHECK(base::ContainsKey(observers_, observer)); 461 DCHECK(base::ContainsKey(observers_, observer));
456 observers_.erase(observer); 462 observers_.erase(observer);
457 } 463 }
458 464
459 int QuicChromiumClientSession::TryCreateStream( 465 std::unique_ptr<QuicChromiumClientSession::StreamRequest>
460 StreamRequest* request, 466 QuicChromiumClientSession::CreateStreamRequest() {
461 QuicChromiumClientStream** stream) { 467 // base::MakeUnique does not work because the StreamRequest constructor
468 // is private.
469 return std::unique_ptr<StreamRequest>(
470 new StreamRequest(weak_factory_.GetWeakPtr()));
471 }
472
473 int QuicChromiumClientSession::TryCreateStream(StreamRequest* request) {
462 if (goaway_received()) { 474 if (goaway_received()) {
463 DVLOG(1) << "Going away."; 475 DVLOG(1) << "Going away.";
464 return ERR_CONNECTION_CLOSED; 476 return ERR_CONNECTION_CLOSED;
465 } 477 }
466 478
467 if (!connection()->connected()) { 479 if (!connection()->connected()) {
468 DVLOG(1) << "Already closed."; 480 DVLOG(1) << "Already closed.";
469 return ERR_CONNECTION_CLOSED; 481 return ERR_CONNECTION_CLOSED;
470 } 482 }
471 483
472 if (going_away_) { 484 if (going_away_) {
473 RecordUnexpectedOpenStreams(TRY_CREATE_STREAM); 485 RecordUnexpectedOpenStreams(TRY_CREATE_STREAM);
474 return ERR_CONNECTION_CLOSED; 486 return ERR_CONNECTION_CLOSED;
475 } 487 }
476 488
477 if (GetNumOpenOutgoingStreams() < max_open_outgoing_streams()) { 489 if (GetNumOpenOutgoingStreams() < max_open_outgoing_streams()) {
478 *stream = CreateOutgoingReliableStreamImpl(); 490 request->stream_ = CreateOutgoingReliableStreamImpl();
479 return OK; 491 return OK;
480 } 492 }
481 493
482 request->pending_start_time_ = base::TimeTicks::Now(); 494 request->pending_start_time_ = base::TimeTicks::Now();
483 stream_requests_.push_back(request); 495 stream_requests_.push_back(request);
484 UMA_HISTOGRAM_COUNTS_1000("Net.QuicSession.NumPendingStreamRequests", 496 UMA_HISTOGRAM_COUNTS_1000("Net.QuicSession.NumPendingStreamRequests",
485 stream_requests_.size()); 497 stream_requests_.size());
486 return ERR_IO_PENDING; 498 return ERR_IO_PENDING;
487 } 499 }
488 500
(...skipping 992 matching lines...) Expand 10 before | Expand all | Expand 10 after
1481 } 1493 }
1482 1494
1483 size_t QuicChromiumClientSession::EstimateMemoryUsage() const { 1495 size_t QuicChromiumClientSession::EstimateMemoryUsage() const {
1484 // TODO(xunjieli): Estimate |crypto_stream_|, QuicSpdySession's 1496 // TODO(xunjieli): Estimate |crypto_stream_|, QuicSpdySession's
1485 // QuicHeaderList, QuicSession's QuiCWriteBlockedList, open streams and 1497 // QuicHeaderList, QuicSession's QuiCWriteBlockedList, open streams and
1486 // unacked packet map. 1498 // unacked packet map.
1487 return base::trace_event::EstimateMemoryUsage(packet_readers_); 1499 return base::trace_event::EstimateMemoryUsage(packet_readers_);
1488 } 1500 }
1489 1501
1490 } // namespace net 1502 } // namespace net
OLDNEW
« 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