summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/Modules/indexeddb/IDBRequest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/Modules/indexeddb/IDBRequest.cpp')
-rw-r--r--Source/WebCore/Modules/indexeddb/IDBRequest.cpp33
1 files changed, 24 insertions, 9 deletions
diff --git a/Source/WebCore/Modules/indexeddb/IDBRequest.cpp b/Source/WebCore/Modules/indexeddb/IDBRequest.cpp
index 589042ec0..a316f8d4d 100644
--- a/Source/WebCore/Modules/indexeddb/IDBRequest.cpp
+++ b/Source/WebCore/Modules/indexeddb/IDBRequest.cpp
@@ -85,6 +85,15 @@ PassRefPtr<IDBAny> IDBRequest::result(ExceptionCode& ec) const
return m_result;
}
+PassRefPtr<DOMError> IDBRequest::error(ExceptionCode& ec) const
+{
+ if (m_readyState != DONE) {
+ ec = IDBDatabaseException::IDB_INVALID_STATE_ERR;
+ return 0;
+ }
+ return m_error;
+}
+
unsigned short IDBRequest::errorCode(ExceptionCode& ec) const
{
if (m_readyState != DONE) {
@@ -142,6 +151,7 @@ bool IDBRequest::resetReadyState(IDBTransaction* transaction)
m_readyState = PENDING;
m_result.clear();
m_errorCode = 0;
+ m_error.clear();
m_errorMessage = String();
IDBPendingTransactionMonitor::removePendingTransaction(m_transaction->backend());
@@ -172,9 +182,10 @@ void IDBRequest::abort()
m_enqueuedEvents.clear();
m_errorCode = 0;
+ m_error.clear();
m_errorMessage = String();
m_result.clear();
- onError(IDBDatabaseError::create(IDBDatabaseException::ABORT_ERR, "The transaction was aborted, so the request cannot be fulfilled."));
+ onError(IDBDatabaseError::create(IDBDatabaseException::IDB_ABORT_ERR, "The transaction was aborted, so the request cannot be fulfilled."));
}
void IDBRequest::setCursorType(IDBCursorBackendInterface::CursorType cursorType)
@@ -200,6 +211,8 @@ void IDBRequest::onError(PassRefPtr<IDBDatabaseError> error)
{
ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
m_errorCode = error->code();
+ ASSERT(!m_error);
+ m_error = DOMError::create(IDBDatabaseException::getErrorName(error->idbCode()));
m_errorMessage = error->message();
m_cursor.clear();
enqueueEvent(Event::create(eventNames().errorEvent, true, true));
@@ -213,7 +226,7 @@ static PassRefPtr<Event> createSuccessEvent()
void IDBRequest::onSuccess(PassRefPtr<DOMStringList> domStringList)
{
IDB_TRACE("IDBRequest::onSuccess(DOMStringList)");
- ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+ ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
m_result = IDBAny::create(domStringList);
enqueueEvent(createSuccessEvent());
}
@@ -221,7 +234,7 @@ void IDBRequest::onSuccess(PassRefPtr<DOMStringList> domStringList)
void IDBRequest::onSuccess(PassRefPtr<IDBCursorBackendInterface> backend)
{
IDB_TRACE("IDBRequest::onSuccess(IDBCursor)");
- ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+ ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
ASSERT(m_cursorType != IDBCursorBackendInterface::InvalidCursorType);
RefPtr<IDBCursor> cursor;
if (m_cursorType == IDBCursorBackendInterface::IndexKeyCursor)
@@ -236,7 +249,7 @@ void IDBRequest::onSuccess(PassRefPtr<IDBCursorBackendInterface> backend)
void IDBRequest::onSuccess(PassRefPtr<IDBDatabaseBackendInterface> backend)
{
IDB_TRACE("IDBRequest::onSuccess(IDBDatabase)");
- ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+ ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
if (m_contextStopped || !scriptExecutionContext())
return;
@@ -250,7 +263,7 @@ void IDBRequest::onSuccess(PassRefPtr<IDBDatabaseBackendInterface> backend)
void IDBRequest::onSuccess(PassRefPtr<IDBKey> idbKey)
{
IDB_TRACE("IDBRequest::onSuccess(IDBKey)");
- ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+ ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
if (idbKey && idbKey->isValid())
m_result = IDBAny::create(idbKey);
else
@@ -261,7 +274,7 @@ void IDBRequest::onSuccess(PassRefPtr<IDBKey> idbKey)
void IDBRequest::onSuccess(PassRefPtr<IDBTransactionBackendInterface> prpBackend)
{
IDB_TRACE("IDBRequest::onSuccess(IDBTransaction)");
- ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+ ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
RefPtr<IDBTransactionBackendInterface> backend = prpBackend;
if (m_contextStopped || !scriptExecutionContext()) {
@@ -286,7 +299,7 @@ void IDBRequest::onSuccess(PassRefPtr<IDBTransactionBackendInterface> prpBackend
void IDBRequest::onSuccess(PassRefPtr<SerializedScriptValue> serializedScriptValue)
{
IDB_TRACE("IDBRequest::onSuccess(SerializedScriptValue)");
- ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+ ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
m_result = IDBAny::create(serializedScriptValue);
m_cursor.clear();
enqueueEvent(createSuccessEvent());
@@ -295,7 +308,7 @@ void IDBRequest::onSuccess(PassRefPtr<SerializedScriptValue> serializedScriptVal
void IDBRequest::onSuccessWithContinuation()
{
IDB_TRACE("IDBRequest::onSuccessWithContinuation");
- ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+ ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
ASSERT(m_cursor);
setResultCursor(m_cursor, m_cursorType);
m_cursor.clear();
@@ -387,8 +400,10 @@ bool IDBRequest::dispatchEvent(PassRefPtr<Event> event)
if (m_transaction && event->type() != eventNames().blockedEvent) {
// If an error event and the default wasn't prevented...
- if (dontPreventDefault && event->type() == eventNames().errorEvent)
+ if (dontPreventDefault && event->type() == eventNames().errorEvent) {
+ m_transaction->setError(m_error);
m_transaction->backend()->abort();
+ }
m_transaction->backend()->didCompleteTaskEvents();
}
return dontPreventDefault;