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 <map>
9
10#include "content/browser/indexed_db/indexed_db_class_factory.h"
11
12namespace content {
13
14class LevelDBTransaction;
15class LevelDBDatabase;
16
17enum FailClass {
18  FAIL_CLASS_NOTHING,
19  FAIL_CLASS_LEVELDB_ITERATOR,
20  FAIL_CLASS_LEVELDB_TRANSACTION,
21};
22
23enum FailMethod {
24  FAIL_METHOD_NOTHING,
25  FAIL_METHOD_COMMIT,
26  FAIL_METHOD_GET,
27  FAIL_METHOD_SEEK,
28};
29
30class MockBrowserTestIndexedDBClassFactory : public IndexedDBClassFactory {
31 public:
32  MockBrowserTestIndexedDBClassFactory();
33  virtual ~MockBrowserTestIndexedDBClassFactory();
34  virtual LevelDBTransaction* CreateLevelDBTransaction(
35      LevelDBDatabase* db) OVERRIDE;
36  virtual LevelDBIteratorImpl* CreateIteratorImpl(
37      scoped_ptr<leveldb::Iterator> iterator) OVERRIDE;
38
39  void FailOperation(FailClass failure_class,
40                     FailMethod failure_method,
41                     int fail_on_instance_num,
42                     int fail_on_call_num);
43  void Reset();
44
45 private:
46  FailClass failure_class_;
47  FailMethod failure_method_;
48  std::map<FailClass, int> instance_count_;
49  std::map<FailClass, int> fail_on_instance_num_;
50  std::map<FailClass, int> fail_on_call_num_;
51  bool only_trace_calls_;
52};
53
54}  // namespace content
55
56#endif  // CONTENT_BROWSER_INDEXED_DB_MOCK_BROWSERTEST_INDEXED_DB_CLASS_FACTORY_H_
57