// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CURSOR_H_ #define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CURSOR_H_ #include #include "base/basictypes.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "content/browser/indexed_db/indexed_db_backing_store.h" #include "content/browser/indexed_db/indexed_db_database.h" #include "content/common/indexed_db/indexed_db_key_range.h" #include "third_party/WebKit/public/platform/WebIDBTypes.h" namespace content { class IndexedDBTransaction; class CONTENT_EXPORT IndexedDBCursor : NON_EXPORTED_BASE(public base::RefCounted) { public: IndexedDBCursor(scoped_ptr cursor, indexed_db::CursorType cursor_type, blink::WebIDBTaskType task_type, IndexedDBTransaction* transaction); void Advance(uint32 count, scoped_refptr callbacks); void Continue(scoped_ptr key, scoped_ptr primary_key, scoped_refptr callbacks); void PrefetchContinue(int number_to_fetch, scoped_refptr callbacks); leveldb::Status PrefetchReset(int used_prefetches, int unused_prefetches); const IndexedDBKey& key() const { return cursor_->key(); } const IndexedDBKey& primary_key() const { return cursor_->primary_key(); } IndexedDBValue* Value() const { return (cursor_type_ == indexed_db::CURSOR_KEY_ONLY) ? NULL : cursor_->value(); } void Close(); void CursorIterationOperation(scoped_ptr key, scoped_ptr primary_key, scoped_refptr callbacks, IndexedDBTransaction* transaction); void CursorAdvanceOperation(uint32 count, scoped_refptr callbacks, IndexedDBTransaction* transaction); void CursorPrefetchIterationOperation( int number_to_fetch, scoped_refptr callbacks, IndexedDBTransaction* transaction); private: friend class base::RefCounted; ~IndexedDBCursor(); blink::WebIDBTaskType task_type_; indexed_db::CursorType cursor_type_; const scoped_refptr transaction_; // Must be destroyed before transaction_. scoped_ptr cursor_; // Must be destroyed before transaction_. scoped_ptr saved_cursor_; bool closed_; DISALLOW_COPY_AND_ASSIGN(IndexedDBCursor); }; } // namespace content #endif // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_CURSOR_H_