IDBCursorBackend.h [plain text]
#ifndef IDBCursorBackend_h
#define IDBCursorBackend_h
#if ENABLE(INDEXED_DATABASE)
#include "IDBDatabaseBackend.h"
#include "IDBTransactionBackend.h"
#include <wtf/RefPtr.h>
namespace WebCore {
class IDBKeyRange;
class SharedBuffer;
class IDBCursorBackend : public RefCounted<IDBCursorBackend> {
public:
static Ref<IDBCursorBackend> create(int64_t cursorID, IndexedDB::CursorType cursorType, IDBTransactionBackend& transaction, int64_t objectStoreID)
{
return adoptRef(*new IDBCursorBackend(cursorID, cursorType, IDBDatabaseBackend::NormalTask, transaction, objectStoreID));
}
static Ref<IDBCursorBackend> create(int64_t cursorID, IndexedDB::CursorType cursorType, IDBDatabaseBackend::TaskType taskType, IDBTransactionBackend& transaction, int64_t objectStoreID)
{
return adoptRef(*new IDBCursorBackend(cursorID, cursorType, taskType, transaction, objectStoreID));
}
~IDBCursorBackend();
void advance(unsigned long, PassRefPtr<IDBCallbacks>, ExceptionCode&);
void continueFunction(PassRefPtr<IDBKey>, PassRefPtr<IDBCallbacks>, ExceptionCode&);
void deleteFunction(PassRefPtr<IDBCallbacks>, ExceptionCode&);
void postSuccessHandlerCallback() { }
IDBKey* key() const { return m_currentKey.get(); }
IDBKey* primaryKey() const { return m_currentPrimaryKey.get(); }
SharedBuffer* valueBuffer() const { return (m_cursorType == IndexedDB::CursorType::KeyOnly) ? nullptr : m_currentValueBuffer.get(); }
void updateCursorData(IDBKey*, IDBKey* primaryKey, SharedBuffer* valueBuffer);
void close();
IndexedDB::CursorType cursorType() const { return m_cursorType; }
int64_t id() const { return m_cursorID; }
IDBTransactionBackend& transaction() { return *m_transaction; }
void clear();
void setSavedCursorID(int64_t cursorID) { m_savedCursorID = cursorID; }
private:
IDBCursorBackend(int64_t cursorID, IndexedDB::CursorType, IDBDatabaseBackend::TaskType, IDBTransactionBackend&, int64_t objectStoreID);
IDBDatabaseBackend::TaskType m_taskType;
IndexedDB::CursorType m_cursorType;
RefPtr<IDBTransactionBackend> m_transaction;
const int64_t m_objectStoreID;
int64_t m_cursorID;
int64_t m_savedCursorID;
RefPtr<IDBKey> m_currentKey;
RefPtr<IDBKey> m_currentPrimaryKey;
RefPtr<SharedBuffer> m_currentValueBuffer;
bool m_closed;
};
}
#endif // ENABLE(INDEXED_DATABASE)
#endif // IDBCursorBackend_h