| Index: content/browser/indexed_db/indexed_db_backing_store.h
|
| diff --git a/content/browser/indexed_db/indexed_db_backing_store.h b/content/browser/indexed_db/indexed_db_backing_store.h
|
| index 19f476e81183642947fff1eb0eed254af7634763..8b83875e75044140854e4d5461ded8a72ca3c77f 100644
|
| --- a/content/browser/indexed_db/indexed_db_backing_store.h
|
| +++ b/content/browser/indexed_db/indexed_db_backing_store.h
|
| @@ -18,6 +18,7 @@
|
| #include "content/browser/indexed_db/indexed_db.h"
|
| #include "content/browser/indexed_db/indexed_db_active_blob_registry.h"
|
| #include "content/browser/indexed_db/indexed_db_blob_info.h"
|
| +#include "content/browser/indexed_db/indexed_db_leveldb_coding.h"
|
| #include "content/browser/indexed_db/indexed_db_metadata.h"
|
| #include "content/browser/indexed_db/leveldb/leveldb_iterator.h"
|
| #include "content/browser/indexed_db/leveldb/leveldb_transaction.h"
|
| @@ -33,6 +34,14 @@ namespace base {
|
| class TaskRunner;
|
| }
|
|
|
| +namespace fileapi {
|
| +class FileWriterDelegate;
|
| +}
|
| +
|
| +namespace net {
|
| +class URLRequestContext;
|
| +}
|
| +
|
| namespace content {
|
|
|
| class IndexedDBFactory;
|
| @@ -76,6 +85,7 @@ class CONTENT_EXPORT IndexedDBBackingStore
|
| IndexedDBFactory* indexed_db_factory,
|
| const GURL& origin_url,
|
| const base::FilePath& path_base,
|
| + net::URLRequestContext* request_context,
|
| blink::WebIDBDataLoss* data_loss,
|
| std::string* data_loss_message,
|
| bool* disk_full,
|
| @@ -85,6 +95,7 @@ class CONTENT_EXPORT IndexedDBBackingStore
|
| IndexedDBFactory* indexed_db_factory,
|
| const GURL& origin_url,
|
| const base::FilePath& path_base,
|
| + net::URLRequestContext* request_context,
|
| blink::WebIDBDataLoss* data_loss,
|
| std::string* data_loss_message,
|
| bool* disk_full,
|
| @@ -160,6 +171,12 @@ class CONTENT_EXPORT IndexedDBBackingStore
|
| DISALLOW_COPY_AND_ASSIGN(RecordIdentifier);
|
| };
|
|
|
| + class BlobWriteCallback : public RefCounted<BlobWriteCallback> {
|
| + public:
|
| + virtual ~BlobWriteCallback() {}
|
| + virtual void Run(bool succeeded) = 0;
|
| + };
|
| +
|
| virtual leveldb::Status GetRecord(
|
| IndexedDBBackingStore::Transaction* transaction,
|
| int64 database_id,
|
| @@ -242,6 +259,8 @@ class CONTENT_EXPORT IndexedDBBackingStore
|
| // Public for IndexedDBActiveBlobRegistry::ReleaseBlobRef.
|
| virtual void ReportBlobUnused(int64 database_id, int64 blob_key);
|
|
|
| + base::FilePath GetBlobFileName(int64 database_id, int64 key);
|
| +
|
| class Cursor {
|
| public:
|
| virtual ~Cursor();
|
| @@ -354,6 +373,53 @@ class CONTENT_EXPORT IndexedDBBackingStore
|
|
|
| LevelDBTransaction* transaction() { return transaction_; }
|
|
|
| + // This holds a BlobEntryKey and the encoded IndexedDBBlobInfo vector stored
|
| + // under that key.
|
| + typedef std::vector<std::pair<BlobEntryKey, std::string> >
|
| + BlobEntryKeyValuePairVec;
|
| +
|
| + class WriteDescriptor {
|
| + public:
|
| + WriteDescriptor(const GURL& url, int64_t key);
|
| + WriteDescriptor(const base::FilePath& path, int64_t key);
|
| +
|
| + bool is_file() const { return is_file_; }
|
| + const GURL& url() const {
|
| + DCHECK(!is_file_);
|
| + return url_;
|
| + }
|
| + const base::FilePath& file_path() const {
|
| + DCHECK(is_file_);
|
| + return file_path_;
|
| + }
|
| + int64_t key() const { return key_; }
|
| +
|
| + private:
|
| + bool is_file_;
|
| + GURL url_;
|
| + base::FilePath file_path_;
|
| + int64_t key_;
|
| + };
|
| +
|
| + class ChainedBlobWriter : public base::RefCounted<ChainedBlobWriter> {
|
| + public:
|
| + virtual void set_delegate(
|
| + scoped_ptr<fileapi::FileWriterDelegate> delegate) = 0;
|
| +
|
| + // TODO(ericu): Add a reason in the event of failure.
|
| + virtual void ReportWriteCompletion(bool succeeded,
|
| + int64 bytes_written) = 0;
|
| +
|
| + virtual void Abort() = 0;
|
| +
|
| + protected:
|
| + virtual ~ChainedBlobWriter() {}
|
| + friend class base::RefCounted<ChainedBlobWriter>;
|
| + };
|
| + class ChainedBlobWriterImpl;
|
| +
|
| + typedef std::vector<WriteDescriptor> WriteDescriptorVec;
|
| +
|
| private:
|
| class BlobChangeRecord {
|
| public:
|
| @@ -371,29 +437,44 @@ class CONTENT_EXPORT IndexedDBBackingStore
|
| std::vector<IndexedDBBlobInfo> blob_info_;
|
| ScopedVector<webkit_blob::BlobDataHandle> handles_;
|
| };
|
| + class BlobWriteCallbackWrapper;
|
| typedef std::map<std::string, BlobChangeRecord*> BlobChangeMap;
|
|
|
| + // The callback will be called eventually on success or failure.
|
| + void WriteNewBlobs(BlobEntryKeyValuePairVec& new_blob_entries,
|
| + WriteDescriptorVec& new_files_to_write,
|
| + scoped_refptr<BlobWriteCallback> callback);
|
| +
|
| IndexedDBBackingStore* backing_store_;
|
| scoped_refptr<LevelDBTransaction> transaction_;
|
| BlobChangeMap blob_change_map_;
|
| int64 database_id_;
|
| + scoped_refptr<ChainedBlobWriter> chained_blob_writer_;
|
| };
|
|
|
| protected:
|
| IndexedDBBackingStore(IndexedDBFactory* indexed_db_factory,
|
| const GURL& origin_url,
|
| const base::FilePath& blob_path,
|
| + net::URLRequestContext* request_context,
|
| scoped_ptr<LevelDBDatabase> db,
|
| scoped_ptr<LevelDBComparator> comparator,
|
| base::TaskRunner* task_runner);
|
| virtual ~IndexedDBBackingStore();
|
| friend class base::RefCounted<IndexedDBBackingStore>;
|
|
|
| + virtual bool WriteBlobFile(
|
| + int64 database_id,
|
| + const Transaction::WriteDescriptor& descriptor,
|
| + Transaction::ChainedBlobWriter* chained_blob_writer);
|
| + virtual bool RemoveBlobFile(int64 database_id, int64 key);
|
| +
|
| private:
|
| static scoped_refptr<IndexedDBBackingStore> Create(
|
| IndexedDBFactory* indexed_db_factory,
|
| const GURL& origin_url,
|
| const base::FilePath& blob_path,
|
| + net::URLRequestContext* request_context,
|
| scoped_ptr<LevelDBDatabase> db,
|
| scoped_ptr<LevelDBComparator> comparator,
|
| base::TaskRunner* task_runner);
|
| @@ -414,6 +495,7 @@ class CONTENT_EXPORT IndexedDBBackingStore
|
| int64 object_store_id,
|
| IndexedDBObjectStoreMetadata::IndexMap* map)
|
| WARN_UNUSED_RESULT;
|
| + bool RemoveBlobDirectory(int64 database_id);
|
|
|
| IndexedDBFactory* indexed_db_factory_;
|
| const GURL origin_url_;
|
| @@ -426,6 +508,8 @@ class CONTENT_EXPORT IndexedDBBackingStore
|
| // this is redundant but necessary for backwards compatibility; the suffix
|
| // provides for future flexibility.
|
| const std::string origin_identifier_;
|
| +
|
| + net::URLRequestContext* request_context_;
|
| base::TaskRunner* task_runner_;
|
| std::set<int> child_process_ids_granted_;
|
|
|
|
|