| 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 2cd04cee1f4d08913dcd6c95af7bf885dcdffb1f..42dff94b67a67a38be96b1db205b9a2624e9a9b8 100644
 | 
| --- a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
 | 
| +++ b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
 | 
| @@ -36,6 +36,7 @@
 | 
|  #include "modules/indexeddb/IDBIndex.h"
 | 
|  #include "modules/indexeddb/IDBObjectStore.h"
 | 
|  #include "modules/indexeddb/IDBOpenDBRequest.h"
 | 
| +#include "modules/indexeddb/IDBRequestQueueItem.h"
 | 
|  #include "modules/indexeddb/IDBTracing.h"
 | 
|  #include "platform/bindings/ScriptState.h"
 | 
|  #include "platform/bindings/V8PerIsolateData.h"
 | 
| @@ -380,10 +381,37 @@ void IDBTransaction::RegisterRequest(IDBRequest* request) {
 | 
|  
 | 
|  void IDBTransaction::UnregisterRequest(IDBRequest* request) {
 | 
|    DCHECK(request);
 | 
| +#if DCHECK_IS_ON()
 | 
| +  // Make sure that no pending IDBRequest gets left behind in the result queue.
 | 
| +  DCHECK(!request->QueueItem() || request->QueueItem()->IsReady());
 | 
| +#endif  // DCHECK_IS_ON()
 | 
| +
 | 
|    // If we aborted the request, it will already have been removed.
 | 
|    request_list_.erase(request);
 | 
|  }
 | 
|  
 | 
| +void IDBTransaction::EnqueueResult(
 | 
| +    std::unique_ptr<IDBRequestQueueItem> result) {
 | 
| +  DCHECK(result);
 | 
| +  DCHECK(HasQueuedResults() || !result->IsReady());
 | 
| +
 | 
| +  result_queue_.push_back(std::move(result));
 | 
| +  // StartLoading() may complete post-processing synchronously, so the result
 | 
| +  // needs to be in the queue before StartLoading() is called.
 | 
| +  result_queue_.back()->StartLoading();
 | 
| +}
 | 
| +
 | 
| +void IDBTransaction::OnResultReady() {
 | 
| +  while (!result_queue_.empty()) {
 | 
| +    IDBRequestQueueItem* result = result_queue_.front().get();
 | 
| +    if (!result->IsReady())
 | 
| +      break;
 | 
| +
 | 
| +    result->EnqueueResponse();
 | 
| +    result_queue_.pop_front();
 | 
| +  }
 | 
| +}
 | 
| +
 | 
|  void IDBTransaction::OnAbort(DOMException* error) {
 | 
|    IDB_TRACE("IDBTransaction::onAbort");
 | 
|    if (!GetExecutionContext()) {
 | 
| 
 |