| Index: storage/browser/blob/blob_data_builder.cc
|
| diff --git a/storage/browser/blob/blob_data_builder.cc b/storage/browser/blob/blob_data_builder.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..120bc44bbe492f44289e13411c7832e041802841
|
| --- /dev/null
|
| +++ b/storage/browser/blob/blob_data_builder.cc
|
| @@ -0,0 +1,82 @@
|
| +// Copyright (c) 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include <storage/browser/blob/blob_data_builder.h>
|
| +#include "base/time/time.h"
|
| +
|
| +namespace storage {
|
| +
|
| +BlobDataBuilder::BlobDataBuilder(const std::string& uuid) : uuid_(uuid) {
|
| +}
|
| +BlobDataBuilder::~BlobDataBuilder() {
|
| +}
|
| +
|
| +void BlobDataBuilder::AppendData(const char* data, size_t length) {
|
| + DCHECK(length > 0);
|
| + scoped_ptr<DataElement> element(new DataElement());
|
| + element->SetToBytes(data, length);
|
| + 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) {
|
| + 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()));
|
| +}
|
| +
|
| +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 BlobDataBuilder::AppendBlob(const std::string& uuid,
|
| + uint64 offset,
|
| + uint64 length) {
|
| + DCHECK_GT(length, 0ul);
|
| + scoped_ptr<DataElement> element(new DataElement());
|
| + element->SetToBlobRange(uuid, offset, length);
|
| + items_.push_back(new BlobDataItem(element.Pass()));
|
| +}
|
| +
|
| +void BlobDataBuilder::AppendFileSystemFile(
|
| + const GURL& url,
|
| + uint64 offset,
|
| + uint64 length,
|
| + const base::Time& expected_modification_time) {
|
| + DCHECK(length > 0);
|
| + 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::BuildSnapshot() {
|
| + return scoped_ptr<BlobDataSnapshot>(new BlobDataSnapshot(uuid_, content_type_,
|
| + content_disposition_,
|
| + items_)).Pass();
|
| +}
|
| +
|
| +} // namespace storage
|
|
|