Commit acf2c7db authored by Chase Phillips's avatar Chase Phillips Committed by Commit Bot

IndexedDB: Detach callbacks and request before calling HandleResponse()

This is meant to be a no-op change which allows an IDBRequest to
no longer have an associated callbacks object when the request
response handling is initiated.

It's a no-op because currently HandleResponse() only results in
(maybe) an event being enqueued with no real immediate dispatching
of the event.

A future change will switch event enqueueing to instead immediately
dispatch in some cases, and at that time it will be necessary for
the request to have its callbacks object detached to properly
handle the event.

Bug: 965136
Change-Id: Iaddc0254234b6ba2985f324f21fef2841e8bcf98
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1639155Reviewed-by: default avatarDaniel Murphy <dmurph@chromium.org>
Commit-Queue: Chase Phillips <cmp@chromium.org>
Cr-Commit-Position: refs/heads/master@{#666347}
parent 61a48bb6
...@@ -118,9 +118,10 @@ void WebIDBCallbacksImpl::Error(int32_t code, const String& message) { ...@@ -118,9 +118,10 @@ void WebIDBCallbacksImpl::Error(int32_t code, const String& message) {
} }
probe::AsyncTask async_task(request_->GetExecutionContext(), this, "error"); probe::AsyncTask async_task(request_->GetExecutionContext(), this, "error");
request_->HandleResponse(MakeGarbageCollected<DOMException>( IDBRequest* request = request_.Get();
static_cast<DOMExceptionCode>(code), message));
Detach(); Detach();
request->HandleResponse(MakeGarbageCollected<DOMException>(
static_cast<DOMExceptionCode>(code), message));
} }
void WebIDBCallbacksImpl::SuccessNamesAndVersionsList( void WebIDBCallbacksImpl::SuccessNamesAndVersionsList(
...@@ -137,8 +138,9 @@ void WebIDBCallbacksImpl::SuccessStringList(const Vector<String>& string_list) { ...@@ -137,8 +138,9 @@ void WebIDBCallbacksImpl::SuccessStringList(const Vector<String>& string_list) {
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
DCHECK(!request_->TransactionHasQueuedResults()); DCHECK(!request_->TransactionHasQueuedResults());
#endif // DCHECK_IS_ON() #endif // DCHECK_IS_ON()
request_->EnqueueResponse(std::move(string_list)); IDBRequest* request = request_.Get();
Detach(); Detach();
request->EnqueueResponse(std::move(string_list));
} }
void WebIDBCallbacksImpl::SuccessCursor( void WebIDBCallbacksImpl::SuccessCursor(
...@@ -162,9 +164,10 @@ void WebIDBCallbacksImpl::SuccessCursor( ...@@ -162,9 +164,10 @@ void WebIDBCallbacksImpl::SuccessCursor(
probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
value->SetIsolate(request_->GetIsolate()); value->SetIsolate(request_->GetIsolate());
request_->HandleResponse(std::move(cursor), std::move(key), IDBRequest* request = request_.Get();
std::move(primary_key), std::move(value));
Detach(); Detach();
request->HandleResponse(std::move(cursor), std::move(key),
std::move(primary_key), std::move(value));
} }
void WebIDBCallbacksImpl::SuccessCursorPrefetch( void WebIDBCallbacksImpl::SuccessCursorPrefetch(
...@@ -193,8 +196,9 @@ void WebIDBCallbacksImpl::SuccessDatabase( ...@@ -193,8 +196,9 @@ void WebIDBCallbacksImpl::SuccessDatabase(
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
DCHECK(!request_->TransactionHasQueuedResults()); DCHECK(!request_->TransactionHasQueuedResults());
#endif // DCHECK_IS_ON() #endif // DCHECK_IS_ON()
request_->EnqueueResponse(std::move(db), IDBDatabaseMetadata(metadata)); IDBRequest* request = request_.Get();
Detach(); Detach();
request->EnqueueResponse(std::move(db), IDBDatabaseMetadata(metadata));
} else if (db) { } else if (db) {
db->Close(); db->Close();
} }
...@@ -205,8 +209,9 @@ void WebIDBCallbacksImpl::SuccessKey(std::unique_ptr<IDBKey> key) { ...@@ -205,8 +209,9 @@ void WebIDBCallbacksImpl::SuccessKey(std::unique_ptr<IDBKey> key) {
return; return;
probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
request_->HandleResponse(std::move(key)); IDBRequest* request = request_.Get();
Detach(); Detach();
request->HandleResponse(std::move(key));
} }
void WebIDBCallbacksImpl::SuccessValue( void WebIDBCallbacksImpl::SuccessValue(
...@@ -217,8 +222,9 @@ void WebIDBCallbacksImpl::SuccessValue( ...@@ -217,8 +222,9 @@ void WebIDBCallbacksImpl::SuccessValue(
std::unique_ptr<IDBValue> value = ConvertReturnValue(return_value); std::unique_ptr<IDBValue> value = ConvertReturnValue(return_value);
probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
value->SetIsolate(request_->GetIsolate()); value->SetIsolate(request_->GetIsolate());
request_->HandleResponse(std::move(value)); IDBRequest* request = request_.Get();
Detach(); Detach();
request->HandleResponse(std::move(value));
} }
void WebIDBCallbacksImpl::SuccessArray( void WebIDBCallbacksImpl::SuccessArray(
...@@ -234,8 +240,9 @@ void WebIDBCallbacksImpl::SuccessArray( ...@@ -234,8 +240,9 @@ void WebIDBCallbacksImpl::SuccessArray(
idb_value->SetIsolate(request_->GetIsolate()); idb_value->SetIsolate(request_->GetIsolate());
idb_values.emplace_back(std::move(idb_value)); idb_values.emplace_back(std::move(idb_value));
} }
request_->HandleResponse(std::move(idb_values)); IDBRequest* request = request_.Get();
Detach(); Detach();
request->HandleResponse(std::move(idb_values));
} }
void WebIDBCallbacksImpl::SuccessInteger(int64_t value) { void WebIDBCallbacksImpl::SuccessInteger(int64_t value) {
...@@ -243,8 +250,9 @@ void WebIDBCallbacksImpl::SuccessInteger(int64_t value) { ...@@ -243,8 +250,9 @@ void WebIDBCallbacksImpl::SuccessInteger(int64_t value) {
return; return;
probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
request_->HandleResponse(value); IDBRequest* request = request_.Get();
Detach(); Detach();
request->HandleResponse(value);
} }
void WebIDBCallbacksImpl::Success() { void WebIDBCallbacksImpl::Success() {
...@@ -252,8 +260,9 @@ void WebIDBCallbacksImpl::Success() { ...@@ -252,8 +260,9 @@ void WebIDBCallbacksImpl::Success() {
return; return;
probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
request_->HandleResponse(); IDBRequest* request = request_.Get();
Detach(); Detach();
request->HandleResponse();
} }
void WebIDBCallbacksImpl::SuccessCursorContinue( void WebIDBCallbacksImpl::SuccessCursorContinue(
...@@ -273,9 +282,10 @@ void WebIDBCallbacksImpl::SuccessCursorContinue( ...@@ -273,9 +282,10 @@ void WebIDBCallbacksImpl::SuccessCursorContinue(
} }
DCHECK(value); DCHECK(value);
value->SetIsolate(request_->GetIsolate()); value->SetIsolate(request_->GetIsolate());
request_->HandleResponse(std::move(key), std::move(primary_key), IDBRequest* request = request_.Get();
std::move(value));
Detach(); Detach();
request->HandleResponse(std::move(key), std::move(primary_key),
std::move(value));
} }
void WebIDBCallbacksImpl::Blocked(int64_t old_version) { void WebIDBCallbacksImpl::Blocked(int64_t old_version) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment