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

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

Issue 2062203004: IDBObserver: Lifetime Management: Adding Observer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Final architechture Created 4 years, 5 months 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/indexed_db_database.cc
diff --git a/content/browser/indexed_db/indexed_db_database.cc b/content/browser/indexed_db/indexed_db_database.cc
index 6d104a56d42d256a631fe1c1834c64bd176c1f5d..a73ba298ee5616a7fdbbe4925781907e33cae45f 100644
--- a/content/browser/indexed_db/indexed_db_database.cc
+++ b/content/browser/indexed_db/indexed_db_database.cc
@@ -541,6 +541,26 @@ void IndexedDBDatabase::Abort(int64_t transaction_id,
transaction->Abort(error);
}
+void IndexedDBDatabase::AddPendingObserver(int64_t transaction_id,
+ int32_t observer_id) {
+ IndexedDBTransaction* transaction = GetTransaction(transaction_id);
+ if (!transaction)
+ return;
+ transaction->AddPendingObserver(observer_id);
+}
+
+void IndexedDBDatabase::RemovePendingObservers(
+ IndexedDBConnection* connection,
+ const std::vector<int32_t>& pending_observer_ids) {
+ TransactionMap::iterator it;
+ for (it = transactions_.begin(); it != transactions_.end(); it++) {
+ // Avoid call to RemovePendingObservers for transactions on other
+ // connections.
+ if (it->second->connection() == connection)
+ it->second->RemovePendingObservers(pending_observer_ids);
+ }
+}
+
void IndexedDBDatabase::GetAll(int64_t transaction_id,
int64_t object_store_id,
int64_t index_id,
@@ -1665,9 +1685,9 @@ void IndexedDBDatabase::CreateTransaction(
// The transaction will add itself to this database's coordinator, which
// manages the lifetime of the object.
TransactionCreated(IndexedDBClassFactory::Get()->CreateIndexedDBTransaction(
- transaction_id, connection->callbacks(),
+ transaction_id, connection->GetWeakPtr(),
std::set<int64_t>(object_store_ids.begin(), object_store_ids.end()), mode,
- this, new IndexedDBBackingStore::Transaction(backing_store_.get())));
+ new IndexedDBBackingStore::Transaction(backing_store_.get())));
}
void IndexedDBDatabase::TransactionCreated(IndexedDBTransaction* transaction) {
@@ -1905,7 +1925,7 @@ void IndexedDBDatabase::Close(IndexedDBConnection* connection, bool forced) {
{
TransactionMap transactions(transactions_);
for (const auto& it : transactions) {
- if (it.second->connection() == connection->callbacks())
+ if (it.second->callbacks() == connection->callbacks())
it.second->Abort(
IndexedDBDatabaseError(blink::WebIDBDatabaseExceptionUnknownError,
"Connection is closing."));
« no previous file with comments | « content/browser/indexed_db/indexed_db_database.h ('k') | content/browser/indexed_db/indexed_db_database_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698