Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(969)

Unified Diff: storage/browser/blob/blob_storage_registry.h

Issue 2055053003: [BlobAsync] Disk support for blob storage (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Finished comments, added new pending enum state Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698