Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1773)

Unified Diff: net/spdy/spdy_stream.cc

Issue 10689034: SPDY - chunked upload - speech recognition doesn't work with SPDY/3 (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/spdy/spdy_stream.cc
===================================================================
--- net/spdy/spdy_stream.cc (revision 144839)
+++ net/spdy/spdy_stream.cc (working copy)
@@ -151,7 +151,10 @@
void SpdyStream::PossiblyResumeIfStalled() {
if (send_window_size_ > 0 && stalled_by_flow_control_) {
stalled_by_flow_control_ = false;
- io_state_ = STATE_SEND_BODY;
+ if (delegate_->IsRequestBodyChunked())
+ io_state_ = STATE_SEND_CHUNKED_BODY;
+ else
+ io_state_ = STATE_SEND_BODY;
DoLoop(OK);
}
}
@@ -170,8 +173,11 @@
// We should ignore WINDOW_UPDATEs received before or after this state,
// since before means we've not written SYN_STREAM yet (i.e. it's too
// early) and after means we've written a DATA frame with FIN bit.
- if (io_state_ != STATE_SEND_BODY_COMPLETE)
+ if (io_state_ != STATE_SEND_BODY_COMPLETE &&
+ io_state_ != STATE_SEND_CHUNKED_BODY &&
+ io_state_ != STATE_SEND_CHUNKED_BODY_COMPLETE) {
return;
Ryan Hamilton 2012/07/02 22:34:32 This still feels totally wrong to me. I do not th
ramant (doing other things) 2012/07/04 21:04:33 Done.
+ }
// it's valid for send_window_size_ to become negative (via an incoming
// SETTINGS), in which case incoming WINDOW_UPDATEs will eventually make
@@ -435,9 +441,10 @@
}
void SpdyStream::OnChunkAvailable() {
- DCHECK(io_state_ == STATE_SEND_HEADERS || io_state_ == STATE_SEND_BODY ||
- io_state_ == STATE_SEND_BODY_COMPLETE);
- if (io_state_ == STATE_SEND_BODY)
+ DCHECK(io_state_ == STATE_SEND_HEADERS ||
+ io_state_ == STATE_SEND_CHUNKED_BODY ||
+ io_state_ == STATE_SEND_CHUNKED_BODY_COMPLETE);
+ if (io_state_ == STATE_SEND_CHUNKED_BODY)
OnWriteComplete(0);
}
@@ -562,6 +569,12 @@
CHECK_EQ(OK, result);
result = DoSendBody();
break;
+ case STATE_SEND_CHUNKED_BODY:
+ result = DoSendChunkedBody();
+ break;
+ case STATE_SEND_CHUNKED_BODY_COMPLETE:
+ result = DoSendChunkedBodyComplete(result);
+ break;
case STATE_SEND_BODY_COMPLETE:
result = DoSendBodyComplete(result);
break;
@@ -695,7 +708,10 @@
return OK;
}
- io_state_ = STATE_SEND_BODY;
+ if (delegate_->IsRequestBodyChunked())
+ io_state_ = STATE_SEND_CHUNKED_BODY;
+ else
+ io_state_ = STATE_SEND_BODY;
return OK;
}
@@ -730,6 +746,30 @@
return result;
}
+int SpdyStream::DoSendChunkedBody() {
+ io_state_ = STATE_SEND_CHUNKED_BODY_COMPLETE;
+ if (!delegate_)
+ return ERR_UNEXPECTED;
+ return delegate_->OnSendChunkedBody();
+}
+
+int SpdyStream::DoSendChunkedBodyComplete(int result) {
+ if (result < 0)
+ return result;
+
+ if (!delegate_)
+ return ERR_UNEXPECTED;
+
+ bool eof = false;
+ result = delegate_->OnSendChunkedBodyComplete(result, &eof);
+ if (!eof)
+ io_state_ = STATE_SEND_CHUNKED_BODY;
+ else
+ io_state_ = STATE_WAITING_FOR_RESPONSE;
+
+ return result;
+}
+
int SpdyStream::DoOpen(int result) {
if (delegate_)
delegate_->OnDataSent(result);

Powered by Google App Engine
This is Rietveld 408576698