summaryrefslogtreecommitdiffstats
path: root/webkit/glue/multipart_response_delegate.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/glue/multipart_response_delegate.cc')
-rw-r--r--webkit/glue/multipart_response_delegate.cc19
1 files changed, 15 insertions, 4 deletions
diff --git a/webkit/glue/multipart_response_delegate.cc b/webkit/glue/multipart_response_delegate.cc
index d2c47d7..3a4f053 100644
--- a/webkit/glue/multipart_response_delegate.cc
+++ b/webkit/glue/multipart_response_delegate.cc
@@ -62,6 +62,7 @@ MultipartResponseDelegate::MultipartResponseDelegate(
: client_(client),
loader_(loader),
original_response_(response),
+ encoded_data_length_(0),
boundary_("--"),
first_received_data_(true),
processing_headers_(false),
@@ -76,7 +77,8 @@ MultipartResponseDelegate::MultipartResponseDelegate(
}
void MultipartResponseDelegate::OnReceivedData(const char* data,
- int data_len) {
+ int data_len,
+ int encoded_data_length) {
// stop_sending_ means that we've already received the final boundary token.
// The server should stop sending us data at this point, but if it does, we
// just throw it away.
@@ -84,6 +86,7 @@ void MultipartResponseDelegate::OnReceivedData(const char* data,
return;
data_.append(data, data_len);
+ encoded_data_length_ += encoded_data_length;
if (first_received_data_) {
// Some servers don't send a boundary token before the first chunk of
// data. We handle this case anyway (Gecko does too).
@@ -140,7 +143,9 @@ void MultipartResponseDelegate::OnReceivedData(const char* data,
// Send the last data chunk.
client_->didReceiveData(loader_,
data_.data(),
- static_cast<int>(data_length));
+ static_cast<int>(data_length),
+ encoded_data_length_);
+ encoded_data_length_ = 0;
}
}
size_t boundary_end_pos = boundary_pos + boundary_.length();
@@ -171,8 +176,12 @@ void MultipartResponseDelegate::OnReceivedData(const char* data,
if (data_[data_.length() - 1] == '\n')
send_length = data_.length();
if (client_)
- client_->didReceiveData(loader_, data_.data(), send_length);
+ client_->didReceiveData(loader_,
+ data_.data(),
+ send_length,
+ encoded_data_length_);
data_ = data_.substr(send_length);
+ encoded_data_length_ = 0;
}
}
@@ -182,7 +191,9 @@ void MultipartResponseDelegate::OnCompletedRequest() {
if (!processing_headers_ && !data_.empty() && !stop_sending_ && client_) {
client_->didReceiveData(loader_,
data_.data(),
- static_cast<int>(data_.length()));
+ static_cast<int>(data_.length()),
+ encoded_data_length_);
+ encoded_data_length_ = 0;
}
}