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_ 80