diff options
Diffstat (limited to 'Source/WebCore/Modules/indexeddb/IDBRequest.cpp')
-rw-r--r-- | Source/WebCore/Modules/indexeddb/IDBRequest.cpp | 33 |
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; |