Index: storage/browser/blob/blob_storage_registry.h |
diff --git a/storage/browser/blob/blob_storage_registry.h b/storage/browser/blob/blob_storage_registry.h |
index 5211094b61a2bba35c6085525f865e4c2c27d96d..f3052a449457f5fd320dc4c662a7c1525a1ffd02 100644 |
--- a/storage/browser/blob/blob_storage_registry.h |
+++ b/storage/browser/blob/blob_storage_registry.h |
@@ -15,6 +15,8 @@ |
#include "base/callback_forward.h" |
#include "base/containers/scoped_ptr_hash_map.h" |
#include "base/macros.h" |
+#include "base/optional.h" |
+#include "storage/browser/blob/blob_memory_controller.h" |
#include "storage/browser/blob/internal_blob_data.h" |
#include "storage/browser/storage_browser_export.h" |
#include "storage/common/blob_storage/blob_storage_constants.h" |
@@ -22,6 +24,8 @@ |
class GURL; |
namespace storage { |
+class BlobDataHandle; |
+class ShareableBlobDataItem; |
// This class stores the blob data in the various states of construction, as |
// well as URL mappings to blob uuids. |
@@ -32,46 +36,47 @@ namespace storage { |
// uuid. The user must keep track of these. |
class STORAGE_EXPORT BlobStorageRegistry { |
public: |
- // True means the blob was constructed successfully, and false means that |
- // there was an error, which is reported in the second argument. |
- using BlobConstructedCallback = |
- base::Callback<void(bool, IPCBlobCreationCancelCode)>; |
- |
- enum class BlobState { |
- // The blob is pending transportation from the renderer. This is the default |
- // state on entry construction. |
- PENDING, |
- // The blob is complete and can be read from. |
- COMPLETE, |
- // The blob is broken and no longer holds data. This happens when there was |
- // a problem constructing the blob, or we've run out of memory. |
- BROKEN |
+ struct STORAGE_EXPORT ItemCopyEntry { |
+ ItemCopyEntry(scoped_refptr<ShareableBlobDataItem> source_item, |
+ size_t source_item_offset, |
+ scoped_refptr<ShareableBlobDataItem> dest_item); |
+ ~ItemCopyEntry(); |
+ ItemCopyEntry(const ItemCopyEntry&); |
+ |
+ scoped_refptr<ShareableBlobDataItem> source_item; |
+ size_t source_item_offset = 0; |
+ scoped_refptr<ShareableBlobDataItem> dest_item; |
}; |
struct STORAGE_EXPORT Entry { |
kinuko
2016/07/17 16:15:47
Hmm, this entry has become so complex now... :(
T
dmurph
2016/07/19 02:26:28
I moved stuff out of here and into InternalBlobDat
|
- size_t refcount; |
- BlobState state; |
- std::vector<BlobConstructedCallback> build_completion_callbacks; |
+ size_t refcount = 0; |
+ BlobStatus status = BlobStatus::PENDING_MEMORY_QUOTA; |
+ std::vector<BlobStatusCallback> build_completion_callbacks; |
+ |
+ // Blob items. During construction these can be TYPE_BYTES_DESCRIPTION, and |
+ // some files might be 'future' files (see BlobDataBuilder). This will never |
+ // contain blob item references. |
+ InternalBlobData data; |
+ bool waiting_until_user_population = false; |
kinuko
2016/07/17 16:15:47
Now we have PENDING_DATA_POPULATION status do we s
dmurph
2016/07/19 02:26:28
removed.
|
+ BlobStatusCallback ready_for_user_population_callback; |
+ |
+ // Metadata |
+ std::string content_type; |
+ std::string content_disposition; |
- // Only applicable if the state == BROKEN. |
- IPCBlobCreationCancelCode broken_reason = |
- IPCBlobCreationCancelCode::UNKNOWN; |
+ base::Optional<BlobMemoryController::PendingConstructionEntry> |
+ pending_copies_memory_entry; |
- // data and data_builder are mutually exclusive. |
- std::unique_ptr<InternalBlobData> data; |
- std::unique_ptr<InternalBlobData::Builder> data_builder; |
+ // These are copies from a referenced blob item to our blob items. Some of |
+ // these entries may have changed from bytes to files if they were paged. |
+ // We must handle this case. |
+ std::vector<ItemCopyEntry> copies; |
- std::string content_type; |
- std::string content_disposition; |
+ std::vector<std::unique_ptr<BlobDataHandle>> dependent_blobs; |
+ size_t dependent_blobs_building = 0; |
- Entry() = delete; |
- Entry(int refcount, BlobState state); |
+ Entry(); |
~Entry(); |
- |
- // Performs a test-and-set on the state of the given blob. If the state |
- // isn't as expected, we return false. Otherwise we set the new state and |
- // return true. |
- bool TestAndSetState(BlobState expected, BlobState set); |
}; |
BlobStorageRegistry(); |