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