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

Side by Side Diff: components/safe_browsing_db/v4_database.cc

Issue 2649643002: [S] Use a weak_factory for V4Database callbacks + test (Closed)
Patch Set: Nit: s/weak_factory_/weak_factory_on_io_ Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <memory> 5 #include <memory>
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/debug/leak_annotations.h" 8 #include "base/debug/leak_annotations.h"
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 84
85 UMA_HISTOGRAM_TIMES("SafeBrowsing.V4DatabaseOpen.Time", 85 UMA_HISTOGRAM_TIMES("SafeBrowsing.V4DatabaseOpen.Time",
86 TimeTicks::Now() - create_start_time); 86 TimeTicks::Now() - create_start_time);
87 } 87 }
88 88
89 V4Database::V4Database( 89 V4Database::V4Database(
90 const scoped_refptr<base::SequencedTaskRunner>& db_task_runner, 90 const scoped_refptr<base::SequencedTaskRunner>& db_task_runner,
91 std::unique_ptr<StoreMap> store_map) 91 std::unique_ptr<StoreMap> store_map)
92 : db_task_runner_(db_task_runner), 92 : db_task_runner_(db_task_runner),
93 store_map_(std::move(store_map)), 93 store_map_(std::move(store_map)),
94 pending_store_updates_(0) { 94 pending_store_updates_(0),
95 weak_factory_on_io_(this) {
95 DCHECK(db_task_runner->RunsTasksOnCurrentThread()); 96 DCHECK(db_task_runner->RunsTasksOnCurrentThread());
96 } 97 }
97 98
98 // static 99 // static
99 void V4Database::Destroy(std::unique_ptr<V4Database> v4_database) { 100 void V4Database::Destroy(std::unique_ptr<V4Database> v4_database) {
100 DCHECK_CURRENTLY_ON(BrowserThread::IO); 101 DCHECK_CURRENTLY_ON(BrowserThread::IO);
101 V4Database* v4_database_raw = v4_database.release(); 102 V4Database* v4_database_raw = v4_database.release();
102 if (v4_database_raw) { 103 if (v4_database_raw) {
104 v4_database_raw->weak_factory_on_io_.InvalidateWeakPtrs();
103 v4_database_raw->db_task_runner_->DeleteSoon(FROM_HERE, v4_database_raw); 105 v4_database_raw->db_task_runner_->DeleteSoon(FROM_HERE, v4_database_raw);
104 } 106 }
105 } 107 }
106 108
107 V4Database::~V4Database() { 109 V4Database::~V4Database() {
108 DCHECK(db_task_runner_->RunsTasksOnCurrentThread()); 110 DCHECK(db_task_runner_->RunsTasksOnCurrentThread());
109 } 111 }
110 112
111 void V4Database::ApplyUpdate( 113 void V4Database::ApplyUpdate(
112 std::unique_ptr<ParsedServerResponse> parsed_server_response, 114 std::unique_ptr<ParsedServerResponse> parsed_server_response,
(...skipping 10 matching lines...) Expand all
123 base::ThreadTaskRunnerHandle::Get(); 125 base::ThreadTaskRunnerHandle::Get();
124 for (std::unique_ptr<ListUpdateResponse>& response : 126 for (std::unique_ptr<ListUpdateResponse>& response :
125 *parsed_server_response) { 127 *parsed_server_response) {
126 ListIdentifier identifier(*response); 128 ListIdentifier identifier(*response);
127 StoreMap::const_iterator iter = store_map_->find(identifier); 129 StoreMap::const_iterator iter = store_map_->find(identifier);
128 if (iter != store_map_->end()) { 130 if (iter != store_map_->end()) {
129 const std::unique_ptr<V4Store>& old_store = iter->second; 131 const std::unique_ptr<V4Store>& old_store = iter->second;
130 if (old_store->state() != response->new_client_state()) { 132 if (old_store->state() != response->new_client_state()) {
131 // A different state implies there are updates to process. 133 // A different state implies there are updates to process.
132 pending_store_updates_++; 134 pending_store_updates_++;
133 UpdatedStoreReadyCallback store_ready_callback = base::Bind( 135 UpdatedStoreReadyCallback store_ready_callback =
134 &V4Database::UpdatedStoreReady, base::Unretained(this), identifier); 136 base::Bind(&V4Database::UpdatedStoreReady,
137 weak_factory_on_io_.GetWeakPtr(), identifier);
135 db_task_runner_->PostTask( 138 db_task_runner_->PostTask(
136 FROM_HERE, 139 FROM_HERE,
137 base::Bind(&V4Store::ApplyUpdate, base::Unretained(old_store.get()), 140 base::Bind(&V4Store::ApplyUpdate, base::Unretained(old_store.get()),
138 base::Passed(std::move(response)), current_task_runner, 141 base::Passed(std::move(response)), current_task_runner,
139 store_ready_callback)); 142 store_ready_callback));
140 } 143 }
141 } else { 144 } else {
142 NOTREACHED() << "Got update for unexpected identifier: " << identifier; 145 NOTREACHED() << "Got update for unexpected identifier: " << identifier;
143 } 146 }
144 } 147 }
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 } 216 }
214 } 217 }
215 218
216 void V4Database::VerifyChecksum( 219 void V4Database::VerifyChecksum(
217 DatabaseReadyForUpdatesCallback db_ready_for_updates_callback) { 220 DatabaseReadyForUpdatesCallback db_ready_for_updates_callback) {
218 DCHECK_CURRENTLY_ON(BrowserThread::IO); 221 DCHECK_CURRENTLY_ON(BrowserThread::IO);
219 // TODO(vakh): Consider using PostTaskAndReply instead. 222 // TODO(vakh): Consider using PostTaskAndReply instead.
220 const scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner = 223 const scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner =
221 base::ThreadTaskRunnerHandle::Get(); 224 base::ThreadTaskRunnerHandle::Get();
222 db_task_runner_->PostTask( 225 db_task_runner_->PostTask(
223 FROM_HERE, base::Bind(&V4Database::VerifyChecksumOnTaskRunner, 226 FROM_HERE,
224 base::Unretained(this), callback_task_runner, 227 base::Bind(&V4Database::VerifyChecksumOnTaskRunner,
225 db_ready_for_updates_callback)); 228 weak_factory_on_io_.GetWeakPtr(), callback_task_runner,
229 db_ready_for_updates_callback));
226 } 230 }
227 231
228 void V4Database::VerifyChecksumOnTaskRunner( 232 void V4Database::VerifyChecksumOnTaskRunner(
229 const scoped_refptr<base::SingleThreadTaskRunner>& callback_task_runner, 233 const scoped_refptr<base::SingleThreadTaskRunner>& callback_task_runner,
230 DatabaseReadyForUpdatesCallback db_ready_for_updates_callback) { 234 DatabaseReadyForUpdatesCallback db_ready_for_updates_callback) {
231 std::vector<ListIdentifier> stores_to_reset; 235 std::vector<ListIdentifier> stores_to_reset;
232 for (const auto& store_map_iter : *store_map_) { 236 for (const auto& store_map_iter : *store_map_) {
233 if (!store_map_iter.second->VerifyChecksum()) { 237 if (!store_map_iter.second->VerifyChecksum()) {
234 stores_to_reset.push_back(store_map_iter.first); 238 stores_to_reset.push_back(store_map_iter.first);
235 } 239 }
(...skipping 22 matching lines...) Expand all
258 filename_(filename), 262 filename_(filename),
259 list_id_(list_id), 263 list_id_(list_id),
260 sb_threat_type_(sb_threat_type) { 264 sb_threat_type_(sb_threat_type) {
261 DCHECK(!fetch_updates_ || !filename_.empty()); 265 DCHECK(!fetch_updates_ || !filename_.empty());
262 DCHECK_NE(SB_THREAT_TYPE_SAFE, sb_threat_type_); 266 DCHECK_NE(SB_THREAT_TYPE_SAFE, sb_threat_type_);
263 } 267 }
264 268
265 ListInfo::~ListInfo() {} 269 ListInfo::~ListInfo() {}
266 270
267 } // namespace safe_browsing 271 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « components/safe_browsing_db/v4_database.h ('k') | components/safe_browsing_db/v4_database_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698