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

Unified Diff: net/test/embedded_test_server/http_request.cc

Issue 920483004: Added chunked upload support for embedded_test_server (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Self review Created 5 years, 10 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/test/embedded_test_server/http_request.cc
diff --git a/net/test/embedded_test_server/http_request.cc b/net/test/embedded_test_server/http_request.cc
index 3156e5134faa29cfe86586bc03d8ecbcef7ea137..931ebdcfb536cce5e854e7990c87a23b4c863185 100644
--- a/net/test/embedded_test_server/http_request.cc
+++ b/net/test/embedded_test_server/http_request.cc
@@ -134,7 +134,14 @@ HttpRequestParser::ParseResult HttpRequestParser::ParseHeaders() {
// Headers done. Is any content data attached to the request?
declared_content_length_ = 0;
- if (http_request_->headers.count("Content-Length") > 0) {
+ if (http_request_->headers.count("Transfer-Encoding") > 0) {
mmenke 2015/02/12 15:34:30 Suggest flipping the order - ignoring a Content-Le
xunjieli 2015/02/12 15:58:40 Done.
+ if (http_request_->headers["Transfer-Encoding"] == "chunked") {
+ http_request_->has_content = true;
+ chunked_decoder_.reset(new HttpChunkedDecoder());
+ state_ = STATE_CONTENT;
+ return WAITING;
+ }
+ } else if (http_request_->headers.count("Content-Length") > 0) {
http_request_->has_content = true;
const bool success = base::StringToSizeT(
http_request_->headers["Content-Length"],
@@ -155,6 +162,21 @@ HttpRequestParser::ParseResult HttpRequestParser::ParseHeaders() {
HttpRequestParser::ParseResult HttpRequestParser::ParseContent() {
const size_t available_bytes = buffer_.size() - buffer_position_;
+ if (chunked_decoder_.get()) {
mmenke 2015/02/12 15:34:30 nit: The ".get()" isn't needed
xunjieli 2015/02/12 15:58:40 Done.
+ std::string result;
+ result.append(buffer_.data() + buffer_position_, available_bytes);
+ int bytes_written = chunked_decoder_->FilterBuf(
+ &result[0], static_cast<int>(result.size()));
mmenke 2015/02/12 15:34:30 Why do we need result? Can't we just use: bytes_
xunjieli 2015/02/12 15:58:40 When I tried "chunked_decoder_->FilterBuf(buffer_.
mmenke 2015/02/12 16:17:44 That's because buffer_ is a string (I had assumed
+ if (bytes_written > 0 && chunked_decoder_->reached_eof()) {
+ buffer_position_ += bytes_written;
mmenke 2015/02/12 15:34:30 This should be outside of the if block. The fact
xunjieli 2015/02/12 15:58:40 It looks like FilterBuf can only parse chunked dat
mmenke 2015/02/12 16:17:44 You're misreading the code. FilterBuf is a stream
+ http_request_->content.append(result.data(), bytes_written);
+ state_ = STATE_ACCEPTED;
+ return ACCEPTED;
+ }
+ state_ = STATE_CONTENT;
+ return WAITING;
+ }
+
const size_t fetch_bytes = std::min(
available_bytes,
declared_content_length_ - http_request_->content.size());

Powered by Google App Engine
This is Rietveld 408576698