OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2015 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 #ifndef STORAGE_BROWSER_BLOB_BLOB_DATA_ITEM_H_ | |
6 #define STORAGE_BROWSER_BLOB_BLOB_DATA_ITEM_H_ | |
7 | |
8 #include "base/basictypes.h" | |
9 #include "base/memory/ref_counted.h" | |
10 #include "storage/browser/blob/shareable_file_reference.h" | |
11 #include "storage/browser/storage_browser_export.h" | |
12 #include "storage/common/data_element.h" | |
13 | |
14 namespace storage { | |
15 class BlobDataBuilder; | |
16 class BlobStorageContext; | |
17 | |
18 // Ref counted blob item. This class owns the backing data of the blob item. | |
19 // The backing data is immutable, and cannot change after creation. | |
20 // The purpose of this class is to allow the resource to stick around in the | |
21 // snapshot even after the resource was swapped in the blob (either to disk or | |
22 // to memory) by the BlobStorageContext. | |
23 class STORAGE_EXPORT BlobDataItem | |
24 : public base::RefCountedThreadSafe<BlobDataItem> { | |
michaeln
2015/01/22 02:18:09
Hmmm, does this class need to be threadsafe? The S
dmurph
2015/01/23 00:10:18
changed, and clarified in BlobDataHandle
| |
25 public: | |
26 storage::DataElement::Type type() const { return item_->type(); } | |
27 const char* bytes() const { return item_->bytes(); } | |
28 const base::FilePath& path() const { return item_->path(); } | |
29 const GURL& filesystem_url() const { return item_->filesystem_url(); } | |
30 const std::string& blob_uuid() const { return item_->blob_uuid(); } | |
31 uint64 offset() const { return item_->offset(); } | |
32 uint64 length() const { return item_->length(); } | |
33 const base::Time& expected_modification_time() const { | |
34 return item_->expected_modification_time(); | |
35 } | |
36 const DataElement& data_element() const { return *item_; } | |
37 const DataElement* data_element_ptr() const { return item_.get(); } | |
38 | |
39 private: | |
40 friend class BlobDataBuilder; | |
41 friend class BlobStorageContext; | |
42 friend class base::RefCountedThreadSafe<BlobDataItem>; | |
43 BlobDataItem(scoped_ptr<DataElement> item); | |
44 BlobDataItem(scoped_ptr<DataElement> item, | |
45 scoped_refptr<ShareableFileReference> file_handle); | |
46 virtual ~BlobDataItem(); | |
47 | |
48 scoped_ptr<storage::DataElement> item_; | |
49 scoped_refptr<ShareableFileReference> file_handle_; | |
50 }; | |
51 | |
52 #if defined(UNIT_TEST) | |
53 inline bool operator==(const BlobDataItem& a, const BlobDataItem& b) { | |
54 return a.data_element() == b.data_element(); | |
55 } | |
56 | |
57 inline bool operator!=(const BlobDataItem& a, const BlobDataItem& b) { | |
58 return !(a == b); | |
59 } | |
60 #endif // defined(UNIT_TEST) | |
61 | |
62 } // namespace storage | |
63 | |
64 #endif // STORAGE_BROWSER_BLOB_BLOB_DATA_ITEM_H_ | |
OLD | NEW |