| OLD | NEW |
| 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 : MultiplexedHttpStream(std::move(session)), | 49 : MultiplexedHttpStream(std::move(session)), |
| 50 next_state_(STATE_NONE), | 50 next_state_(STATE_NONE), |
| 51 stream_(nullptr), | 51 stream_(nullptr), |
| 52 request_info_(nullptr), | 52 request_info_(nullptr), |
| 53 request_body_stream_(nullptr), | 53 request_body_stream_(nullptr), |
| 54 priority_(MINIMUM_PRIORITY), | 54 priority_(MINIMUM_PRIORITY), |
| 55 response_info_(nullptr), | 55 response_info_(nullptr), |
| 56 has_response_status_(false), | 56 has_response_status_(false), |
| 57 response_status_(ERR_UNEXPECTED), | 57 response_status_(ERR_UNEXPECTED), |
| 58 response_headers_received_(false), | 58 response_headers_received_(false), |
| 59 trailing_headers_received_(false), |
| 59 headers_bytes_received_(0), | 60 headers_bytes_received_(0), |
| 60 headers_bytes_sent_(0), | 61 headers_bytes_sent_(0), |
| 61 closed_stream_received_bytes_(0), | 62 closed_stream_received_bytes_(0), |
| 62 closed_stream_sent_bytes_(0), | 63 closed_stream_sent_bytes_(0), |
| 63 closed_is_first_stream_(false), | 64 closed_is_first_stream_(false), |
| 64 user_buffer_len_(0), | 65 user_buffer_len_(0), |
| 65 session_error_(ERR_UNEXPECTED), | 66 session_error_(ERR_UNEXPECTED), |
| 66 quic_connection_error_(QUIC_NO_ERROR), | 67 quic_connection_error_(QUIC_NO_ERROR), |
| 67 quic_stream_error_(QUIC_STREAM_NO_ERROR), | 68 quic_stream_error_(QUIC_STREAM_NO_ERROR), |
| 68 found_promise_(false), | 69 found_promise_(false), |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 DCHECK(!response_headers_received_); | 458 DCHECK(!response_headers_received_); |
| 458 if (rv > 0) { | 459 if (rv > 0) { |
| 459 headers_bytes_received_ += rv; | 460 headers_bytes_received_ += rv; |
| 460 rv = ProcessResponseHeaders(response_header_block_); | 461 rv = ProcessResponseHeaders(response_header_block_); |
| 461 } | 462 } |
| 462 if (rv != ERR_IO_PENDING && !callback_.is_null()) { | 463 if (rv != ERR_IO_PENDING && !callback_.is_null()) { |
| 463 DoCallback(rv); | 464 DoCallback(rv); |
| 464 } | 465 } |
| 465 } | 466 } |
| 466 | 467 |
| 467 void QuicHttpStream::OnTrailingHeadersAvailable(const SpdyHeaderBlock& headers, | 468 void QuicHttpStream::ReadTrailingHeaders() { |
| 468 size_t frame_len) { | 469 if (!stream_) |
| 470 return; |
| 471 |
| 472 int rv = stream_->ReadTrailingHeaders( |
| 473 &trailing_header_block_, |
| 474 base::Bind(&QuicHttpStream::OnReadTrailingHeadersComplete, |
| 475 weak_factory_.GetWeakPtr())); |
| 476 |
| 477 if (rv != ERR_IO_PENDING) |
| 478 OnReadTrailingHeadersComplete(rv); |
| 479 } |
| 480 |
| 481 void QuicHttpStream::OnReadTrailingHeadersComplete(int rv) { |
| 469 DCHECK(response_headers_received_); | 482 DCHECK(response_headers_received_); |
| 470 headers_bytes_received_ += frame_len; | 483 if (rv > 0) |
| 484 headers_bytes_received_ += rv; |
| 471 | 485 |
| 472 // QuicHttpStream ignores trailers. | 486 // QuicHttpStream ignores trailers. |
| 473 if (stream_->IsDoneReading()) { | 487 if (stream_->IsDoneReading()) { |
| 474 // Close the read side. If the write side has been closed, this will | 488 // Close the read side. If the write side has been closed, this will |
| 475 // invoke QuicHttpStream::OnClose to reset the stream. | 489 // invoke QuicHttpStream::OnClose to reset the stream. |
| 476 stream_->OnFinRead(); | 490 stream_->OnFinRead(); |
| 477 SetResponseStatus(OK); | 491 SetResponseStatus(OK); |
| 478 } | 492 } |
| 479 } | 493 } |
| 480 | 494 |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 744 response_info_->was_alpn_negotiated = true; | 758 response_info_->was_alpn_negotiated = true; |
| 745 response_info_->alpn_negotiated_protocol = | 759 response_info_->alpn_negotiated_protocol = |
| 746 HttpResponseInfo::ConnectionInfoToString(response_info_->connection_info); | 760 HttpResponseInfo::ConnectionInfoToString(response_info_->connection_info); |
| 747 response_info_->response_time = base::Time::Now(); | 761 response_info_->response_time = base::Time::Now(); |
| 748 response_info_->request_time = request_time_; | 762 response_info_->request_time = request_time_; |
| 749 response_headers_received_ = true; | 763 response_headers_received_ = true; |
| 750 | 764 |
| 751 // Populate |connect_timing_| when response headers are received. This should | 765 // Populate |connect_timing_| when response headers are received. This should |
| 752 // take care of 0-RTT where request is sent before handshake is confirmed. | 766 // take care of 0-RTT where request is sent before handshake is confirmed. |
| 753 connect_timing_ = quic_session()->GetConnectTiming(); | 767 connect_timing_ = quic_session()->GetConnectTiming(); |
| 768 |
| 769 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 770 FROM_HERE, base::Bind(&QuicHttpStream::ReadTrailingHeaders, |
| 771 weak_factory_.GetWeakPtr())); |
| 772 |
| 754 return OK; | 773 return OK; |
| 755 } | 774 } |
| 756 | 775 |
| 757 void QuicHttpStream::OnReadBodyComplete(int rv) { | 776 void QuicHttpStream::OnReadBodyComplete(int rv) { |
| 758 CHECK(callback_); | 777 CHECK(callback_); |
| 759 user_buffer_ = nullptr; | 778 user_buffer_ = nullptr; |
| 760 user_buffer_len_ = 0; | 779 user_buffer_len_ = 0; |
| 761 rv = HandleReadComplete(rv); | 780 rv = HandleReadComplete(rv); |
| 762 DoCallback(rv); | 781 DoCallback(rv); |
| 763 } | 782 } |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 832 quic_stream_error_ != QUIC_STREAM_CONNECTION_ERROR) { | 851 quic_stream_error_ != QUIC_STREAM_CONNECTION_ERROR) { |
| 833 return ERR_QUIC_PROTOCOL_ERROR; | 852 return ERR_QUIC_PROTOCOL_ERROR; |
| 834 } | 853 } |
| 835 | 854 |
| 836 DCHECK_NE(QUIC_HANDSHAKE_TIMEOUT, quic_connection_error_); | 855 DCHECK_NE(QUIC_HANDSHAKE_TIMEOUT, quic_connection_error_); |
| 837 | 856 |
| 838 return ERR_QUIC_PROTOCOL_ERROR; | 857 return ERR_QUIC_PROTOCOL_ERROR; |
| 839 } | 858 } |
| 840 | 859 |
| 841 } // namespace net | 860 } // namespace net |
| OLD | NEW |