Index: net/spdy/spdy_http_stream.cc |
diff --git a/net/spdy/spdy_http_stream.cc b/net/spdy/spdy_http_stream.cc |
index 259581a5229173cc2e7fcbc84963396f357c0d80..97c4ad6e1fec4899313131ab8c4b1bdf20abb998 100644 |
--- a/net/spdy/spdy_http_stream.cc |
+++ b/net/spdy/spdy_http_stream.cc |
@@ -302,13 +302,12 @@ void SpdyHttpStream::Cancel() { |
} |
void SpdyHttpStream::OnRequestHeadersSent() { |
- if (!request_callback_.is_null()) |
- DoRequestCallback(OK); |
- |
- // TODO(akalin): Do this immediately after sending the request |
- // headers. |
- if (HasUploadData()) |
+ if (HasUploadData()) { |
ReadAndSendRequestBodyData(); |
+ } else { |
+ if (!request_callback_.is_null()) |
+ DoRequestCallback(OK); |
+ } |
} |
SpdyResponseHeadersStatus SpdyHttpStream::OnResponseHeadersUpdated( |
@@ -437,8 +436,14 @@ void SpdyHttpStream::ReadAndSendRequestBodyData() { |
CHECK(HasUploadData()); |
CHECK_EQ(request_body_buf_size_, 0); |
- if (request_info_->upload_data_stream->IsEOF()) |
+ if (request_info_->upload_data_stream->IsEOF()) { |
+ // The cb should be null here, but it's better to be |
+ // paranoid. |
mmenke
2016/06/14 15:25:44
I don't believe this is true - when uploading chun
maksims (do not use this acc)
2016/06/15 07:51:45
Check the SendChunkedPostLastEmpty that I added. A
|
+ if (!request_callback_.is_null()) { |
+ DoRequestCallback(OK); |
+ } |
mmenke
2016/06/14 15:25:44
nit: Remove braces
|
return; |
+ } |
// Read the data from the request body stream. |
const int rv = request_info_->upload_data_stream |
@@ -461,6 +466,10 @@ void SpdyHttpStream::OnRequestBodyReadCompleted(int status) { |
// Only the final fame may have a length of 0. |
if (eof) { |
CHECK_GE(request_body_buf_size_, 0); |
+ // Call the cb only after the whole data is sent. |
mmenke
2016/06/14 15:25:44
nit: "after the whole file is sent." or "after al
maksims (do not use this acc)
2016/06/15 07:51:45
Done.
|
+ if (!request_callback_.is_null()) { |
+ DoRequestCallback(OK); |
+ } |
mmenke
2016/06/14 15:25:44
nit: Remove braces
maksims (do not use this acc)
2016/06/15 07:51:45
Done.
|
} else { |
CHECK_GT(request_body_buf_size_, 0); |
} |
@@ -533,7 +542,6 @@ void SpdyHttpStream::DoBufferedReadCallback() { |
void SpdyHttpStream::DoRequestCallback(int rv) { |
CHECK_NE(rv, ERR_IO_PENDING); |
CHECK(!request_callback_.is_null()); |
- |
// Since Run may result in being called back, reset request_callback_ in |
// advance. |
base::ResetAndReturn(&request_callback_).Run(rv); |