void Client::WaitForStoragesToComplete(nsTArray<nsIOfflineStorage*>& aStorages, nsIRunnable* aCallback) { NS_ASSERTION(NS_IsMainThread(), "Wrong thread!"); NS_ASSERTION(!aStorages.IsEmpty(), "No storages to wait on!"); NS_ASSERTION(aCallback, "Passed null callback!"); TransactionThreadPool* pool = TransactionThreadPool::Get(); NS_ASSERTION(pool, "Should have checked if transaction service is active!"); nsTArray<nsRefPtr<IDBDatabase> > databases(aStorages.Length()); for (uint32_t index = 0; index < aStorages.Length(); index++) { IDBDatabase* database = IDBDatabase::FromStorage(aStorages[index]); if (!database) { MOZ_CRASH(); } databases.AppendElement(database); } pool->WaitForDatabasesToComplete(databases, aCallback); }