diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-29 10:46:47 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-11-02 12:02:10 +0000 |
commit | 99677208ff3b216fdfec551fbe548da5520cd6fb (patch) | |
tree | 476a4865c10320249360e859d8fdd3e01833b03a /chromium/content/browser/indexed_db/database_impl.cc | |
parent | c30a6232df03e1efbd9f3b226777b07e087a1122 (diff) | |
download | qtwebengine-chromium-99677208ff3b216fdfec551fbe548da5520cd6fb.tar.gz |
BASELINE: Update Chromium to 86.0.4240.124
Change-Id: Ide0ff151e94cd665ae6521a446995d34a9d1d644
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/content/browser/indexed_db/database_impl.cc')
-rw-r--r-- | chromium/content/browser/indexed_db/database_impl.cc | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/chromium/content/browser/indexed_db/database_impl.cc b/chromium/content/browser/indexed_db/database_impl.cc index 3dc21b2c64e..1bfbd8263fa 100644 --- a/chromium/content/browser/indexed_db/database_impl.cc +++ b/chromium/content/browser/indexed_db/database_impl.cc @@ -224,29 +224,44 @@ void DatabaseImpl::GetAll(int64_t transaction_id, int64_t max_count, blink::mojom::IDBDatabase::GetAllCallback callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!connection_->IsConnected()) { + // TODO(enne): see note below. It can be incorrect for result ordering to + // run the callback directly from this function. + mojo::Remote<blink::mojom::IDBDatabaseGetAllResultSink> result_sink; + auto receiver = result_sink.BindNewPipeAndPassReceiver(); + std::move(callback).Run(std::move(receiver)); + IndexedDBDatabaseError error(blink::mojom::IDBException::kUnknownError, "Not connected."); - std::move(callback).Run( - blink::mojom::IDBDatabaseGetAllResult::NewErrorResult( - blink::mojom::IDBError::New(error.code(), error.message()))); + result_sink->OnError( + blink::mojom::IDBError::New(error.code(), error.message())); return; } IndexedDBTransaction* transaction = connection_->GetTransaction(transaction_id); if (!transaction) { + mojo::Remote<blink::mojom::IDBDatabaseGetAllResultSink> result_sink; + auto receiver = result_sink.BindNewPipeAndPassReceiver(); + std::move(callback).Run(std::move(receiver)); + IndexedDBDatabaseError error(blink::mojom::IDBException::kUnknownError, "Unknown transaction."); - std::move(callback).Run( - blink::mojom::IDBDatabaseGetAllResult::NewErrorResult( - blink::mojom::IDBError::New(error.code(), error.message()))); + result_sink->OnError( + blink::mojom::IDBError::New(error.code(), error.message())); return; } + // Hypothetically, this could pass the receiver to the callback immediately. + // However, for result ordering issues, we need to PostTask to mimic + // all of the other operations. + // TODO(enne): Consider rewriting the renderer side to order results based + // on initial request ordering and not on when the results are returned. blink::mojom::IDBDatabase::GetAllCallback aborting_callback = - CreateCallbackAbortOnDestruct<blink::mojom::IDBDatabase::GetAllCallback, - blink::mojom::IDBDatabaseGetAllResultPtr>( + CreateCallbackAbortOnDestruct< + blink::mojom::IDBDatabase::GetAllCallback, + mojo::PendingReceiver<blink::mojom::IDBDatabaseGetAllResultSink>>( std::move(callback), transaction->AsWeakPtr()); transaction->ScheduleTask(BindWeakOperation( |