1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file.
4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CLASS_FACTORY_H_
6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CLASS_FACTORY_H_
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/lazy_instance.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/scoped_ptr.h"
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/common/content_export.h"
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace leveldb {
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass Iterator;
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace leveldb
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace content {
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass LevelDBIteratorImpl;
19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class LevelDBDatabase;
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class LevelDBTransaction;
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use this factory to create some IndexedDB objects. Exists solely to
23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// facilitate tests which sometimes need to inject mock objects into the system.
24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class CONTENT_EXPORT IndexedDBClassFactory {
25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public:
26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  typedef IndexedDBClassFactory* GetterCallback();
27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  static IndexedDBClassFactory* Get();
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  static void SetIndexedDBClassFactoryGetter(GetterCallback* cb);
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual LevelDBIteratorImpl* CreateIteratorImpl(
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      scoped_ptr<leveldb::Iterator> iterator);
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual LevelDBTransaction* CreateLevelDBTransaction(LevelDBDatabase* db);
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) protected:
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  IndexedDBClassFactory() {}
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual ~IndexedDBClassFactory() {}
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  friend struct base::DefaultLazyInstanceTraits<IndexedDBClassFactory>;
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)};
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}  // namespace content
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif  // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CLASS_FACTORY_H_
45