| 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..f6a51062ac989054ec3179ad0243f68f59a8fadb 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 "storage/browser/blob/blob_data_handle.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"
|
| @@ -32,46 +34,44 @@ 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 {
|
| - size_t refcount;
|
| - BlobState state;
|
| - std::vector<BlobConstructedCallback> build_completion_callbacks;
|
| + size_t refcount = 1;
|
| + BlobStatus status = BlobStatus::PENDING;
|
| + std::vector<BlobStatusCallback> build_completion_callbacks;
|
|
|
| - // Only applicable if the state == BROKEN.
|
| - IPCBlobCreationCancelCode broken_reason =
|
| - IPCBlobCreationCancelCode::UNKNOWN;
|
| -
|
| - // data and data_builder are mutually exclusive.
|
| - std::unique_ptr<InternalBlobData> data;
|
| - std::unique_ptr<InternalBlobData::Builder> data_builder;
|
| + // Blob items. During construction these can be
|
| + InternalBlobData data;
|
| + bool waiting_until_user_population = false;
|
| + BlobStatusCallback ready_for_user_population_callback;
|
|
|
| + // Metadata
|
| std::string content_type;
|
| std::string content_disposition;
|
|
|
| - Entry() = delete;
|
| - Entry(int refcount, BlobState state);
|
| - ~Entry();
|
| + bool can_fit = true;
|
| + BlobMemoryController::PendingContructionEntry pending_copies_memory_entry;
|
| + // 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;
|
|
|
| - // 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);
|
| + std::vector<std::unique_ptr<BlobDataHandle>> dependent_blobs;
|
| + size_t dependent_blobs_building = 0;
|
| +
|
| + Entry();
|
| + ~Entry();
|
| };
|
|
|
| BlobStorageRegistry();
|
|
|