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
12namespace base {
13class SequencedTaskRunner;
14}
15
16namespace content {
17
18class IndexedDBFactory;
19
20class 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