Home | History | Annotate | Download | only in indexed_db
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_FAKE_BACKING_STORE_H_
      6 #define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_FAKE_BACKING_STORE_H_
      7 
      8 #include <vector>
      9 
     10 #include "content/browser/indexed_db/indexed_db_backing_store.h"
     11 
     12 namespace base {
     13 class SequencedTaskRunner;
     14 }
     15 
     16 namespace content {
     17 
     18 class IndexedDBFactory;
     19 
     20 class IndexedDBFakeBackingStore : public IndexedDBBackingStore {
     21  public:
     22   IndexedDBFakeBackingStore();
     23   IndexedDBFakeBackingStore(IndexedDBFactory* factory,
     24                             base::SequencedTaskRunner* task_runner);
     25   virtual std::vector<base::string16> GetDatabaseNames(leveldb::Status* s)
     26       OVERRIDE;
     27   virtual leveldb::Status GetIDBDatabaseMetaData(const base::string16& name,
     28                                                  IndexedDBDatabaseMetadata*,
     29                                                  bool* found) OVERRIDE;
     30   virtual leveldb::Status CreateIDBDatabaseMetaData(
     31       const base::string16& name,
     32       const base::string16& version,
     33       int64 int_version,
     34       int64* row_id) OVERRIDE;
     35   virtual bool UpdateIDBDatabaseIntVersion(Transaction*,
     36                                            int64 row_id,
     37                                            int64 version) OVERRIDE;
     38   virtual leveldb::Status DeleteDatabase(const base::string16& name) OVERRIDE;
     39 
     40   virtual leveldb::Status CreateObjectStore(Transaction*,
     41                                             int64 database_id,
     42                                             int64 object_store_id,
     43                                             const base::string16& name,
     44                                             const IndexedDBKeyPath&,
     45                                             bool auto_increment) OVERRIDE;
     46 
     47   virtual leveldb::Status DeleteObjectStore(Transaction* transaction,
     48                                             int64 database_id,
     49                                             int64 object_store_id) OVERRIDE;
     50 
     51   virtual leveldb::Status PutRecord(
     52       IndexedDBBackingStore::Transaction* transaction,
     53       int64 database_id,
     54       int64 object_store_id,
     55       const IndexedDBKey& key,
     56       IndexedDBValue* value,
     57       ScopedVector<storage::BlobDataHandle>* handles,
     58       RecordIdentifier* record) OVERRIDE;
     59 
     60   virtual leveldb::Status ClearObjectStore(Transaction*,
     61                                            int64 database_id,
     62                                            int64 object_store_id) OVERRIDE;
     63   virtual leveldb::Status DeleteRecord(Transaction*,
     64                                        int64 database_id,
     65                                        int64 object_store_id,
     66                                        const RecordIdentifier&) OVERRIDE;
     67   virtual leveldb::Status GetKeyGeneratorCurrentNumber(Transaction*,
     68                                                        int64 database_id,
     69                                                        int64 object_store_id,
     70                                                        int64* current_number)
     71       OVERRIDE;
     72   virtual leveldb::Status MaybeUpdateKeyGeneratorCurrentNumber(
     73       Transaction*,
     74       int64 database_id,
     75       int64 object_store_id,
     76       int64 new_number,
     77       bool check_current) OVERRIDE;
     78   virtual leveldb::Status KeyExistsInObjectStore(
     79       Transaction*,
     80       int64 database_id,
     81       int64 object_store_id,
     82       const IndexedDBKey&,
     83       RecordIdentifier* found_record_identifier,
     84       bool* found) OVERRIDE;
     85 
     86   virtual leveldb::Status CreateIndex(Transaction*,
     87                                       int64 database_id,
     88                                       int64 object_store_id,
     89                                       int64 index_id,
     90                                       const base::string16& name,
     91                                       const IndexedDBKeyPath&,
     92                                       bool is_unique,
     93                                       bool is_multi_entry) OVERRIDE;
     94   virtual leveldb::Status DeleteIndex(Transaction*,
     95                                       int64 database_id,
     96                                       int64 object_store_id,
     97                                       int64 index_id) OVERRIDE;
     98   virtual leveldb::Status PutIndexDataForRecord(Transaction*,
     99                                                 int64 database_id,
    100                                                 int64 object_store_id,
    101                                                 int64 index_id,
    102                                                 const IndexedDBKey&,
    103                                                 const RecordIdentifier&)
    104       OVERRIDE;
    105   virtual void ReportBlobUnused(int64 database_id, int64 blob_key) OVERRIDE;
    106   virtual scoped_ptr<Cursor> OpenObjectStoreKeyCursor(
    107       Transaction* transaction,
    108       int64 database_id,
    109       int64 object_store_id,
    110       const IndexedDBKeyRange& key_range,
    111       blink::WebIDBCursorDirection,
    112       leveldb::Status*) OVERRIDE;
    113   virtual scoped_ptr<Cursor> OpenObjectStoreCursor(
    114       Transaction* transaction,
    115       int64 database_id,
    116       int64 object_store_id,
    117       const IndexedDBKeyRange& key_range,
    118       blink::WebIDBCursorDirection,
    119       leveldb::Status*) OVERRIDE;
    120   virtual scoped_ptr<Cursor> OpenIndexKeyCursor(
    121       Transaction* transaction,
    122       int64 database_id,
    123       int64 object_store_id,
    124       int64 index_id,
    125       const IndexedDBKeyRange& key_range,
    126       blink::WebIDBCursorDirection,
    127       leveldb::Status*) OVERRIDE;
    128   virtual scoped_ptr<Cursor> OpenIndexCursor(Transaction* transaction,
    129                                              int64 database_id,
    130                                              int64 object_store_id,
    131                                              int64 index_id,
    132                                              const IndexedDBKeyRange& key_range,
    133                                              blink::WebIDBCursorDirection,
    134                                              leveldb::Status*) OVERRIDE;
    135 
    136   class FakeTransaction : public IndexedDBBackingStore::Transaction {
    137    public:
    138     explicit FakeTransaction(leveldb::Status phase_two_result);
    139     virtual void Begin() OVERRIDE;
    140     virtual leveldb::Status CommitPhaseOne(
    141         scoped_refptr<BlobWriteCallback>) OVERRIDE;
    142     virtual leveldb::Status CommitPhaseTwo() OVERRIDE;
    143     virtual void Rollback() OVERRIDE;
    144 
    145    private:
    146     leveldb::Status result_;
    147 
    148     DISALLOW_COPY_AND_ASSIGN(FakeTransaction);
    149   };
    150 
    151  protected:
    152   friend class base::RefCounted<IndexedDBFakeBackingStore>;
    153   virtual ~IndexedDBFakeBackingStore();
    154 
    155  private:
    156   DISALLOW_COPY_AND_ASSIGN(IndexedDBFakeBackingStore);
    157 };
    158 
    159 }  // namespace content
    160 
    161 #endif  // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_FAKE_BACKING_STORE_H_
    162