Index: net/spdy/spdy_http_stream.cc |
diff --git a/net/spdy/spdy_http_stream.cc b/net/spdy/spdy_http_stream.cc |
index bb64021f98fd56d61ba2dd61e9f973b733fd4cd7..4e62b4588f17ba3981db797a383c895a4cc35d76 100644 |
--- a/net/spdy/spdy_http_stream.cc |
+++ b/net/spdy/spdy_http_stream.cc |
@@ -262,6 +262,7 @@ int SpdyHttpStream::SendRequest(const std::string& /*headers_string*/, |
CHECK(stream_.get()); |
stream_->SetDelegate(this); |
+ |
linked_ptr<spdy::SpdyHeaderBlock> headers(new spdy::SpdyHeaderBlock); |
CreateSpdyHeadersFromHttpRequest(*request_info_, headers.get()); |
stream_->set_spdy_headers(headers); |
@@ -285,7 +286,7 @@ int SpdyHttpStream::SendRequest(const std::string& /*headers_string*/, |
CHECK(!stream_->cancelled()); |
CHECK(response); |
- if (stream_->response_complete()) { |
+ if (!stream_->pushed() && stream_->response_complete()) { |
if (stream_->response_status() == OK) |
return ERR_FAILED; |
else |
@@ -297,16 +298,14 @@ int SpdyHttpStream::SendRequest(const std::string& /*headers_string*/, |
// a) A client initiated request. In this case, |response_info_| should be |
// NULL to start with. |
// b) A client request which matches a response that the server has already |
- // pushed. In this case, the value of |*push_response_info_| is copied |
- // over to the new response object |*response|. |push_response_info_| is |
- // deleted, and |response_info_| is reset |response|. |
+ // pushed. |
if (push_response_info_.get()) { |
- *response = *push_response_info_; |
+ *response = *(push_response_info_.get()); |
push_response_info_.reset(); |
- response_info_ = NULL; |
} |
+ else |
+ DCHECK_EQ(static_cast<HttpResponseInfo*>(NULL), response_info_); |
- DCHECK_EQ(static_cast<HttpResponseInfo*>(NULL), response_info_); |
response_info_ = response; |
bool has_upload_data = request_body_stream_.get() != NULL; |