void IDBTransaction::onAbort(PassRefPtr<IDBDatabaseError> prpError) { IDB_TRACE("IDBTransaction::onAbort"); RefPtr<IDBDatabaseError> error = prpError; ASSERT(m_state != Finished); if (m_state != Finishing) { ASSERT(error.get()); setError(DOMError::create(error->name()), error->message()); // Abort was not triggered by front-end, so outstanding requests must // be aborted now. while (!m_requestList.isEmpty()) { IDBRequest* request = *m_requestList.begin(); m_requestList.remove(request); request->abort(); } m_state = Finishing; } if (isVersionChange()) { for (IDBObjectStoreMetadataMap::iterator it = m_objectStoreCleanupMap.begin(); it != m_objectStoreCleanupMap.end(); ++it) it->key->setMetadata(it->value); m_database->setMetadata(m_previousMetadata); } m_objectStoreCleanupMap.clear(); closeOpenCursors(); // Enqueue events before notifying database, as database may close which enqueues more events and order matters. enqueueEvent(Event::create(eventNames().abortEvent, true, false)); m_database->transactionFinished(this); }
void IDBTransaction::onAbort() { while (!m_childRequests.isEmpty()) { IDBRequest* request = *m_childRequests.begin(); m_childRequests.remove(request); request->abort(); } enqueueEvent(Event::create(eventNames().abortEvent, true, false)); }
void IDBTransaction::onAbort() { ASSERT(!m_transactionFinished); while (!m_childRequests.isEmpty()) { IDBRequest* request = *m_childRequests.begin(); m_childRequests.remove(request); request->abort(); } closeOpenCursors(); m_database->transactionFinished(this); if (m_contextStopped || !scriptExecutionContext()) return; enqueueEvent(Event::create(eventNames().abortEvent, true, false)); }
void IDBTransaction::abort(ExceptionCode& ec) { if (m_state == Finishing || m_state == Finished) { ec = IDBDatabaseException::InvalidStateError; return; } m_state = Finishing; while (!m_requestList.isEmpty()) { IDBRequest* request = *m_requestList.begin(); m_requestList.remove(request); request->abort(); } RefPtr<IDBTransaction> selfRef = this; if (m_backend) m_backend->abort(); }
void IDBTransaction::abort(ExceptionState& exceptionState) { if (m_state == Finishing || m_state == Finished) { exceptionState.throwDOMException(InvalidStateError, IDBDatabase::transactionFinishedErrorMessage); return; } m_state = Finishing; if (m_contextStopped) return; while (!m_requestList.isEmpty()) { IDBRequest* request = *m_requestList.begin(); m_requestList.remove(request); request->abort(); } if (backendDB()) backendDB()->abort(m_id); }
void IDBTransaction::onAbort(PassRefPtrWillBeRawPtr<DOMError> prpError) { IDB_TRACE("IDBTransaction::onAbort"); if (m_contextStopped) { m_database->transactionFinished(this); return; } RefPtrWillBeRawPtr<DOMError> error = prpError; ASSERT(m_state != Finished); if (m_state != Finishing) { ASSERT(error.get()); setError(error.release()); // Abort was not triggered by front-end, so outstanding requests must // be aborted now. while (!m_requestList.isEmpty()) { IDBRequest* request = *m_requestList.begin(); m_requestList.remove(request); request->abort(); } m_state = Finishing; } if (isVersionChange()) { for (IDBObjectStoreMetadataMap::iterator it = m_objectStoreCleanupMap.begin(); it != m_objectStoreCleanupMap.end(); ++it) it->key->setMetadata(it->value); m_database->setMetadata(m_previousMetadata); m_database->close(); } m_objectStoreCleanupMap.clear(); // Enqueue events before notifying database, as database may close which enqueues more events and order matters. enqueueEvent(Event::createBubble(EventTypeNames::abort)); m_database->transactionFinished(this); }