Index: third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp |
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp |
index e3d622e57ca74a29a728d1524fcf62f83446a246..bf696035da6218b402be065405a1cd57584dc62d 100644 |
--- a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp |
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp |
@@ -176,6 +176,7 @@ DEFINE_TRACE(IDBTransaction) { |
visitor->Trace(open_db_request_); |
visitor->Trace(error_); |
visitor->Trace(request_list_); |
+ visitor->Trace(result_queue_); |
visitor->Trace(object_store_map_); |
visitor->Trace(old_store_metadata_); |
visitor->Trace(deleted_indexes_); |
@@ -383,6 +384,24 @@ void IDBTransaction::UnregisterRequest(IDBRequest* request) { |
request_list_.erase(request); |
} |
+void IDBTransaction::EnqueueResult(IDBRequestQueueItem* result) { |
+ DCHECK(result); |
+ DCHECK(HasQueuedResult() || !result->IsReady()); |
+ |
+ result_queue_.push_back(result); |
+} |
+ |
+void IDBTransaction::OnResultReady() { |
+ while (!result_queue_.empty()) { |
+ IDBRequestQueueItem* result = result_queue_.front(); |
+ if (!result->IsReady()) |
+ break; |
+ |
+ result->FireCallback(); |
+ result_queue_.pop_front(); |
+ } |
+} |
+ |
void IDBTransaction::OnAbort(DOMException* error) { |
IDB_TRACE("IDBTransaction::onAbort"); |
if (!GetExecutionContext()) { |