Index: third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp |
diff --git a/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp b/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp |
index 22bc31535876f6893841dbb35712eda358fc3dda..c87577997479ff419f0fc01d0a9cbe32a8e0cd48 100644 |
--- a/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp |
+++ b/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp |
@@ -67,17 +67,26 @@ WebIDBCallbacksImpl::WebIDBCallbacksImpl(IDBRequest* request) |
} |
WebIDBCallbacksImpl::~WebIDBCallbacksImpl() { |
- InspectorInstrumentation::asyncTaskCanceled(m_request->getExecutionContext(), |
- this); |
+ if (m_request) { |
+ InspectorInstrumentation::asyncTaskCanceled( |
+ m_request->getExecutionContext(), this); |
+ m_request->webCallbacksDestroyed(); |
+ } |
} |
void WebIDBCallbacksImpl::onError(const WebIDBDatabaseError& error) { |
+ if (!m_request) |
+ return; |
+ |
InspectorInstrumentation::AsyncTask asyncTask( |
m_request->getExecutionContext(), this); |
m_request->onError(DOMException::create(error.code(), error.message())); |
} |
void WebIDBCallbacksImpl::onSuccess(const WebVector<WebString>& webStringList) { |
+ if (!m_request) |
+ return; |
+ |
Vector<String> stringList; |
for (size_t i = 0; i < webStringList.size(); ++i) |
stringList.append(webStringList[i]); |
@@ -90,6 +99,9 @@ void WebIDBCallbacksImpl::onSuccess(WebIDBCursor* cursor, |
const WebIDBKey& key, |
const WebIDBKey& primaryKey, |
const WebIDBValue& value) { |
+ if (!m_request) |
+ return; |
+ |
InspectorInstrumentation::AsyncTask asyncTask( |
m_request->getExecutionContext(), this); |
m_request->onSuccess(wrapUnique(cursor), key, primaryKey, |
@@ -98,24 +110,38 @@ void WebIDBCallbacksImpl::onSuccess(WebIDBCursor* cursor, |
void WebIDBCallbacksImpl::onSuccess(WebIDBDatabase* backend, |
const WebIDBMetadata& metadata) { |
- InspectorInstrumentation::AsyncTask asyncTask( |
- m_request->getExecutionContext(), this); |
- m_request->onSuccess(wrapUnique(backend), IDBDatabaseMetadata(metadata)); |
+ std::unique_ptr<WebIDBDatabase> db = wrapUnique(backend); |
+ if (m_request) { |
+ InspectorInstrumentation::AsyncTask asyncTask( |
+ m_request->getExecutionContext(), this); |
+ m_request->onSuccess(std::move(db), IDBDatabaseMetadata(metadata)); |
+ } else if (db) { |
+ db->close(); |
+ } |
} |
void WebIDBCallbacksImpl::onSuccess(const WebIDBKey& key) { |
+ if (!m_request) |
+ return; |
+ |
InspectorInstrumentation::AsyncTask asyncTask( |
m_request->getExecutionContext(), this); |
m_request->onSuccess(key); |
} |
void WebIDBCallbacksImpl::onSuccess(const WebIDBValue& value) { |
+ if (!m_request) |
+ return; |
+ |
InspectorInstrumentation::AsyncTask asyncTask( |
m_request->getExecutionContext(), this); |
m_request->onSuccess(IDBValue::create(value)); |
} |
void WebIDBCallbacksImpl::onSuccess(const WebVector<WebIDBValue>& values) { |
+ if (!m_request) |
+ return; |
+ |
InspectorInstrumentation::AsyncTask asyncTask( |
m_request->getExecutionContext(), this); |
Vector<RefPtr<IDBValue>> idbValues(values.size()); |
@@ -125,12 +151,18 @@ void WebIDBCallbacksImpl::onSuccess(const WebVector<WebIDBValue>& values) { |
} |
void WebIDBCallbacksImpl::onSuccess(long long value) { |
+ if (!m_request) |
+ return; |
+ |
InspectorInstrumentation::AsyncTask asyncTask( |
m_request->getExecutionContext(), this); |
m_request->onSuccess(value); |
} |
void WebIDBCallbacksImpl::onSuccess() { |
+ if (!m_request) |
+ return; |
+ |
InspectorInstrumentation::AsyncTask asyncTask( |
m_request->getExecutionContext(), this); |
m_request->onSuccess(); |
@@ -139,12 +171,18 @@ void WebIDBCallbacksImpl::onSuccess() { |
void WebIDBCallbacksImpl::onSuccess(const WebIDBKey& key, |
const WebIDBKey& primaryKey, |
const WebIDBValue& value) { |
+ if (!m_request) |
+ return; |
+ |
InspectorInstrumentation::AsyncTask asyncTask( |
m_request->getExecutionContext(), this); |
m_request->onSuccess(key, primaryKey, IDBValue::create(value)); |
} |
void WebIDBCallbacksImpl::onBlocked(long long oldVersion) { |
+ if (!m_request) |
+ return; |
+ |
InspectorInstrumentation::AsyncTask asyncTask( |
m_request->getExecutionContext(), this); |
m_request->onBlocked(oldVersion); |
@@ -155,11 +193,20 @@ void WebIDBCallbacksImpl::onUpgradeNeeded(long long oldVersion, |
const WebIDBMetadata& metadata, |
unsigned short dataLoss, |
WebString dataLossMessage) { |
- InspectorInstrumentation::AsyncTask asyncTask( |
- m_request->getExecutionContext(), this); |
- m_request->onUpgradeNeeded( |
- oldVersion, wrapUnique(database), IDBDatabaseMetadata(metadata), |
- static_cast<WebIDBDataLoss>(dataLoss), dataLossMessage); |
+ std::unique_ptr<WebIDBDatabase> db = wrapUnique(database); |
+ if (m_request) { |
+ InspectorInstrumentation::AsyncTask asyncTask( |
+ m_request->getExecutionContext(), this); |
+ m_request->onUpgradeNeeded( |
+ oldVersion, std::move(db), IDBDatabaseMetadata(metadata), |
+ static_cast<WebIDBDataLoss>(dataLoss), dataLossMessage); |
+ } else { |
+ db->close(); |
+ } |
+} |
+ |
+void WebIDBCallbacksImpl::detach() { |
+ m_request.clear(); |
} |
} // namespace blink |