Index: third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp |
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp |
index c5e2aaad76bed544144475b772879f56b7edfb2a..8489d2300017bc2a975ebfe9945fc0f5526afa80 100644 |
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp |
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp |
@@ -42,6 +42,7 @@ |
#include "modules/indexeddb/IDBEventDispatcher.h" |
#include "modules/indexeddb/IDBTracing.h" |
#include "modules/indexeddb/IDBValue.h" |
+#include "modules/indexeddb/WebIDBCallbacksImpl.h" |
#include "platform/SharedBuffer.h" |
#include "public/platform/WebBlobInfo.h" |
#include <memory> |
@@ -131,6 +132,20 @@ const String& IDBRequest::readyState() const |
return IndexedDBNames::done; |
} |
+std::unique_ptr<WebIDBCallbacks> IDBRequest::createWebCallbacks() |
+{ |
+ DCHECK(!m_webCallbacks); |
+ std::unique_ptr<WebIDBCallbacks> callbacks = WebIDBCallbacksImpl::create(this); |
+ m_webCallbacks = callbacks.get(); |
+ return callbacks; |
+} |
+ |
+void IDBRequest::webCallbacksDestroyed() |
+{ |
+ DCHECK(m_webCallbacks); |
+ m_webCallbacks = nullptr; |
+} |
+ |
void IDBRequest::abort() |
{ |
DCHECK(!m_requestAborted); |
@@ -403,6 +418,10 @@ void IDBRequest::stop() |
m_result->contextWillBeDestroyed(); |
if (m_pendingCursor) |
m_pendingCursor->contextWillBeDestroyed(); |
+ if (m_webCallbacks) { |
+ m_webCallbacks->detach(); |
+ m_webCallbacks = nullptr; |
+ } |
} |
const AtomicString& IDBRequest::interfaceName() const |