| Index: storage/common/blob/blob_data.cc
|
| diff --git a/storage/common/blob/blob_data.cc b/storage/common/blob/blob_data.cc
|
| index 23f73e3f0ffcb4c26fc38be3588528e245128886..abbb0bbf979d0d89c070e6ce1cd3a4647e71e788 100644
|
| --- a/storage/common/blob/blob_data.cc
|
| +++ b/storage/common/blob/blob_data.cc
|
| @@ -2,60 +2,121 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "storage/common/blob/blob_data.h"
|
| -
|
| #include "base/logging.h"
|
| #include "base/strings/sys_string_conversions.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "base/time/time.h"
|
| +#include "storage/common/blob/blob_data.h"
|
|
|
| namespace storage {
|
|
|
| -BlobData::BlobData() {}
|
| -BlobData::BlobData(const std::string& uuid)
|
| - : uuid_(uuid) {
|
| +BlobDataItem::BlobDataItem(scoped_ptr<DataElement> item,
|
| + scoped_refptr<ShareableFileReference> file_handle)
|
| + : item_(item.Pass()), file_handle_(file_handle) {
|
| +}
|
| +BlobDataItem::BlobDataItem(scoped_ptr<DataElement> item) : item_(item.Pass()) {
|
| +}
|
| +BlobDataItem::~BlobDataItem() {
|
| }
|
|
|
| -BlobData::~BlobData() {}
|
| +BlobDataBuilder::BlobDataBuilder(const std::string& uuid) : uuid_(uuid) {
|
| +}
|
| +BlobDataBuilder::~BlobDataBuilder() {
|
| +}
|
|
|
| -void BlobData::AppendData(const char* data, size_t length) {
|
| +void BlobDataBuilder::AppendData(const char* data, size_t length) {
|
| DCHECK(length > 0);
|
| - items_.push_back(Item());
|
| - items_.back().SetToBytes(data, length);
|
| + scoped_ptr<DataElement> element(new DataElement());
|
| + element->SetToBytes(data, length);
|
| + items_.push_back(new BlobDataItem(element.Pass()));
|
| }
|
|
|
| -void BlobData::AppendFile(const base::FilePath& file_path,
|
| - uint64 offset, uint64 length,
|
| - const base::Time& expected_modification_time) {
|
| +void BlobDataBuilder::AppendFile(const base::FilePath& file_path,
|
| + uint64 offset,
|
| + uint64 length,
|
| + const base::Time& expected_modification_time) {
|
| DCHECK(length > 0);
|
| - items_.push_back(Item());
|
| - items_.back().SetToFilePathRange(file_path, offset, length,
|
| - expected_modification_time);
|
| + scoped_ptr<DataElement> element(new DataElement());
|
| + element->SetToFilePathRange(file_path, offset, length,
|
| + expected_modification_time);
|
| + items_.push_back(new BlobDataItem(element.Pass()));
|
| +}
|
| +
|
| +void BlobDataBuilder::AppendFile(
|
| + const base::FilePath& file_path,
|
| + uint64 offset,
|
| + uint64 length,
|
| + const base::Time& expected_modification_time,
|
| + scoped_refptr<ShareableFileReference> shareable_file) {
|
| + DCHECK(length > 0);
|
| + scoped_ptr<DataElement> element(new DataElement());
|
| + element->SetToFilePathRange(file_path, offset, length,
|
| + expected_modification_time);
|
| + items_.push_back(new BlobDataItem(element.Pass(), shareable_file));
|
| }
|
|
|
| -void BlobData::AppendBlob(const std::string& uuid,
|
| - uint64 offset, uint64 length) {
|
| +void BlobDataBuilder::AppendBlob(const std::string& uuid,
|
| + uint64 offset,
|
| + uint64 length) {
|
| DCHECK_GT(length, 0ul);
|
| - items_.push_back(Item());
|
| - items_.back().SetToBlobRange(uuid, offset, length);
|
| + scoped_ptr<DataElement> element(new DataElement());
|
| + element->SetToBlobRange(uuid, offset, length);
|
| + items_.push_back(new BlobDataItem(element.Pass()));
|
| }
|
|
|
| -void BlobData::AppendFileSystemFile(
|
| - const GURL& url, uint64 offset,
|
| +void BlobDataBuilder::AppendFileSystemFile(
|
| + const GURL& url,
|
| + uint64 offset,
|
| uint64 length,
|
| const base::Time& expected_modification_time) {
|
| DCHECK(length > 0);
|
| - items_.push_back(Item());
|
| - items_.back().SetToFileSystemUrlRange(url, offset, length,
|
| - expected_modification_time);
|
| + scoped_ptr<DataElement> element(new DataElement());
|
| + element->SetToFileSystemUrlRange(url, offset, length,
|
| + expected_modification_time);
|
| + items_.push_back(new BlobDataItem(element.Pass()));
|
| +}
|
| +
|
| +size_t BlobDataBuilder::GetMemoryUsage() const {
|
| + int64 memory = 0;
|
| + for (const auto& data_item : items_) {
|
| + if (data_item->type() == DataElement::TYPE_BYTES)
|
| + memory += data_item->length();
|
| + }
|
| + return memory;
|
| +}
|
| +
|
| +scoped_ptr<BlobDataSnapshot> BlobDataBuilder::Build() {
|
| + return scoped_ptr<BlobDataSnapshot>(new BlobDataSnapshot(uuid_, content_type_,
|
| + content_disposition_,
|
| + items_)).Pass();
|
| +}
|
| +
|
| +BlobDataSnapshot::BlobDataSnapshot(
|
| + const std::string& uuid,
|
| + const std::string& content_type,
|
| + const std::string& content_disposition,
|
| + const std::vector<scoped_refptr<BlobDataItem>>& items)
|
| + : uuid_(uuid),
|
| + content_type_(content_type),
|
| + content_disposition_(content_disposition),
|
| + items_(items) {
|
| +}
|
| +
|
| +BlobDataSnapshot::BlobDataSnapshot(const BlobDataSnapshot& other)
|
| + : uuid_(other.uuid_),
|
| + content_type_(other.content_type_),
|
| + content_disposition_(other.content_disposition_),
|
| + items_(other.items_) {
|
| +}
|
| +
|
| +BlobDataSnapshot::~BlobDataSnapshot() {
|
| }
|
|
|
| -int64 BlobData::GetMemoryUsage() const {
|
| +size_t BlobDataSnapshot::GetMemoryUsage() const {
|
| int64 memory = 0;
|
| - for (std::vector<Item>::const_iterator iter = items_.begin();
|
| - iter != items_.end(); ++iter) {
|
| - if (iter->type() == Item::TYPE_BYTES)
|
| - memory += iter->length();
|
| + for (const auto& data_item : items_) {
|
| + if (data_item->type() == DataElement::TYPE_BYTES)
|
| + memory += data_item->length();
|
| }
|
| return memory;
|
| }
|
|
|