diff options
Diffstat (limited to 'webkit/glue/multipart_response_delegate.cc')
-rw-r--r-- | webkit/glue/multipart_response_delegate.cc | 19 |
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; } } |