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 075d84614c07acf1097f1e78d63185b8fe9225e6..90a15f934ff2e02c0a88eecd980d42436bbb54af 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()) { |