Index: storage/browser/blob/blob_storage_context.h |
diff --git a/storage/browser/blob/blob_storage_context.h b/storage/browser/blob/blob_storage_context.h |
index 7ccc133626505c1e8b712167dfaf76f37e399d41..322a4c62c1bf1c234fe239a2f6dd80d49b1919f8 100644 |
--- a/storage/browser/blob/blob_storage_context.h |
+++ b/storage/browser/blob/blob_storage_context.h |
@@ -12,8 +12,9 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/weak_ptr.h" |
#include "storage/browser/blob/blob_data_handle.h" |
+#include "storage/browser/blob/blob_data_snapshot.h" |
#include "storage/browser/storage_browser_export.h" |
-#include "storage/common/blob/blob_data.h" |
+#include "storage/common/data_element.h" |
class GURL; |
@@ -29,6 +30,7 @@ class BlobStorageHost; |
namespace storage { |
class BlobDataHandle; |
+class BlobDataBuilder; |
// This class handles the logistics of blob Storage within the browser process, |
// and maintains a mapping from blob uuid to the data. The class is single |
@@ -45,7 +47,7 @@ class STORAGE_EXPORT BlobStorageContext |
// Useful for coining blobs from within the browser process. If the |
// blob cannot be added due to memory consumption, returns NULL. |
- scoped_ptr<BlobDataHandle> AddFinishedBlob(const BlobData* blob_data); |
+ scoped_ptr<BlobDataHandle> AddFinishedBlob(const BlobDataBuilder& blob_data); |
// Useful for coining blob urls from within the browser process. |
bool RegisterPublicBlobURL(const GURL& url, const std::string& uuid); |
@@ -57,46 +59,54 @@ class STORAGE_EXPORT BlobStorageContext |
friend class ViewBlobInternalsJob; |
enum EntryFlags { |
- BEING_BUILT = 1 << 0, |
EXCEEDED_MEMORY = 1 << 1, |
}; |
struct BlobMapEntry { |
int refcount; |
int flags; |
- scoped_refptr<BlobData> data; |
+ // data and data_builder are mutually exclusive. |
+ scoped_ptr<BlobDataSnapshot> data; |
+ scoped_ptr<BlobDataBuilder> data_builder; |
BlobMapEntry(); |
- BlobMapEntry(int refcount, int flags, BlobData* data); |
+ BlobMapEntry(int refcount, BlobDataBuilder* data); |
~BlobMapEntry(); |
+ |
+ bool IsBeingBuilt(); |
}; |
- typedef std::map<std::string, BlobMapEntry> |
- BlobMap; |
+ typedef std::map<std::string, BlobMapEntry*> BlobMap; |
typedef std::map<GURL, std::string> BlobURLMap; |
+ // Called by BlobDataHandle. |
+ scoped_ptr<BlobDataSnapshot> CreateSnapshot(const std::string& uuid); |
+ |
void StartBuildingBlob(const std::string& uuid); |
void AppendBlobDataItem(const std::string& uuid, |
- const BlobData::Item& data_item); |
+ const DataElement& data_item); |
void FinishBuildingBlob(const std::string& uuid, const std::string& type); |
void CancelBuildingBlob(const std::string& uuid); |
void IncrementBlobRefCount(const std::string& uuid); |
void DecrementBlobRefCount(const std::string& uuid); |
- bool ExpandStorageItems(BlobData* target_blob_data, |
- BlobData* src_blob_data, |
+ bool ExpandStorageItems(BlobDataBuilder* target_blob_data, |
+ const BlobDataSnapshot& src_blob_data, |
uint64 offset, |
uint64 length); |
- bool AppendBytesItem(BlobData* target_blob_data, |
- const char* data, int64 length); |
- void AppendFileItem(BlobData* target_blob_data, |
+ bool AppendBytesItem(BlobDataBuilder* target_blob_data, |
+ const char* data, |
+ int64 length); |
+ void AppendFileItem(BlobDataBuilder* target_blob_data, |
const base::FilePath& file_path, |
- uint64 offset, uint64 length, |
+ uint64 offset, |
+ uint64 length, |
const base::Time& expected_modification_time); |
- void AppendFileSystemFileItem( |
- BlobData* target_blob_data, |
- const GURL& url, uint64 offset, uint64 length, |
- const base::Time& expected_modification_time); |
+ void AppendFileSystemFileItem(BlobDataBuilder* target_blob_data, |
+ const GURL& url, |
+ uint64 offset, |
+ uint64 length, |
+ const base::Time& expected_modification_time); |
bool IsInUse(const std::string& uuid); |
bool IsBeingBuilt(const std::string& uuid); |