Index: net/quic/quic_chromium_client_stream.cc |
diff --git a/net/quic/quic_chromium_client_stream.cc b/net/quic/quic_chromium_client_stream.cc |
index 50a3105b969cd882d041c40112759006daacc423..94f5a36889babd94601385c3746efc31c0dce531 100644 |
--- a/net/quic/quic_chromium_client_stream.cc |
+++ b/net/quic/quic_chromium_client_stream.cc |
@@ -35,35 +35,27 @@ QuicChromiumClientStream::~QuicChromiumClientStream() { |
void QuicChromiumClientStream::OnStreamHeadersComplete(bool fin, |
size_t frame_len) { |
QuicSpdyStream::OnStreamHeadersComplete(fin, frame_len); |
- SpdyHeaderBlock headers; |
- SpdyFramer framer(HTTP2); |
- |
- size_t headers_len; |
- const char* header_data; |
if (decompressed_headers().empty() && !decompressed_trailers().empty()) { |
DCHECK(trailers_decompressed()); |
- headers_len = decompressed_trailers().length(); |
- header_data = decompressed_trailers().data(); |
+ // The delegate will read the trailers via a posted task. |
+ NotifyDelegateOfHeadersCompleteLater(response_trailers(), frame_len); |
} else { |
DCHECK(!headers_delivered_); |
- headers_len = decompressed_headers().length(); |
- header_data = decompressed_headers().data(); |
- } |
- if (!framer.ParseHeaderBlockInBuffer(header_data, headers_len, &headers)) { |
- DLOG(WARNING) << "Invalid headers"; |
- Reset(QUIC_BAD_APPLICATION_PAYLOAD); |
- return; |
- } |
- |
- if (!headers_delivered_) { |
+ SpdyHeaderBlock headers; |
+ SpdyFramer framer(HTTP2); |
+ size_t headers_len = decompressed_headers().length(); |
+ const char* header_data = decompressed_headers().data(); |
+ if (!framer.ParseHeaderBlockInBuffer(header_data, headers_len, &headers)) { |
+ DLOG(WARNING) << "Invalid headers"; |
+ Reset(QUIC_BAD_APPLICATION_PAYLOAD); |
+ return; |
+ } |
MarkHeadersConsumed(headers_len); |
session_->OnInitialHeadersComplete(id(), headers); |
- } else { |
- MarkTrailersConsumed(headers_len); |
- } |
- // The delegate will read the headers via a posted task. |
- NotifyDelegateOfHeadersCompleteLater(headers, frame_len); |
+ // The delegate will read the headers via a posted task. |
+ NotifyDelegateOfHeadersCompleteLater(headers, frame_len); |
+ } |
} |
void QuicChromiumClientStream::OnPromiseHeadersComplete( |
@@ -193,6 +185,9 @@ void QuicChromiumClientStream::NotifyDelegateOfHeadersComplete( |
size_t frame_len) { |
if (!delegate_) |
return; |
+ // Only mark trailers consumed when we are about to notify delegate. |
+ if (headers_delivered_) |
+ MarkTrailersConsumed(decompressed_trailers().length()); |
headers_delivered_ = true; |
delegate_->OnHeadersAvailable(headers, frame_len); |