| Index: content/browser/service_worker/service_worker_url_request_job.cc
|
| diff --git a/content/browser/service_worker/service_worker_url_request_job.cc b/content/browser/service_worker/service_worker_url_request_job.cc
|
| index aa1cf1ffff75baa73649d11c78f81ef36dfad55e..92d43af2c56ee9c323f80a160505035c5ec59610 100644
|
| --- a/content/browser/service_worker/service_worker_url_request_job.cc
|
| +++ b/content/browser/service_worker/service_worker_url_request_job.cc
|
| @@ -268,8 +268,7 @@ bool ServiceWorkerURLRequestJob::CreateRequestBodyBlob(std::string* blob_uuid,
|
| uint64* blob_size) {
|
| if (!body_.get() || !blob_storage_context_)
|
| return false;
|
| - const std::string uuid(base::GenerateGUID());
|
| - uint64 size = 0;
|
| +
|
| std::vector<const ResourceRequestBody::Element*> resolved_elements;
|
| for (size_t i = 0; i < body_->elements()->size(); ++i) {
|
| const ResourceRequestBody::Element& element = (*body_->elements())[i];
|
| @@ -287,10 +286,16 @@ bool ServiceWorkerURLRequestJob::CreateRequestBodyBlob(std::string* blob_uuid,
|
| resolved_elements.push_back(&item);
|
| }
|
| }
|
| +
|
| + const std::string uuid(base::GenerateGUID());
|
| + uint64 total_size = 0;
|
| scoped_refptr<storage::BlobData> blob_data = new storage::BlobData(uuid);
|
| for (size_t i = 0; i < resolved_elements.size(); ++i) {
|
| const ResourceRequestBody::Element& element = *resolved_elements[i];
|
| - size += element.length();
|
| + if (total_size != kuint64max && element.length() != kuint64max)
|
| + total_size += element.length();
|
| + else
|
| + total_size = kuint64max;
|
| switch (element.type()) {
|
| case ResourceRequestBody::Element::TYPE_BYTES:
|
| blob_data->AppendData(element.bytes(), element.length());
|
| @@ -319,7 +324,7 @@ bool ServiceWorkerURLRequestJob::CreateRequestBodyBlob(std::string* blob_uuid,
|
| request_body_blob_data_handle_ =
|
| blob_storage_context_->AddFinishedBlob(blob_data.get());
|
| *blob_uuid = uuid;
|
| - *blob_size = size;
|
| + *blob_size = total_size;
|
| return true;
|
| }
|
|
|
|
|