Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / content / browser / indexed_db / indexed_db_cursor.h
1 // Copyright (c) 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_CURSOR_H_
6 #define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CURSOR_H_
7
8 #include <string>
9
10 #include "base/basictypes.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "content/browser/indexed_db/indexed_db_backing_store.h"
14 #include "content/browser/indexed_db/indexed_db_database.h"
15 #include "content/common/indexed_db/indexed_db_key_range.h"
16 #include "third_party/WebKit/public/platform/WebIDBTypes.h"
17
18 namespace content {
19
20 class IndexedDBTransaction;
21
22 class CONTENT_EXPORT IndexedDBCursor
23     : NON_EXPORTED_BASE(public base::RefCounted<IndexedDBCursor>) {
24  public:
25   IndexedDBCursor(scoped_ptr<IndexedDBBackingStore::Cursor> cursor,
26                   indexed_db::CursorType cursor_type,
27                   blink::WebIDBTaskType task_type,
28                   IndexedDBTransaction* transaction);
29
30   void Advance(uint32 count, scoped_refptr<IndexedDBCallbacks> callbacks);
31   void Continue(scoped_ptr<IndexedDBKey> key,
32                 scoped_ptr<IndexedDBKey> primary_key,
33                 scoped_refptr<IndexedDBCallbacks> callbacks);
34   void PrefetchContinue(int number_to_fetch,
35                         scoped_refptr<IndexedDBCallbacks> callbacks);
36   leveldb::Status PrefetchReset(int used_prefetches, int unused_prefetches);
37
38   const IndexedDBKey& key() const { return cursor_->key(); }
39   const IndexedDBKey& primary_key() const { return cursor_->primary_key(); }
40   IndexedDBValue* Value() const {
41     return (cursor_type_ == indexed_db::CURSOR_KEY_ONLY) ? NULL
42                                                          : cursor_->value();
43   }
44   void Close();
45
46   void CursorIterationOperation(scoped_ptr<IndexedDBKey> key,
47                                 scoped_ptr<IndexedDBKey> primary_key,
48                                 scoped_refptr<IndexedDBCallbacks> callbacks,
49                                 IndexedDBTransaction* transaction);
50   void CursorAdvanceOperation(uint32 count,
51                               scoped_refptr<IndexedDBCallbacks> callbacks,
52                               IndexedDBTransaction* transaction);
53   void CursorPrefetchIterationOperation(
54       int number_to_fetch,
55       scoped_refptr<IndexedDBCallbacks> callbacks,
56       IndexedDBTransaction* transaction);
57
58  private:
59   friend class base::RefCounted<IndexedDBCursor>;
60
61   ~IndexedDBCursor();
62
63   blink::WebIDBTaskType task_type_;
64   indexed_db::CursorType cursor_type_;
65   const scoped_refptr<IndexedDBTransaction> transaction_;
66
67   // Must be destroyed before transaction_.
68   scoped_ptr<IndexedDBBackingStore::Cursor> cursor_;
69   // Must be destroyed before transaction_.
70   scoped_ptr<IndexedDBBackingStore::Cursor> saved_cursor_;
71
72   bool closed_;
73
74   DISALLOW_COPY_AND_ASSIGN(IndexedDBCursor);
75 };
76
77 }  // namespace content
78
79 #endif  // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CURSOR_H_