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.
5 #ifndef STORAGE_COMMON_BLOB_BLOB_DATA_H_
6 #define STORAGE_COMMON_BLOB_BLOB_DATA_H_
11 #include "base/basictypes.h"
12 #include "base/files/file_path.h"
13 #include "base/memory/ref_counted.h"
14 #include "base/time/time.h"
15 #include "storage/common/blob/shareable_file_reference.h"
16 #include "storage/common/data_element.h"
17 #include "storage/common/storage_common_export.h"
22 class STORAGE_COMMON_EXPORT BlobData
23 : public base::RefCounted
<BlobData
> {
25 typedef storage::DataElement Item
;
27 // TODO(michaeln): remove the empty ctor when we fully transition to uuids.
29 explicit BlobData(const std::string
& uuid
);
31 void AppendData(const std::string
& data
) {
32 AppendData(data
.c_str(), data
.size());
35 void AppendData(const char* data
, size_t length
);
37 void AppendFile(const base::FilePath
& file_path
, uint64 offset
, uint64 length
,
38 const base::Time
& expected_modification_time
);
39 void AppendBlob(const std::string
& uuid
, uint64 offset
, uint64 length
);
40 void AppendFileSystemFile(const GURL
& url
, uint64 offset
, uint64 length
,
41 const base::Time
& expected_modification_time
);
43 void AttachShareableFileReference(ShareableFileReference
* reference
) {
44 shareable_files_
.push_back(reference
);
47 const std::string
& uuid() const { return uuid_
; }
48 const std::vector
<Item
>& items() const { return items_
; }
49 const std::string
& content_type() const { return content_type_
; }
50 void set_content_type(const std::string
& content_type
) {
51 content_type_
= content_type
;
54 const std::string
& content_disposition() const {
55 return content_disposition_
;
57 void set_content_disposition(const std::string
& content_disposition
) {
58 content_disposition_
= content_disposition
;
61 int64
GetMemoryUsage() const;
64 friend class base::RefCounted
<BlobData
>;
68 std::string content_type_
;
69 std::string content_disposition_
;
70 std::vector
<Item
> items_
;
71 std::vector
<scoped_refptr
<ShareableFileReference
> > shareable_files_
;
73 DISALLOW_COPY_AND_ASSIGN(BlobData
);
76 #if defined(UNIT_TEST)
77 inline bool operator==(const BlobData
& a
, const BlobData
& b
) {
78 if (a
.content_type() != b
.content_type())
80 if (a
.content_disposition() != b
.content_disposition())
82 if (a
.items().size() != b
.items().size())
84 for (size_t i
= 0; i
< a
.items().size(); ++i
) {
85 if (a
.items()[i
] != b
.items()[i
])
91 inline bool operator!=(const BlobData
& a
, const BlobData
& b
) {
94 #endif // defined(UNIT_TEST)
96 } // namespace storage
98 #endif // STORAGE_COMMON_BLOB_BLOB_DATA_H_