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

Side by Side Diff: net/quic/chromium/quic_http_stream.cc

Issue 2848923004: Move the "wait for QUIC handshake confirmation" logic to QuicChromiumClientSession::StreamRequest (Closed)
Patch Set: fix 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
« no previous file with comments | « net/quic/chromium/quic_http_stream.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_http_stream.h" 5 #include "net/quic/chromium/quic_http_stream.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 if (!callback_.is_null()) 513 if (!callback_.is_null())
514 DoCallback(GetResponseStatus()); 514 DoCallback(GetResponseStatus());
515 } 515 }
516 516
517 bool QuicHttpStream::HasSendHeadersComplete() { 517 bool QuicHttpStream::HasSendHeadersComplete() {
518 return next_state_ > STATE_SEND_HEADERS_COMPLETE; 518 return next_state_ > STATE_SEND_HEADERS_COMPLETE;
519 } 519 }
520 520
521 void QuicHttpStream::OnCryptoHandshakeConfirmed() { 521 void QuicHttpStream::OnCryptoHandshakeConfirmed() {
522 was_handshake_confirmed_ = true; 522 was_handshake_confirmed_ = true;
523 if (next_state_ == STATE_WAIT_FOR_CONFIRMATION_COMPLETE) {
524 // Post a task to avoid reentrant calls into the session.
525 base::ThreadTaskRunnerHandle::Get()->PostTask(
526 FROM_HERE, base::Bind(&QuicHttpStream::OnIOComplete,
527 weak_factory_.GetWeakPtr(), OK));
528 }
529 } 523 }
530 524
531 void QuicHttpStream::OnSuccessfulVersionNegotiation( 525 void QuicHttpStream::OnSuccessfulVersionNegotiation(
532 const QuicVersion& version) { 526 const QuicVersion& version) {
533 quic_version_ = version; 527 quic_version_ = version;
534 } 528 }
535 529
536 void QuicHttpStream::OnSessionClosed(int error, bool port_migration_detected) { 530 void QuicHttpStream::OnSessionClosed(int error, bool port_migration_detected) {
537 session_error_ = error; 531 session_error_ = error;
538 port_migration_detected_ = port_migration_detected; 532 port_migration_detected_ = port_migration_detected;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 CHECK_EQ(OK, rv); 573 CHECK_EQ(OK, rv);
580 rv = DoRequestStream(); 574 rv = DoRequestStream();
581 break; 575 break;
582 case STATE_REQUEST_STREAM_COMPLETE: 576 case STATE_REQUEST_STREAM_COMPLETE:
583 rv = DoRequestStreamComplete(rv); 577 rv = DoRequestStreamComplete(rv);
584 break; 578 break;
585 case STATE_SET_REQUEST_PRIORITY: 579 case STATE_SET_REQUEST_PRIORITY:
586 CHECK_EQ(OK, rv); 580 CHECK_EQ(OK, rv);
587 rv = DoSetRequestPriority(); 581 rv = DoSetRequestPriority();
588 break; 582 break;
589 case STATE_WAIT_FOR_CONFIRMATION:
590 CHECK_EQ(OK, rv);
591 rv = DoWaitForConfirmation();
592 break;
593 case STATE_WAIT_FOR_CONFIRMATION_COMPLETE:
594 rv = DoWaitForConfirmationComplete(rv);
595 break;
596 case STATE_SEND_HEADERS: 583 case STATE_SEND_HEADERS:
597 CHECK_EQ(OK, rv); 584 CHECK_EQ(OK, rv);
598 rv = DoSendHeaders(); 585 rv = DoSendHeaders();
599 break; 586 break;
600 case STATE_SEND_HEADERS_COMPLETE: 587 case STATE_SEND_HEADERS_COMPLETE:
601 rv = DoSendHeadersComplete(rv); 588 rv = DoSendHeadersComplete(rv);
602 break; 589 break;
603 case STATE_READ_REQUEST_BODY: 590 case STATE_READ_REQUEST_BODY:
604 CHECK_EQ(OK, rv); 591 CHECK_EQ(OK, rv);
605 rv = DoReadRequestBody(); 592 rv = DoReadRequestBody();
(...skipping 16 matching lines...) Expand all
622 break; 609 break;
623 } 610 }
624 } while (next_state_ != STATE_NONE && next_state_ != STATE_OPEN && 611 } while (next_state_ != STATE_NONE && next_state_ != STATE_OPEN &&
625 rv != ERR_IO_PENDING); 612 rv != ERR_IO_PENDING);
626 613
627 return rv; 614 return rv;
628 } 615 }
629 616
630 int QuicHttpStream::DoRequestStream() { 617 int QuicHttpStream::DoRequestStream() {
631 next_state_ = STATE_REQUEST_STREAM_COMPLETE; 618 next_state_ = STATE_REQUEST_STREAM_COMPLETE;
632 stream_request_ = session_->CreateStreamRequest(); 619 stream_request_ =
620 session_->CreateStreamRequest(request_info_->method == "POST");
633 return stream_request_->StartRequest( 621 return stream_request_->StartRequest(
634 base::Bind(&QuicHttpStream::OnIOComplete, weak_factory_.GetWeakPtr())); 622 base::Bind(&QuicHttpStream::OnIOComplete, weak_factory_.GetWeakPtr()));
635 } 623 }
636 624
637 int QuicHttpStream::DoRequestStreamComplete(int rv) { 625 int QuicHttpStream::DoRequestStreamComplete(int rv) {
638 DCHECK(rv == OK || !stream_); 626 DCHECK(rv == OK || !stream_);
639 if (rv != OK) { 627 if (rv != OK) {
640 session_error_ = rv; 628 session_error_ = rv;
641 return GetResponseStatus(); 629 return GetResponseStatus();
642 } 630 }
(...skipping 15 matching lines...) Expand all
658 646
659 return OK; 647 return OK;
660 } 648 }
661 649
662 int QuicHttpStream::DoSetRequestPriority() { 650 int QuicHttpStream::DoSetRequestPriority() {
663 // Set priority according to request 651 // Set priority according to request
664 DCHECK(stream_); 652 DCHECK(stream_);
665 DCHECK(response_info_); 653 DCHECK(response_info_);
666 SpdyPriority priority = ConvertRequestPriorityToQuicPriority(priority_); 654 SpdyPriority priority = ConvertRequestPriorityToQuicPriority(priority_);
667 stream_->SetPriority(priority); 655 stream_->SetPriority(priority);
668 next_state_ = STATE_WAIT_FOR_CONFIRMATION;
669 return OK;
670 }
671
672 int QuicHttpStream::DoWaitForConfirmation() {
673 next_state_ = STATE_WAIT_FOR_CONFIRMATION_COMPLETE;
674 if (!session_->IsCryptoHandshakeConfirmed() &&
675 request_info_->method == "POST") {
676 return ERR_IO_PENDING;
677 }
678 return OK;
679 }
680
681 int QuicHttpStream::DoWaitForConfirmationComplete(int rv) {
682 if (rv < 0)
683 return rv;
684
685 next_state_ = STATE_SEND_HEADERS; 656 next_state_ = STATE_SEND_HEADERS;
686 return OK; 657 return OK;
687 } 658 }
688 659
689 int QuicHttpStream::DoSendHeaders() { 660 int QuicHttpStream::DoSendHeaders() {
690 if (!stream_) 661 if (!stream_)
691 return GetResponseStatus(); 662 return GetResponseStatus();
692 663
693 // Log the actual request with the URL Request's net log. 664 // Log the actual request with the URL Request's net log.
694 stream_net_log_.AddEvent( 665 stream_net_log_.AddEvent(
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 quic_stream_error_ != QUIC_STREAM_CONNECTION_ERROR) { 861 quic_stream_error_ != QUIC_STREAM_CONNECTION_ERROR) {
891 return ERR_QUIC_PROTOCOL_ERROR; 862 return ERR_QUIC_PROTOCOL_ERROR;
892 } 863 }
893 864
894 DCHECK_NE(QUIC_HANDSHAKE_TIMEOUT, quic_connection_error_); 865 DCHECK_NE(QUIC_HANDSHAKE_TIMEOUT, quic_connection_error_);
895 866
896 return ERR_QUIC_PROTOCOL_ERROR; 867 return ERR_QUIC_PROTOCOL_ERROR;
897 } 868 }
898 869
899 } // namespace net 870 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_http_stream.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698