Home | History | Annotate | Download | only in indexed_db
      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