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 98a496d4aa758f8f43343b3513516115990c90ab..ea832a61bd7829d8d877ca5ea69611d0da677ad5 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> |
@@ -132,6 +133,19 @@ 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); |
if (m_contextStopped || !getExecutionContext()) |
@@ -397,6 +411,10 @@ void IDBRequest::contextDestroyed() { |
m_result->contextWillBeDestroyed(); |
if (m_pendingCursor) |
m_pendingCursor->contextWillBeDestroyed(); |
+ if (m_webCallbacks) { |
+ m_webCallbacks->detach(); |
+ m_webCallbacks = nullptr; |
+ } |
} |
const AtomicString& IDBRequest::interfaceName() const { |