Index: net/spdy/spdy_stream.cc |
diff --git a/net/spdy/spdy_stream.cc b/net/spdy/spdy_stream.cc |
index f31de156a89cd040f3767550c18287bd5ffc61c4..3fdb1ee73a7636a9cecb22f9e7faf32d60e51a84 100644 |
--- a/net/spdy/spdy_stream.cc |
+++ b/net/spdy/spdy_stream.cc |
@@ -460,6 +460,12 @@ int SpdyStream::OnAdditionalResponseHeadersReceived( |
delegate_->OnTrailers(additional_response_headers); |
return OK; |
} |
+ if (type_ == SPDY_BIDIRECTIONAL_STREAM) { |
+ DCHECK_EQ(RESPONSE_HEADERS_ARE_COMPLETE, response_headers_status_); |
+ response_headers_status_ = TRAILERS_RECEIVED; |
+ delegate_->OnTrailers(additional_response_headers); |
+ return OK; |
+ } |
if (type_ == SPDY_PUSH_STREAM && |
response_headers_status_ == RESPONSE_HEADERS_ARE_COMPLETE) { |
session_->ResetStream( |
@@ -501,8 +507,10 @@ void SpdyStream::OnDataReceived(scoped_ptr<SpdyBuffer> buffer) { |
} |
if (response_headers_status_ == TRAILERS_RECEIVED && buffer) { |
- // TRAILERS_RECEIVED is only used in SPDY_REQUEST_RESPONSE_STREAM. |
- DCHECK_EQ(type_, SPDY_REQUEST_RESPONSE_STREAM); |
+ // TRAILERS_RECEIVED is only used in SPDY_REQUEST_RESPONSE_STREAM and |
+ // SPDY_BIDIRECTIONAL_STREAM. |
+ DCHECK(type_ == SPDY_REQUEST_RESPONSE_STREAM || |
+ type_ == SPDY_BIDIRECTIONAL_STREAM); |
session_->ResetStream(stream_id_, RST_STREAM_PROTOCOL_ERROR, |
"Data received after trailers"); |
return; |