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

Unified Diff: net/http/http_stream_parser.cc

Issue 9293029: net: Introduce SeekableIOBuffer and clean up HttpStreamParser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase and update comments Created 8 years, 11 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
« net/http/http_stream_parser.h ('K') | « net/http/http_stream_parser.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/http_stream_parser.cc
diff --git a/net/http/http_stream_parser.cc b/net/http/http_stream_parser.cc
index b85a342dda979f2bb178024d63ebd18535217112..34f48d8840f5d34db2d8e8c4d91b2756bdddc8e3 100644
--- a/net/http/http_stream_parser.cc
+++ b/net/http/http_stream_parser.cc
@@ -128,10 +128,10 @@ int HttpStreamParser::SendRequest(const std::string& request_line,
request_body_.reset(request_body);
if (request_body_ != NULL && request_body_->is_chunked()) {
request_body_->set_chunk_callback(this);
- // The raw chunk buffer is guaranteed to be large enough to hold the
- // encoded chunk.
- raw_chunk_buf_ = new IOBufferWithSize(UploadDataStream::GetBufferSize() +
- kChunkHeaderFooterSize);
+ // The chunk buffer is guaranteed to be large enough to hold the encoded
+ // chunk.
+ chunk_buf_ = new SeekableIOBuffer(UploadDataStream::GetBufferSize() +
+ kChunkHeaderFooterSize);
}
io_state_ = STATE_SENDING_HEADERS;
@@ -349,7 +349,7 @@ int HttpStreamParser::DoSendChunkedBody(int result) {
// DoSendChunkedBody(), or 0 (i.e. OK) the first time.
// Send the remaining data in the chunk buffer.
- if (chunk_buf_.get()) {
+ if (result > 0) {
wtc 2012/02/02 20:22:57 Nit: it is safe to call chunk_buf_->DidConsume(
satorux1 2012/02/02 22:02:27 Good point. Done.
chunk_buf_->DidConsume(result);
if (chunk_buf_->BytesRemaining() > 0) {
return connection_->socket()->Write(chunk_buf_,
@@ -369,17 +369,19 @@ int HttpStreamParser::DoSendChunkedBody(int result) {
chunk_length_without_encoding_ = 0;
if (request_body_->eof()) {
+ chunk_buf_->Clear();
const int chunk_length = EncodeChunk(
- base::StringPiece(), raw_chunk_buf_->data(), raw_chunk_buf_->size());
- chunk_buf_ = new DrainableIOBuffer(raw_chunk_buf_, chunk_length);
+ base::StringPiece(), chunk_buf_->data(), chunk_buf_->capacity());
+ chunk_buf_->DidAppend(chunk_length);
sent_last_chunk_ = true;
} else if (request_body_->buf_len() > 0) {
// Encode and send the buffer as 1 chunk.
const base::StringPiece payload(request_body_->buf()->data(),
request_body_->buf_len());
+ chunk_buf_->Clear();
const int chunk_length = EncodeChunk(
- payload, raw_chunk_buf_->data(), raw_chunk_buf_->size());
- chunk_buf_ = new DrainableIOBuffer(raw_chunk_buf_, chunk_length);
+ payload, chunk_buf_->data(), chunk_buf_->capacity());
+ chunk_buf_->DidAppend(chunk_length);
chunk_length_without_encoding_ = payload.size();
} else {
// Nothing to send. More POST data is yet to come?
« net/http/http_stream_parser.h ('K') | « net/http/http_stream_parser.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698