1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "storage/common/blob/blob_data.h"
6
7#include "base/logging.h"
8#include "base/strings/sys_string_conversions.h"
9#include "base/strings/utf_string_conversions.h"
10#include "base/time/time.h"
11
12namespace storage {
13
14BlobData::BlobData() {}
15BlobData::BlobData(const std::string& uuid)
16    : uuid_(uuid) {
17}
18
19BlobData::~BlobData() {}
20
21void BlobData::AppendData(const char* data, size_t length) {
22  DCHECK(length > 0);
23  items_.push_back(Item());
24  items_.back().SetToBytes(data, length);
25}
26
27void BlobData::AppendFile(const base::FilePath& file_path,
28                          uint64 offset, uint64 length,
29                          const base::Time& expected_modification_time) {
30  DCHECK(length > 0);
31  items_.push_back(Item());
32  items_.back().SetToFilePathRange(file_path, offset, length,
33                                   expected_modification_time);
34}
35
36void BlobData::AppendBlob(const std::string& uuid,
37                          uint64 offset, uint64 length) {
38  DCHECK_GT(length, 0ul);
39  items_.push_back(Item());
40  items_.back().SetToBlobRange(uuid, offset, length);
41}
42
43void BlobData::AppendFileSystemFile(
44    const GURL& url, uint64 offset,
45    uint64 length,
46    const base::Time& expected_modification_time) {
47  DCHECK(length > 0);
48  items_.push_back(Item());
49  items_.back().SetToFileSystemUrlRange(url, offset, length,
50                                        expected_modification_time);
51}
52
53int64 BlobData::GetMemoryUsage() const {
54  int64 memory = 0;
55  for (std::vector<Item>::const_iterator iter = items_.begin();
56       iter != items_.end(); ++iter) {
57    if (iter->type() == Item::TYPE_BYTES)
58      memory += iter->length();
59  }
60  return memory;
61}
62
63}  // namespace storage
64