1 // Copyright 2014 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_MOCK_BROWSERTEST_INDEXED_DB_CLASS_FACTORY_H_
6 #define CONTENT_BROWSER_INDEXED_DB_MOCK_BROWSERTEST_INDEXED_DB_CLASS_FACTORY_H_
7 
8 #include <stdint.h>
9 
10 #include <map>
11 #include <memory>
12 #include <set>
13 
14 #include "components/services/storage/indexed_db/scopes/scopes_lock_manager.h"
15 #include "components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_factory.h"
16 #include "components/services/storage/public/mojom/indexed_db_control_test.mojom.h"
17 #include "content/browser/indexed_db/indexed_db_backing_store.h"
18 #include "content/browser/indexed_db/indexed_db_class_factory.h"
19 #include "content/browser/indexed_db/indexed_db_database.h"
20 #include "content/browser/indexed_db/indexed_db_task_helper.h"
21 #include "content/common/content_export.h"
22 #include "third_party/blink/public/common/indexeddb/web_idb_types.h"
23 
24 namespace content {
25 
26 class IndexedDBConnection;
27 class IndexedDBMetadataCoding;
28 class LevelDBDirectTransaction;
29 class LevelDBScope;
30 class LevelDBScopes;
31 class LevelDBSnapshot;
32 class TransactionalLevelDBTransaction;
33 class TransactionalLevelDBDatabase;
34 
35 class CONTENT_EXPORT MockBrowserTestIndexedDBClassFactory
36     : public IndexedDBClassFactory,
37       public DefaultTransactionalLevelDBFactory,
38       public storage::mojom::MockFailureInjector {
39  public:
40   MockBrowserTestIndexedDBClassFactory();
41   ~MockBrowserTestIndexedDBClassFactory() override;
42 
43   TransactionalLevelDBFactory& transactional_leveldb_factory() override;
44 
45   std::pair<std::unique_ptr<IndexedDBDatabase>, leveldb::Status>
46   CreateIndexedDBDatabase(
47       const base::string16& name,
48       IndexedDBBackingStore* backing_store,
49       IndexedDBFactory* factory,
50       TasksAvailableCallback tasks_available_callback,
51       std::unique_ptr<IndexedDBMetadataCoding> metadata_coding,
52       const IndexedDBDatabase::Identifier& unique_identifier,
53       ScopesLockManager* transaction_lock_manager) override;
54   std::unique_ptr<IndexedDBTransaction> CreateIndexedDBTransaction(
55       int64_t id,
56       IndexedDBConnection* connection,
57       const std::set<int64_t>& scope,
58       blink::mojom::IDBTransactionMode mode,
59       TasksAvailableCallback tasks_available_callback,
60       IndexedDBTransaction::TearDownCallback tear_down_callback,
61       IndexedDBBackingStore::Transaction* backing_store_transaction) override;
62 
63   std::unique_ptr<TransactionalLevelDBDatabase> CreateLevelDBDatabase(
64       scoped_refptr<LevelDBState> state,
65       std::unique_ptr<LevelDBScopes> scopes,
66       scoped_refptr<base::SequencedTaskRunner> task_runner,
67       size_t max_open_iterators) override;
68   std::unique_ptr<LevelDBDirectTransaction> CreateLevelDBDirectTransaction(
69       TransactionalLevelDBDatabase* db) override;
70   scoped_refptr<TransactionalLevelDBTransaction> CreateLevelDBTransaction(
71       TransactionalLevelDBDatabase* db,
72       std::unique_ptr<LevelDBScope> scope) override;
73   std::unique_ptr<TransactionalLevelDBIterator> CreateIterator(
74       std::unique_ptr<leveldb::Iterator> it,
75       base::WeakPtr<TransactionalLevelDBDatabase> db,
76       base::WeakPtr<TransactionalLevelDBTransaction> txn,
77       std::unique_ptr<LevelDBSnapshot> snapshot) override;
78 
79   void FailOperation(storage::mojom::FailClass failure_class,
80                      storage::mojom::FailMethod failure_method,
81                      int fail_on_instance_num,
82                      int fail_on_call_num,
83                      base::OnceClosure callback) override;
84   void Reset();
85 
86  private:
87   storage::mojom::FailClass failure_class_;
88   storage::mojom::FailMethod failure_method_;
89   std::map<storage::mojom::FailClass, int> instance_count_;
90   std::map<storage::mojom::FailClass, int> fail_on_instance_num_;
91   std::map<storage::mojom::FailClass, int> fail_on_call_num_;
92   bool only_trace_calls_;
93 };
94 
95 }  // namespace content
96 
97 #endif  // CONTENT_BROWSER_INDEXED_DB_MOCK_BROWSERTEST_INDEXED_DB_CLASS_FACTORY_H_
98