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

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

Issue 1234813004: [BlobAsync] Asynchronous Blob Construction Final Patch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@blob-protocol-change
Patch Set: comments Created 4 years, 9 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 54e8b0e0d050577c2b21f8995e9de48c8761dc7e..8805671625374b3ca30baf9739d8f4e7eab88522 100644
--- a/storage/browser/blob/blob_storage_registry.h
+++ b/storage/browser/blob/blob_storage_registry.h
@@ -14,8 +14,10 @@
#include "base/callback_forward.h"
#include "base/containers/scoped_ptr_hash_map.h"
#include "base/macros.h"
+#include "base/memory/scoped_ptr.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"
class GURL;
@@ -31,28 +33,32 @@ namespace storage {
class STORAGE_EXPORT BlobStorageRegistry {
public:
enum class BlobState {
- // First the renderer reserves the uuid.
- RESERVED = 1,
- // Second, we are asynchronously transporting data to the browser.
- ASYNC_TRANSPORTATION,
- // Third, we construct the blob when we have all of the data.
- CONSTRUCTION,
- // Finally, the blob is built.
- ACTIVE
+ // 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 Entry {
size_t refcount;
BlobState state;
- std::vector<base::Callback<void(bool)>> construction_complete_callbacks;
+ std::vector<base::Callback<void(bool)>> build_completion_callbacks;
- // Flags
- bool exceeded_memory;
+ // Only applicable if the state == BROKEN.
+ IPCBlobCreationCancelCode broken_reason =
+ IPCBlobCreationCancelCode::UNKNOWN;
// data and data_builder are mutually exclusive.
scoped_ptr<InternalBlobData> data;
scoped_ptr<InternalBlobData::Builder> data_builder;
+ std::string content_type;
+ std::string content_disposition;
+
Entry() = delete;
Entry(int refcount, BlobState state);
~Entry();
@@ -66,17 +72,22 @@ class STORAGE_EXPORT BlobStorageRegistry {
BlobStorageRegistry();
~BlobStorageRegistry();
- // Creates the blob entry with a refcount of 1 and a state of RESERVED. If
+ // Creates the blob entry with a refcount of 1 and a state of PENDING. If
// the blob is already in use, we return null.
- Entry* CreateEntry(const std::string& uuid);
+ Entry* CreateEntry(const std::string& uuid,
+ const std::string& content_type,
+ const std::string& content_disposition);
// Removes the blob entry with the given uuid. This does not unmap any
// URLs that are pointing to this uuid. Returns if the entry existed.
bool DeleteEntry(const std::string& uuid);
+ bool HasEntry(const std::string& uuid) const;
+
// Gets the blob entry for the given uuid. Returns nullptr if the entry
// does not exist.
Entry* GetEntry(const std::string& uuid);
+ const Entry* GetEntry(const std::string& uuid) const;
// Creates a url mapping from blob uuid to the given url. Returns false if
// the uuid isn't mapped to an entry or if there already is a map for the URL.
@@ -97,6 +108,7 @@ class STORAGE_EXPORT BlobStorageRegistry {
size_t url_count() const { return url_to_uuid_.size(); }
private:
+ friend class ViewBlobInternalsJob;
using BlobMap = base::ScopedPtrHashMap<std::string, scoped_ptr<Entry>>;
using URLMap = std::map<GURL, std::string>;

Powered by Google App Engine
This is Rietveld 408576698