summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/storage/IDBCursor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/storage/IDBCursor.cpp')
-rw-r--r--Source/WebCore/storage/IDBCursor.cpp29
1 files changed, 25 insertions, 4 deletions
diff --git a/Source/WebCore/storage/IDBCursor.cpp b/Source/WebCore/storage/IDBCursor.cpp
index 531cae1..9b1ebf6 100644
--- a/Source/WebCore/storage/IDBCursor.cpp
+++ b/Source/WebCore/storage/IDBCursor.cpp
@@ -39,13 +39,20 @@
namespace WebCore {
-IDBCursor::IDBCursor(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBTransaction* transaction)
+PassRefPtr<IDBCursor> IDBCursor::create(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
+{
+ return adoptRef(new IDBCursor(backend, request, source, transaction));
+}
+
+IDBCursor::IDBCursor(PassRefPtr<IDBCursorBackendInterface> backend, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
: m_backend(backend)
, m_request(request)
+ , m_source(source)
, m_transaction(transaction)
{
ASSERT(m_backend);
ASSERT(m_request);
+ ASSERT(m_source->type() == IDBAny::IDBObjectStoreType || m_source->type() == IDBAny::IDBIndexType);
ASSERT(m_transaction);
}
@@ -63,17 +70,29 @@ PassRefPtr<IDBKey> IDBCursor::key() const
return m_backend->key();
}
-PassRefPtr<IDBAny> IDBCursor::value() const
+PassRefPtr<IDBKey> IDBCursor::primaryKey() const
+{
+ return m_backend->primaryKey();
+}
+
+PassRefPtr<SerializedScriptValue> IDBCursor::value() const
{
return m_backend->value();
}
+IDBAny* IDBCursor::source() const
+{
+ return m_source.get();
+}
+
PassRefPtr<IDBRequest> IDBCursor::update(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, ExceptionCode& ec)
{
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
m_backend->update(value, request, ec);
- if (ec)
+ if (ec) {
+ request->markEarlyDeath();
return 0;
+ }
return request.release();
}
@@ -91,8 +110,10 @@ PassRefPtr<IDBRequest> IDBCursor::deleteFunction(ScriptExecutionContext* context
{
RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), m_transaction.get());
m_backend->deleteFunction(request, ec);
- if (ec)
+ if (ec) {
+ request->markEarlyDeath();
return 0;
+ }
return request.release();
}