| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "webkit/glue/multipart_response_delegate.h" | 5 #include "webkit/glue/multipart_response_delegate.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "net/base/net_util.h" | 9 #include "net/base/net_util.h" |
| 10 #include "net/http/http_util.h" | 10 #include "net/http/http_util.h" |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 // We can now throw out data up through the boundary | 142 // We can now throw out data up through the boundary |
| 143 int offset = PushOverLine(data_, boundary_end_pos); | 143 int offset = PushOverLine(data_, boundary_end_pos); |
| 144 data_ = data_.substr(boundary_end_pos + offset); | 144 data_ = data_.substr(boundary_end_pos + offset); |
| 145 | 145 |
| 146 // Ok, back to parsing headers | 146 // Ok, back to parsing headers |
| 147 if (!ParseHeaders()) { | 147 if (!ParseHeaders()) { |
| 148 processing_headers_ = true; | 148 processing_headers_ = true; |
| 149 break; | 149 break; |
| 150 } | 150 } |
| 151 } | 151 } |
| 152 | |
| 153 // At this point, we should send over any data we have, but keep enough data | |
| 154 // buffered to handle a boundary that may have been truncated. | |
| 155 if (!processing_headers_ && data_.length() > boundary_.length()) { | |
| 156 // If the last character is a new line character, go ahead and just send | |
| 157 // everything we have buffered. This matches an optimization in Gecko. | |
| 158 int send_length = data_.length() - boundary_.length(); | |
| 159 if (data_[data_.length() - 1] == '\n') | |
| 160 send_length = data_.length(); | |
| 161 client_->didReceiveData(loader_, data_.data(), send_length); | |
| 162 data_ = data_.substr(send_length); | |
| 163 } | |
| 164 } | 152 } |
| 165 | 153 |
| 166 void MultipartResponseDelegate::OnCompletedRequest() { | 154 void MultipartResponseDelegate::OnCompletedRequest() { |
| 167 // If we have any pending data and we're not in a header, go ahead and send | 155 // If we have any pending data and we're not in a header, go ahead and send |
| 168 // it to WebCore. | 156 // it to WebCore. |
| 169 if (!processing_headers_ && !data_.empty()) { | 157 if (!processing_headers_ && !data_.empty()) { |
| 170 client_->didReceiveData(loader_, | 158 client_->didReceiveData(loader_, |
| 171 data_.data(), | 159 data_.data(), |
| 172 static_cast<int>(data_.length())); | 160 static_cast<int>(data_.length())); |
| 173 } | 161 } |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 byte_range_upper_bound_characters); | 339 byte_range_upper_bound_characters); |
| 352 | 340 |
| 353 if (!StringToInt(byte_range_lower_bound, content_range_lower_bound)) | 341 if (!StringToInt(byte_range_lower_bound, content_range_lower_bound)) |
| 354 return false; | 342 return false; |
| 355 if (!StringToInt(byte_range_upper_bound, content_range_upper_bound)) | 343 if (!StringToInt(byte_range_upper_bound, content_range_upper_bound)) |
| 356 return false; | 344 return false; |
| 357 return true; | 345 return true; |
| 358 } | 346 } |
| 359 | 347 |
| 360 } // namespace webkit_glue | 348 } // namespace webkit_glue |
| OLD | NEW |