Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1317)

Unified Diff: content/browser/indexed_db/database_impl.cc

Issue 2472213003: [IndexedDB] Refactoring to remove ref ptrs and host transaction ids. (Closed)
Patch Set: rebase Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/indexed_db/database_impl.cc
diff --git a/content/browser/indexed_db/database_impl.cc b/content/browser/indexed_db/database_impl.cc
index fd3b190eb6c494cc7333197a9f9cad2561ac4b95..27b331f44466128b2082e2054e48a51ad966e817 100644
--- a/content/browser/indexed_db/database_impl.cc
+++ b/content/browser/indexed_db/database_impl.cc
@@ -9,6 +9,7 @@
#include "content/browser/indexed_db/indexed_db_connection.h"
#include "content/browser/indexed_db/indexed_db_context_impl.h"
#include "content/browser/indexed_db/indexed_db_dispatcher_host.h"
+#include "content/browser/indexed_db/indexed_db_transaction.h"
#include "content/browser/indexed_db/indexed_db_value.h"
#include "storage/browser/blob/blob_storage_context.h"
#include "storage/browser/quota/quota_manager_proxy.h"
@@ -453,9 +454,13 @@ void DatabaseImpl::IDBThreadHelper::CreateObjectStore(
if (!connection_->IsConnected())
return;
- connection_->database()->CreateObjectStore(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
- name, key_path, auto_increment);
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
+ connection_->database()->CreateObjectStore(transaction, object_store_id, name,
+ key_path, auto_increment);
}
void DatabaseImpl::IDBThreadHelper::DeleteObjectStore(int64_t transaction_id,
@@ -463,8 +468,12 @@ void DatabaseImpl::IDBThreadHelper::DeleteObjectStore(int64_t transaction_id,
if (!connection_->IsConnected())
return;
- connection_->database()->DeleteObjectStore(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id);
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
+ connection_->database()->DeleteObjectStore(transaction, object_store_id);
}
void DatabaseImpl::IDBThreadHelper::RenameObjectStore(
@@ -474,9 +483,13 @@ void DatabaseImpl::IDBThreadHelper::RenameObjectStore(
if (!connection_->IsConnected())
return;
- connection_->database()->RenameObjectStore(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
- new_name);
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
+ connection_->database()->RenameObjectStore(transaction, object_store_id,
+ new_name);
}
void DatabaseImpl::IDBThreadHelper::CreateTransaction(
@@ -486,15 +499,8 @@ void DatabaseImpl::IDBThreadHelper::CreateTransaction(
if (!connection_->IsConnected())
return;
- int64_t host_transaction_id =
- dispatcher_host_->HostTransactionId(transaction_id);
- if (!dispatcher_host_->RegisterTransactionId(host_transaction_id, origin_)) {
- DLOG(ERROR) << "Duplicate host_transaction_id.";
- return;
- }
-
- connection_->database()->CreateTransaction(
- host_transaction_id, connection_.get(), object_store_ids, mode);
+ connection_->database()->CreateTransaction(transaction_id, connection_.get(),
+ object_store_ids, mode);
}
void DatabaseImpl::IDBThreadHelper::Close() {
@@ -520,11 +526,15 @@ void DatabaseImpl::IDBThreadHelper::AddObserver(int64_t transaction_id,
if (!connection_->IsConnected())
return;
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
IndexedDBObserver::Options options(include_transaction, no_records, values,
operation_types);
- connection_->database()->AddPendingObserver(
- dispatcher_host_->HostTransactionId(transaction_id), observer_id,
- options);
+ connection_->database()->AddPendingObserver(transaction, observer_id,
+ options);
}
void DatabaseImpl::IDBThreadHelper::RemoveObservers(
@@ -545,10 +555,14 @@ void DatabaseImpl::IDBThreadHelper::Get(
if (!connection_->IsConnected())
return;
- connection_->database()->Get(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
- index_id, base::MakeUnique<IndexedDBKeyRange>(key_range), key_only,
- callbacks);
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
+ connection_->database()->Get(transaction, object_store_id, index_id,
+ base::MakeUnique<IndexedDBKeyRange>(key_range),
+ key_only, callbacks);
}
void DatabaseImpl::IDBThreadHelper::GetAll(
@@ -562,10 +576,15 @@ void DatabaseImpl::IDBThreadHelper::GetAll(
if (!connection_->IsConnected())
return;
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
connection_->database()->GetAll(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
- index_id, base::MakeUnique<IndexedDBKeyRange>(key_range), key_only,
- max_count, std::move(callbacks));
+ transaction, object_store_id, index_id,
+ base::MakeUnique<IndexedDBKeyRange>(key_range), key_only, max_count,
+ std::move(callbacks));
}
void DatabaseImpl::IDBThreadHelper::Put(
@@ -581,19 +600,22 @@ void DatabaseImpl::IDBThreadHelper::Put(
if (!connection_->IsConnected())
return;
- int64_t host_transaction_id =
- dispatcher_host_->HostTransactionId(transaction_id);
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
uint64_t commit_size = mojo_value->bits.size();
IndexedDBValue value;
swap(value.bits, mojo_value->bits);
swap(value.blob_info, blob_info);
- connection_->database()->Put(host_transaction_id, object_store_id, &value,
- &handles, base::MakeUnique<IndexedDBKey>(key),
- mode, std::move(callbacks), index_keys);
+ connection_->database()->Put(transaction, object_store_id, &value, &handles,
+ base::MakeUnique<IndexedDBKey>(key), mode,
+ std::move(callbacks), index_keys);
// Size can't be big enough to overflow because it represents the
// actual bytes passed through IPC.
- dispatcher_host_->AddToTransaction(host_transaction_id, commit_size);
+ transaction->set_size(transaction->size() + commit_size);
}
void DatabaseImpl::IDBThreadHelper::SetIndexKeys(
@@ -604,9 +626,14 @@ void DatabaseImpl::IDBThreadHelper::SetIndexKeys(
if (!connection_->IsConnected())
return;
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
connection_->database()->SetIndexKeys(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
- base::MakeUnique<IndexedDBKey>(primary_key), index_keys);
+ transaction, object_store_id, base::MakeUnique<IndexedDBKey>(primary_key),
+ index_keys);
}
void DatabaseImpl::IDBThreadHelper::SetIndexesReady(
@@ -616,9 +643,13 @@ void DatabaseImpl::IDBThreadHelper::SetIndexesReady(
if (!connection_->IsConnected())
return;
- connection_->database()->SetIndexesReady(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
- index_ids);
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
+ connection_->database()->SetIndexesReady(transaction, object_store_id,
+ index_ids);
}
void DatabaseImpl::IDBThreadHelper::OpenCursor(
@@ -633,10 +664,15 @@ void DatabaseImpl::IDBThreadHelper::OpenCursor(
if (!connection_->IsConnected())
return;
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
connection_->database()->OpenCursor(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
- index_id, base::MakeUnique<IndexedDBKeyRange>(key_range), direction,
- key_only, task_type, std::move(callbacks));
+ transaction, object_store_id, index_id,
+ base::MakeUnique<IndexedDBKeyRange>(key_range), direction, key_only,
+ task_type, std::move(callbacks));
}
void DatabaseImpl::IDBThreadHelper::Count(
@@ -648,10 +684,14 @@ void DatabaseImpl::IDBThreadHelper::Count(
if (!connection_->IsConnected())
return;
- connection_->database()->Count(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
- index_id, base::MakeUnique<IndexedDBKeyRange>(key_range),
- std::move(callbacks));
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
+ connection_->database()->Count(transaction, object_store_id, index_id,
+ base::MakeUnique<IndexedDBKeyRange>(key_range),
+ std::move(callbacks));
}
void DatabaseImpl::IDBThreadHelper::DeleteRange(
@@ -662,8 +702,13 @@ void DatabaseImpl::IDBThreadHelper::DeleteRange(
if (!connection_->IsConnected())
return;
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
connection_->database()->DeleteRange(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
+ transaction, object_store_id,
base::MakeUnique<IndexedDBKeyRange>(key_range), std::move(callbacks));
}
@@ -674,9 +719,12 @@ void DatabaseImpl::IDBThreadHelper::Clear(
if (!connection_->IsConnected())
return;
- connection_->database()->Clear(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
- callbacks);
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
+ connection_->database()->Clear(transaction, object_store_id, callbacks);
}
void DatabaseImpl::IDBThreadHelper::CreateIndex(
@@ -690,9 +738,13 @@ void DatabaseImpl::IDBThreadHelper::CreateIndex(
if (!connection_->IsConnected())
return;
- connection_->database()->CreateIndex(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
- index_id, name, key_path, unique, multi_entry);
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
+ connection_->database()->CreateIndex(transaction, object_store_id, index_id,
+ name, key_path, unique, multi_entry);
}
void DatabaseImpl::IDBThreadHelper::DeleteIndex(int64_t transaction_id,
@@ -701,9 +753,12 @@ void DatabaseImpl::IDBThreadHelper::DeleteIndex(int64_t transaction_id,
if (!connection_->IsConnected())
return;
- connection_->database()->DeleteIndex(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
- index_id);
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
+ connection_->database()->DeleteIndex(transaction, object_store_id, index_id);
}
void DatabaseImpl::IDBThreadHelper::RenameIndex(
@@ -714,34 +769,39 @@ void DatabaseImpl::IDBThreadHelper::RenameIndex(
if (!connection_->IsConnected())
return;
- connection_->database()->RenameIndex(
- dispatcher_host_->HostTransactionId(transaction_id), object_store_id,
- index_id, new_name);
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
+ connection_->database()->RenameIndex(transaction, object_store_id, index_id,
+ new_name);
}
void DatabaseImpl::IDBThreadHelper::Abort(int64_t transaction_id) {
if (!connection_->IsConnected())
return;
- connection_->database()->Abort(
- dispatcher_host_->HostTransactionId(transaction_id));
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+
+ connection_->AbortTransaction(transaction);
}
void DatabaseImpl::IDBThreadHelper::Commit(int64_t transaction_id) {
if (!connection_->IsConnected())
return;
- int64_t host_transaction_id =
- dispatcher_host_->HostTransactionId(transaction_id);
- // May have been aborted by back end before front-end could request commit.
- int64_t transaction_size;
- if (!dispatcher_host_->GetTransactionSize(host_transaction_id,
- &transaction_size))
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
return;
// Always allow empty or delete-only transactions.
- if (transaction_size == 0) {
- connection_->database()->Commit(host_transaction_id);
+ if (transaction->size() == 0) {
+ connection_->database()->Commit(transaction);
return;
}
@@ -761,19 +821,17 @@ void DatabaseImpl::IDBThreadHelper::OnGotUsageAndQuotaForCommit(
if (!connection_->IsConnected())
return;
- int64_t host_transaction_id =
- dispatcher_host_->HostTransactionId(transaction_id);
- // May have aborted while quota check was pending.
- int64_t transaction_size;
- if (!dispatcher_host_->GetTransactionSize(host_transaction_id,
- &transaction_size))
+ IndexedDBTransaction* transaction =
+ connection_->GetTransaction(transaction_id);
+ if (!transaction)
return;
- if (status == storage::kQuotaStatusOk && usage + transaction_size <= quota) {
- connection_->database()->Commit(host_transaction_id);
+ if (status == storage::kQuotaStatusOk &&
+ usage + transaction->size() <= quota) {
+ connection_->database()->Commit(transaction);
} else {
- connection_->database()->Abort(
- host_transaction_id,
+ connection_->AbortTransaction(
+ transaction,
IndexedDBDatabaseError(blink::WebIDBDatabaseExceptionQuotaError));
}
}

Powered by Google App Engine
This is Rietveld 408576698