| Index: content/browser/loader/upload_data_stream_builder.cc
|
| diff --git a/content/browser/loader/upload_data_stream_builder.cc b/content/browser/loader/upload_data_stream_builder.cc
|
| index 1a7dfc33e09fe135665686a8ba79b8011778aaef..c22a8a8d444fe945534984175a3ff88af99e32f4 100644
|
| --- a/content/browser/loader/upload_data_stream_builder.cc
|
| +++ b/content/browser/loader/upload_data_stream_builder.cc
|
| @@ -8,12 +8,14 @@
|
| #include "net/base/upload_bytes_element_reader.h"
|
| #include "net/base/upload_data_stream.h"
|
| #include "net/base/upload_file_element_reader.h"
|
| -#include "webkit/browser/blob/blob_storage_controller.h"
|
| +#include "webkit/browser/blob/blob_data_handle.h"
|
| +#include "webkit/browser/blob/blob_storage_context.h"
|
| #include "webkit/browser/fileapi/upload_file_system_file_element_reader.h"
|
| #include "webkit/common/resource_request_body.h"
|
|
|
| using webkit_blob::BlobData;
|
| -using webkit_blob::BlobStorageController;
|
| +using webkit_blob::BlobDataHandle;
|
| +using webkit_blob::BlobStorageContext;
|
| using webkit_glue::ResourceRequestBody;
|
|
|
| namespace content {
|
| @@ -64,49 +66,51 @@ class FileElementReader : public net::UploadFileElementReader {
|
|
|
| void ResolveBlobReference(
|
| ResourceRequestBody* body,
|
| - webkit_blob::BlobStorageController* blob_controller,
|
| - const GURL& blob_url,
|
| + webkit_blob::BlobStorageContext* blob_context,
|
| + const ResourceRequestBody::Element& element,
|
| std::vector<const ResourceRequestBody::Element*>* resolved_elements) {
|
| - DCHECK(blob_controller);
|
| - BlobData* blob_data = blob_controller->GetBlobDataFromUrl(blob_url);
|
| - DCHECK(blob_data);
|
| - if (!blob_data)
|
| + DCHECK(blob_context);
|
| + std::string uuid = element.blob_uuid();
|
| + if (uuid.empty())
|
| + uuid = blob_context->LookupUuidFromDeprecatedURL(element.blob_url());
|
| + scoped_ptr<webkit_blob::BlobDataHandle> handle =
|
| + blob_context->GetBlobDataFromUUID(uuid);
|
| + DCHECK(handle);
|
| + if (!handle)
|
| return;
|
|
|
| // If there is no element in the referred blob data, just return.
|
| - if (blob_data->items().empty())
|
| + if (handle->data()->items().empty())
|
| return;
|
|
|
| - // Ensure the blob and any attached shareable files survive until
|
| - // upload completion.
|
| - body->SetUserData(blob_data, new base::UserDataAdapter<BlobData>(blob_data));
|
| -
|
| - // Append the elements in the referred blob data.
|
| - for (size_t i = 0; i < blob_data->items().size(); ++i) {
|
| - const BlobData::Item& item = blob_data->items().at(i);
|
| + // Append the elements in the referenced blob data.
|
| + for (size_t i = 0; i < handle->data()->items().size(); ++i) {
|
| + const BlobData::Item& item = handle->data()->items().at(i);
|
| DCHECK_NE(BlobData::Item::TYPE_BLOB, item.type());
|
| resolved_elements->push_back(&item);
|
| }
|
| +
|
| + // Ensure the blob and any attached shareable files survive until
|
| + // upload completion. The |body| takes ownership of |handle|.
|
| + const void* key = handle.get();
|
| + body->SetUserData(key, handle.release());
|
| }
|
|
|
| } // namespace
|
|
|
| scoped_ptr<net::UploadDataStream> UploadDataStreamBuilder::Build(
|
| ResourceRequestBody* body,
|
| - BlobStorageController* blob_controller,
|
| + BlobStorageContext* blob_context,
|
| fileapi::FileSystemContext* file_system_context,
|
| base::TaskRunner* file_task_runner) {
|
| // Resolve all blob elements.
|
| std::vector<const ResourceRequestBody::Element*> resolved_elements;
|
| for (size_t i = 0; i < body->elements()->size(); ++i) {
|
| const ResourceRequestBody::Element& element = (*body->elements())[i];
|
| - if (element.type() == ResourceRequestBody::Element::TYPE_BLOB) {
|
| - ResolveBlobReference(body, blob_controller, element.url(),
|
| - &resolved_elements);
|
| - } else {
|
| - // No need to resolve, just append the element.
|
| + if (element.type() == ResourceRequestBody::Element::TYPE_BLOB)
|
| + ResolveBlobReference(body, blob_context, element, &resolved_elements);
|
| + else
|
| resolved_elements.push_back(&element);
|
| - }
|
| }
|
|
|
| ScopedVector<net::UploadElementReader> element_readers;
|
| @@ -124,7 +128,7 @@ scoped_ptr<net::UploadDataStream> UploadDataStreamBuilder::Build(
|
| element_readers.push_back(
|
| new fileapi::UploadFileSystemFileElementReader(
|
| file_system_context,
|
| - element.url(),
|
| + element.filesystem_url(),
|
| element.offset(),
|
| element.length(),
|
| element.expected_modification_time()));
|
|
|