Index: net/quic/chromium/quic_chromium_client_stream.cc |
diff --git a/net/quic/chromium/quic_chromium_client_stream.cc b/net/quic/chromium/quic_chromium_client_stream.cc |
index 8782b9a9c07bfab651af4b5b65d1ee13ffdfce03..15f464319552aa981013686009b6eec174a61928 100644 |
--- a/net/quic/chromium/quic_chromium_client_stream.cc |
+++ b/net/quic/chromium/quic_chromium_client_stream.cc |
@@ -60,7 +60,8 @@ void QuicChromiumClientStream::OnInitialHeadersComplete( |
if (delegate_) { |
// The delegate will receive the headers via a posted task. |
- NotifyDelegateOfHeadersCompleteLater(std::move(header_block), frame_len); |
+ NotifyDelegateOfInitialHeadersAvailableLater(std::move(header_block), |
+ frame_len); |
return; |
} |
@@ -74,7 +75,8 @@ void QuicChromiumClientStream::OnTrailingHeadersComplete( |
size_t frame_len, |
const QuicHeaderList& header_list) { |
QuicSpdyStream::OnTrailingHeadersComplete(fin, frame_len, header_list); |
- NotifyDelegateOfHeadersCompleteLater(received_trailers().Clone(), frame_len); |
+ NotifyDelegateOfTrailingHeadersAvailableLater(received_trailers().Clone(), |
+ frame_len); |
} |
void QuicChromiumClientStream::OnPromiseHeaderList( |
@@ -199,8 +201,8 @@ void QuicChromiumClientStream::SetDelegate( |
// Should this perhaps be via PostTask to make reasoning simpler? |
if (!initial_headers_.empty()) { |
- delegate_->OnHeadersAvailable(std::move(initial_headers_), |
- initial_headers_frame_len_); |
+ delegate_->OnInitialHeadersAvailable(std::move(initial_headers_), |
+ initial_headers_frame_len_); |
} |
} |
@@ -228,38 +230,61 @@ int QuicChromiumClientStream::Read(IOBuffer* buf, int buf_len) { |
return bytes_read; |
} |
-void QuicChromiumClientStream::NotifyDelegateOfHeadersCompleteLater( |
+void QuicChromiumClientStream::NotifyDelegateOfInitialHeadersAvailableLater( |
SpdyHeaderBlock headers, |
size_t frame_len) { |
DCHECK(delegate_); |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, |
- base::Bind(&QuicChromiumClientStream::NotifyDelegateOfHeadersComplete, |
- weak_factory_.GetWeakPtr(), base::Passed(std::move(headers)), |
- frame_len)); |
+ base::Bind( |
+ &QuicChromiumClientStream::NotifyDelegateOfInitialHeadersAvailable, |
+ weak_factory_.GetWeakPtr(), base::Passed(std::move(headers)), |
+ frame_len)); |
} |
-void QuicChromiumClientStream::NotifyDelegateOfHeadersComplete( |
+void QuicChromiumClientStream::NotifyDelegateOfInitialHeadersAvailable( |
SpdyHeaderBlock headers, |
size_t frame_len) { |
if (!delegate_) |
return; |
+ |
+ DCHECK(!headers_delivered_); |
+ headers_delivered_ = true; |
+ net_log_.AddEvent( |
+ NetLogEventType::QUIC_CHROMIUM_CLIENT_STREAM_READ_RESPONSE_HEADERS, |
+ base::Bind(&SpdyHeaderBlockNetLogCallback, &headers)); |
+ |
+ delegate_->OnInitialHeadersAvailable(headers, frame_len); |
+} |
+ |
+void QuicChromiumClientStream::NotifyDelegateOfTrailingHeadersAvailableLater( |
+ SpdyHeaderBlock headers, |
+ size_t frame_len) { |
+ DCHECK(delegate_); |
+ base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ FROM_HERE, |
+ base::Bind( |
+ &QuicChromiumClientStream::NotifyDelegateOfTrailingHeadersAvailable, |
+ weak_factory_.GetWeakPtr(), base::Passed(std::move(headers)), |
+ frame_len)); |
+} |
+ |
+void QuicChromiumClientStream::NotifyDelegateOfTrailingHeadersAvailable( |
+ SpdyHeaderBlock headers, |
+ size_t frame_len) { |
+ if (!delegate_) |
+ return; |
+ |
+ DCHECK(headers_delivered_); |
// Only mark trailers consumed when we are about to notify delegate. |
- if (headers_delivered_) { |
- MarkTrailersConsumed(); |
- // Post an async task to notify delegate of the FIN flag. |
- NotifyDelegateOfDataAvailableLater(); |
- net_log_.AddEvent( |
- NetLogEventType::QUIC_CHROMIUM_CLIENT_STREAM_READ_RESPONSE_TRAILERS, |
- base::Bind(&SpdyHeaderBlockNetLogCallback, &headers)); |
- } else { |
- headers_delivered_ = true; |
- net_log_.AddEvent( |
- NetLogEventType::QUIC_CHROMIUM_CLIENT_STREAM_READ_RESPONSE_HEADERS, |
- base::Bind(&SpdyHeaderBlockNetLogCallback, &headers)); |
- } |
+ MarkTrailersConsumed(); |
+ // Post an async task to notify delegate of the FIN flag. |
+ NotifyDelegateOfDataAvailableLater(); |
+ net_log_.AddEvent( |
+ NetLogEventType::QUIC_CHROMIUM_CLIENT_STREAM_READ_RESPONSE_TRAILERS, |
+ base::Bind(&SpdyHeaderBlockNetLogCallback, &headers)); |
- delegate_->OnHeadersAvailable(headers, frame_len); |
+ delegate_->OnTrailingHeadersAvailable(headers, frame_len); |
} |
void QuicChromiumClientStream::NotifyDelegateOfDataAvailableLater() { |