Chromium Code Reviews| Index: webkit/glue/multipart_response_delegate.cc |
| diff --git a/webkit/glue/multipart_response_delegate.cc b/webkit/glue/multipart_response_delegate.cc |
| index 53cdc3fa7b4a050a74c6dfc79c5c049d7eb4a57d..f45ec0fd4902a85de7ebe389f6fe7849f4259686 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), |
| + raw_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 raw_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); |
| + raw_data_length_ += raw_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). |
| @@ -141,7 +144,8 @@ void MultipartResponseDelegate::OnReceivedData(const char* data, |
| client_->didReceiveData(loader_, |
| data_.data(), |
| static_cast<int>(data_length), |
| - -1); |
| + raw_data_length_); |
| + raw_data_length_ = 0; |
| } |
| } |
| size_t boundary_end_pos = boundary_pos + boundary_.length(); |
| @@ -172,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, -1); |
| + client_->didReceiveData(loader_, |
| + data_.data(), |
| + send_length, |
| + raw_data_length_); |
| data_ = data_.substr(send_length); |
| + raw_data_length_ = 0; |
| } |
| } |
| @@ -183,7 +191,9 @@ void MultipartResponseDelegate::OnCompletedRequest() { |
| if (!processing_headers_ && !data_.empty() && !stop_sending_ && client_) { |
| client_->didReceiveData(loader_, |
| data_.data(), |
| - static_cast<int>(data_.length()), -1); |
| + static_cast<int>(data_.length()), |
| + raw_data_length_); |
| + raw_data_length_ = 0; |
|
darin (slow to review)
2011/04/08 15:47:18
it can sometimes be dangerous to assume that |this
vsevik
2011/04/08 16:23:48
Yes, I am sure. It is destroyed right after the On
|
| } |
| } |