Index: components/safe_browsing_db/v4_database.cc |
diff --git a/components/safe_browsing_db/v4_database.cc b/components/safe_browsing_db/v4_database.cc |
index 5edeb3e9422df61daf2dfe31e5f12d811af37627..8b20a88b3444cf5526903604da78e1f487b3f7b6 100644 |
--- a/components/safe_browsing_db/v4_database.cc |
+++ b/components/safe_browsing_db/v4_database.cc |
@@ -91,7 +91,8 @@ V4Database::V4Database( |
std::unique_ptr<StoreMap> store_map) |
: db_task_runner_(db_task_runner), |
store_map_(std::move(store_map)), |
- pending_store_updates_(0) { |
+ pending_store_updates_(0), |
+ weak_factory_on_io_(this) { |
DCHECK(db_task_runner->RunsTasksOnCurrentThread()); |
} |
@@ -100,6 +101,7 @@ void V4Database::Destroy(std::unique_ptr<V4Database> v4_database) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
V4Database* v4_database_raw = v4_database.release(); |
if (v4_database_raw) { |
+ v4_database_raw->weak_factory_on_io_.InvalidateWeakPtrs(); |
v4_database_raw->db_task_runner_->DeleteSoon(FROM_HERE, v4_database_raw); |
} |
} |
@@ -130,8 +132,9 @@ void V4Database::ApplyUpdate( |
if (old_store->state() != response->new_client_state()) { |
// A different state implies there are updates to process. |
pending_store_updates_++; |
- UpdatedStoreReadyCallback store_ready_callback = base::Bind( |
- &V4Database::UpdatedStoreReady, base::Unretained(this), identifier); |
+ UpdatedStoreReadyCallback store_ready_callback = |
+ base::Bind(&V4Database::UpdatedStoreReady, |
+ weak_factory_on_io_.GetWeakPtr(), identifier); |
db_task_runner_->PostTask( |
FROM_HERE, |
base::Bind(&V4Store::ApplyUpdate, base::Unretained(old_store.get()), |
@@ -220,9 +223,10 @@ void V4Database::VerifyChecksum( |
const scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner = |
base::ThreadTaskRunnerHandle::Get(); |
db_task_runner_->PostTask( |
- FROM_HERE, base::Bind(&V4Database::VerifyChecksumOnTaskRunner, |
- base::Unretained(this), callback_task_runner, |
- db_ready_for_updates_callback)); |
+ FROM_HERE, |
+ base::Bind(&V4Database::VerifyChecksumOnTaskRunner, |
+ weak_factory_on_io_.GetWeakPtr(), callback_task_runner, |
+ db_ready_for_updates_callback)); |
} |
void V4Database::VerifyChecksumOnTaskRunner( |