| Index: content/browser/indexed_db/indexed_db_leveldb_coding.h
|
| diff --git a/content/browser/indexed_db/indexed_db_leveldb_coding.h b/content/browser/indexed_db/indexed_db_leveldb_coding.h
|
| index 556b4605af2d5bd610bcd4a9c315ac7a33dc8084..f616fb9a6899bc5bf9edd354f6d8fa3a2fde1dfc 100644
|
| --- a/content/browser/indexed_db/indexed_db_leveldb_coding.h
|
| +++ b/content/browser/indexed_db/indexed_db_leveldb_coding.h
|
| @@ -92,13 +92,16 @@ class KeyPrefix {
|
| static std::string EncodeEmpty();
|
| int Compare(const KeyPrefix& other) const;
|
|
|
| + // These are serialized to disk; any new items must be appended, and none can
|
| + // be deleted.
|
| enum Type {
|
| GLOBAL_METADATA,
|
| DATABASE_METADATA,
|
| OBJECT_STORE_DATA,
|
| EXISTS_ENTRY,
|
| INDEX_DATA,
|
| - INVALID_TYPE
|
| + INVALID_TYPE,
|
| + BLOB_ENTRY
|
| };
|
|
|
| static const size_t kMaxDatabaseIdSizeBits = 3;
|
| @@ -172,6 +175,16 @@ class DataVersionKey {
|
| static std::string Encode();
|
| };
|
|
|
| +class BlobJournalKey {
|
| + public:
|
| + static std::string Encode();
|
| +};
|
| +
|
| +class LiveBlobJournalKey {
|
| + public:
|
| + static std::string Encode();
|
| +};
|
| +
|
| class DatabaseFreeListKey {
|
| public:
|
| DatabaseFreeListKey();
|
| @@ -212,9 +225,15 @@ class DatabaseMetaDataKey {
|
| USER_VERSION = 2,
|
| MAX_OBJECT_STORE_ID = 3,
|
| USER_INT_VERSION = 4,
|
| - MAX_SIMPLE_METADATA_TYPE = 5
|
| + BLOB_KEY_GENERATOR_CURRENT_NUMBER = 5,
|
| + MAX_SIMPLE_METADATA_TYPE = 6
|
| };
|
|
|
| + static const int64 kAllBlobsKey = 1;
|
| + static const int64 kBlobKeyGeneratorInitialNumber = 2;
|
| + static const int64 kInvalidBlobKey = -1; // All keys <= 0 are invalid.
|
| +
|
| + static bool IsValidBlobKey(int64 blobKey);
|
| CONTENT_EXPORT static std::string Encode(int64 database_id,
|
| MetaDataType type);
|
| };
|
| @@ -384,6 +403,37 @@ class ExistsEntryKey {
|
| DISALLOW_COPY_AND_ASSIGN(ExistsEntryKey);
|
| };
|
|
|
| +class BlobEntryKey {
|
| + public:
|
| + BlobEntryKey() : database_id_(0), object_store_id_(0) {}
|
| + static bool Decode(base::StringPiece* slice, BlobEntryKey* result);
|
| + static bool FromObjectStoreDataKey(base::StringPiece* slice,
|
| + BlobEntryKey* result);
|
| + static std::string ReencodeToObjectStoreDataKey(base::StringPiece* slice);
|
| + static std::string EncodeMinKeyForObjectStore(int64 database_id,
|
| + int64 object_store_id);
|
| + static std::string EncodeStopKeyForObjectStore(int64 database_id,
|
| + int64 object_store_id);
|
| + static std::string Encode(int64 database_id,
|
| + int64 object_store_id,
|
| + const IndexedDBKey& user_key);
|
| + std::string Encode() const;
|
| + int64 database_id() const { return database_id_; }
|
| + int64 object_store_id() const { return object_store_id_; }
|
| +
|
| + static const int64 kSpecialIndexNumber;
|
| +
|
| + private:
|
| + static std::string Encode(int64 database_id,
|
| + int64 object_store_id,
|
| + const std::string& encoded_user_key);
|
| + int64 database_id_;
|
| + int64 object_store_id_;
|
| + // This is the user's ObjectStoreDataKey, not the BlobEntryKey itself.
|
| + std::string encoded_user_key_;
|
| + DISALLOW_COPY_AND_ASSIGN(BlobEntryKey);
|
| +};
|
| +
|
| class IndexDataKey {
|
| public:
|
| IndexDataKey();
|
|
|