summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/storage/IDBTransaction.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-24 11:24:40 +0100
committerBen Murdoch <benm@google.com>2011-06-02 09:53:15 +0100
commit81bc750723a18f21cd17d1b173cd2a4dda9cea6e (patch)
tree7a9e5ed86ff429fd347a25153107221543909b19 /Source/WebCore/storage/IDBTransaction.cpp
parent94088a6d336c1dd80a1e734af51e96abcbb689a7 (diff)
downloadexternal_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.zip
external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.gz
external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.bz2
Merge WebKit at r80534: Intial merge by Git
Change-Id: Ia7a83357124c9e1cdb1debf55d9661ec0bd09a61
Diffstat (limited to 'Source/WebCore/storage/IDBTransaction.cpp')
-rw-r--r--Source/WebCore/storage/IDBTransaction.cpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/Source/WebCore/storage/IDBTransaction.cpp b/Source/WebCore/storage/IDBTransaction.cpp
index 1f696b3..710bb76 100644
--- a/Source/WebCore/storage/IDBTransaction.cpp
+++ b/Source/WebCore/storage/IDBTransaction.cpp
@@ -31,10 +31,9 @@
#include "Document.h"
#include "EventException.h"
#include "EventQueue.h"
-#include "IDBAbortEvent.h"
-#include "IDBCompleteEvent.h"
#include "IDBDatabase.h"
#include "IDBDatabaseException.h"
+#include "IDBEventDispatcher.h"
#include "IDBIndex.h"
#include "IDBObjectStore.h"
#include "IDBObjectStoreBackendInterface.h"
@@ -104,14 +103,31 @@ void IDBTransaction::abort()
m_backend->abort();
}
+void IDBTransaction::registerRequest(IDBRequest* request)
+{
+ m_childRequests.add(request);
+}
+
+void IDBTransaction::unregisterRequest(IDBRequest* request)
+{
+ // If we aborted the request, it will already have been removed.
+ m_childRequests.remove(request);
+}
+
void IDBTransaction::onAbort()
{
- enqueueEvent(IDBAbortEvent::create(IDBAny::create(this)));
+ while (!m_childRequests.isEmpty()) {
+ IDBRequest* request = *m_childRequests.begin();
+ m_childRequests.remove(request);
+ request->abort();
+ }
+
+ enqueueEvent(Event::create(eventNames().abortEvent, true, false));
}
void IDBTransaction::onComplete()
{
- enqueueEvent(IDBCompleteEvent::create(IDBAny::create(this)));
+ enqueueEvent(Event::create(eventNames().completeEvent, false, false));
}
bool IDBTransaction::hasPendingActivity() const
@@ -139,8 +155,9 @@ bool IDBTransaction::dispatchEvent(PassRefPtr<Event> event)
targets.append(this);
targets.append(db());
- ASSERT(event->isIDBAbortEvent() || event->isIDBCompleteEvent());
- return static_cast<IDBEvent*>(event.get())->dispatch(targets);
+ // FIXME: When we allow custom event dispatching, this will probably need to change.
+ ASSERT(event->type() == eventNames().completeEvent || event->type() == eventNames().abortEvent);
+ return IDBEventDispatcher::dispatch(event.get(), targets);
}
bool IDBTransaction::canSuspend() const