Index: net/quic/chromium/bidirectional_stream_quic_impl.cc |
diff --git a/net/quic/chromium/bidirectional_stream_quic_impl.cc b/net/quic/chromium/bidirectional_stream_quic_impl.cc |
index 1afd2b60b0d00856e45269925162b9c193bfeefd..17a9f7960843122c69862de0016df3648b89ded8 100644 |
--- a/net/quic/chromium/bidirectional_stream_quic_impl.cc |
+++ b/net/quic/chromium/bidirectional_stream_quic_impl.cc |
@@ -227,16 +227,6 @@ bool BidirectionalStreamQuicImpl::GetLoadTimingInfo( |
return true; |
} |
-void BidirectionalStreamQuicImpl::OnInitialHeadersAvailable( |
- const SpdyHeaderBlock& headers, |
- size_t frame_len) { |
- headers_bytes_received_ += frame_len; |
- negotiated_protocol_ = kProtoQUIC; |
- connect_timing_ = session_->GetConnectTiming(); |
- if (delegate_) |
- delegate_->OnHeadersReceived(headers); |
-} |
- |
void BidirectionalStreamQuicImpl::OnTrailingHeadersAvailable( |
const SpdyHeaderBlock& headers, |
size_t frame_len) { |
@@ -295,6 +285,15 @@ void BidirectionalStreamQuicImpl::OnStreamReady(int rv) { |
if (rv == OK) { |
stream_ = session_->ReleaseStream(this); |
NotifyStreamReady(); |
+ |
+ rv = stream_->ReadInitialHeaders( |
+ &initial_headers_, |
+ base::Bind(&BidirectionalStreamQuicImpl::OnReadInitialHeadersComplete, |
+ weak_factory_.GetWeakPtr())); |
+ if (rv == ERR_IO_PENDING) |
+ return; |
+ |
+ OnReadInitialHeadersComplete(rv); |
} else { |
NotifyError(rv); |
} |
@@ -310,6 +309,20 @@ void BidirectionalStreamQuicImpl::OnSendDataComplete(int rv) { |
} |
} |
+void BidirectionalStreamQuicImpl::OnReadInitialHeadersComplete(int rv) { |
+ DCHECK_NE(ERR_IO_PENDING, rv); |
+ if (rv < 0) { |
+ NotifyError(rv); |
+ return; |
+ } |
+ |
+ headers_bytes_received_ += rv; |
+ negotiated_protocol_ = kProtoQUIC; |
+ connect_timing_ = session_->GetConnectTiming(); |
+ if (delegate_) |
+ delegate_->OnHeadersReceived(initial_headers_); |
+} |
+ |
void BidirectionalStreamQuicImpl::NotifyError(int error) { |
DCHECK_NE(OK, error); |
DCHECK_NE(ERR_IO_PENDING, error); |