OLD | NEW |
---|---|
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 // This file should not be build on Android but is currently getting built. | 5 // This file should not be build on Android but is currently getting built. |
6 // TODO(vakh): Fix that: http://crbug.com/621647 | 6 // TODO(vakh): Fix that: http://crbug.com/621647 |
7 | 7 |
8 #include "components/safe_browsing_db/v4_local_database_manager.h" | 8 #include "components/safe_browsing_db/v4_local_database_manager.h" |
9 | 9 |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/callback.h" | 12 #include "base/callback.h" |
13 #include "content/public/browser/browser_thread.h" | 13 #include "content/public/browser/browser_thread.h" |
14 | 14 |
15 using content::BrowserThread; | 15 using content::BrowserThread; |
16 | 16 |
17 namespace safe_browsing { | 17 namespace safe_browsing { |
18 | 18 |
19 namespace { | 19 namespace { |
20 | 20 |
21 // TODO(vakh): Implement this to populate the map appopriately. | 21 // TODO(vakh): Implement this to populate the vector appopriately. |
22 // Filed as http://crbug.com/608075 | 22 // Filed as http://crbug.com/608075 |
23 StoreFileNameMap GetStoreFileNameMap() { | 23 StoreIdAndFileNames GetStoreIdAndFileNames() { |
24 return StoreFileNameMap({{GetUrlMalwareId(), "UrlMalware.store"}, | 24 return StoreIdAndFileNames( |
25 {GetUrlSocEngId(), "UrlSoceng.store"}}); | 25 {StoreIdAndFileName(GetUrlMalwareId(), "UrlMalware.store"), |
26 StoreIdAndFileName(GetUrlSocEngId(), "UrlSoceng.store")}); | |
26 } | 27 } |
27 | 28 |
28 } // namespace | 29 } // namespace |
29 | 30 |
30 V4LocalDatabaseManager::V4LocalDatabaseManager(const base::FilePath& base_path) | 31 V4LocalDatabaseManager::V4LocalDatabaseManager(const base::FilePath& base_path) |
31 : base_path_(base_path), enabled_(false) { | 32 : base_path_(base_path), |
33 enabled_(false), | |
34 store_id_file_names_(GetStoreIdAndFileNames()) { | |
32 DCHECK(!base_path_.empty()); | 35 DCHECK(!base_path_.empty()); |
36 DCHECK(!store_id_file_names_.empty()); | |
37 | |
33 DVLOG(1) << "V4LocalDatabaseManager::V4LocalDatabaseManager: " | 38 DVLOG(1) << "V4LocalDatabaseManager::V4LocalDatabaseManager: " |
34 << "base_path_: " << base_path_.AsUTF8Unsafe(); | 39 << "base_path_: " << base_path_.AsUTF8Unsafe(); |
35 } | 40 } |
36 | 41 |
37 V4LocalDatabaseManager::~V4LocalDatabaseManager() { | 42 V4LocalDatabaseManager::~V4LocalDatabaseManager() { |
38 DCHECK(!enabled_); | 43 DCHECK(!enabled_); |
39 } | 44 } |
40 | 45 |
41 bool V4LocalDatabaseManager::IsSupported() const { | 46 bool V4LocalDatabaseManager::IsSupported() const { |
42 return true; | 47 return true; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
133 return true; | 138 return true; |
134 } | 139 } |
135 | 140 |
136 bool V4LocalDatabaseManager::CheckBrowseUrl(const GURL& url, Client* client) { | 141 bool V4LocalDatabaseManager::CheckBrowseUrl(const GURL& url, Client* client) { |
137 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 142 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
138 if (!enabled_ || !CanCheckUrl(url)) { | 143 if (!enabled_ || !CanCheckUrl(url)) { |
139 return true; | 144 return true; |
140 } | 145 } |
141 | 146 |
142 if (v4_database_) { | 147 if (v4_database_) { |
143 base::hash_set<FullHash> full_hashes; | 148 std::unordered_set<FullHash> full_hashes; |
144 V4ProtocolManagerUtil::UrlToFullHashes(url, &full_hashes); | 149 V4ProtocolManagerUtil::UrlToFullHashes(url, &full_hashes); |
145 | 150 |
146 base::hash_set<UpdateListIdentifier> stores_to_look( | 151 std::unordered_set<UpdateListIdentifier> stores_to_look( |
147 {GetUrlMalwareId(), GetUrlSocEngId()}); | 152 {GetUrlMalwareId(), GetUrlSocEngId()}); |
148 base::hash_set<HashPrefix> matched_hash_prefixes; | 153 std::unordered_set<HashPrefix> matched_hash_prefixes; |
149 base::hash_set<UpdateListIdentifier> matched_stores; | 154 std::unordered_set<UpdateListIdentifier> matched_stores; |
150 StoreAndHashPrefixes matched_store_and_full_hashes; | 155 StoreAndHashPrefixes matched_store_and_full_hashes; |
151 FullHashToStoreAndHashPrefixesMap full_hash_to_store_and_hash_prefixes; | 156 FullHashToStoreAndHashPrefixesMap full_hash_to_store_and_hash_prefixes; |
152 for (const auto& full_hash : full_hashes) { | 157 for (const auto& full_hash : full_hashes) { |
153 matched_store_and_full_hashes.clear(); | 158 matched_store_and_full_hashes.clear(); |
154 v4_database_->GetStoresMatchingFullHash(full_hash, stores_to_look, | 159 v4_database_->GetStoresMatchingFullHash(full_hash, stores_to_look, |
155 &matched_store_and_full_hashes); | 160 &matched_store_and_full_hashes); |
156 if (!matched_store_and_full_hashes.empty()) { | 161 if (!matched_store_and_full_hashes.empty()) { |
157 full_hash_to_store_and_hash_prefixes[full_hash] = | 162 full_hash_to_store_and_hash_prefixes[full_hash] = |
158 matched_store_and_full_hashes; | 163 matched_store_and_full_hashes; |
159 } | 164 } |
(...skipping 30 matching lines...) Expand all Loading... | |
190 | 195 |
191 void V4LocalDatabaseManager::StartOnIOThread( | 196 void V4LocalDatabaseManager::StartOnIOThread( |
192 net::URLRequestContextGetter* request_context_getter, | 197 net::URLRequestContextGetter* request_context_getter, |
193 const V4ProtocolConfig& config) { | 198 const V4ProtocolConfig& config) { |
194 SafeBrowsingDatabaseManager::StartOnIOThread(request_context_getter, config); | 199 SafeBrowsingDatabaseManager::StartOnIOThread(request_context_getter, config); |
195 | 200 |
196 db_updated_callback_ = base::Bind(&V4LocalDatabaseManager::DatabaseUpdated, | 201 db_updated_callback_ = base::Bind(&V4LocalDatabaseManager::DatabaseUpdated, |
197 base::Unretained(this)); | 202 base::Unretained(this)); |
198 | 203 |
199 SetupUpdateProtocolManager(request_context_getter, config); | 204 SetupUpdateProtocolManager(request_context_getter, config); |
200 | |
201 SetupDatabase(); | 205 SetupDatabase(); |
202 | 206 |
203 enabled_ = true; | 207 enabled_ = true; |
204 } | 208 } |
205 | 209 |
206 void V4LocalDatabaseManager::SetupUpdateProtocolManager( | 210 void V4LocalDatabaseManager::SetupUpdateProtocolManager( |
207 net::URLRequestContextGetter* request_context_getter, | 211 net::URLRequestContextGetter* request_context_getter, |
208 const V4ProtocolConfig& config) { | 212 const V4ProtocolConfig& config) { |
209 V4UpdateCallback callback = base::Bind( | 213 V4UpdateCallback callback = base::Bind( |
210 &V4LocalDatabaseManager::UpdateRequestCompleted, base::Unretained(this)); | 214 &V4LocalDatabaseManager::UpdateRequestCompleted, base::Unretained(this)); |
211 | 215 |
212 v4_update_protocol_manager_ = | 216 v4_update_protocol_manager_ = |
213 V4UpdateProtocolManager::Create(request_context_getter, config, callback); | 217 V4UpdateProtocolManager::Create(request_context_getter, config, callback); |
214 } | 218 } |
215 | 219 |
216 void V4LocalDatabaseManager::SetupDatabase() { | 220 void V4LocalDatabaseManager::SetupDatabase() { |
217 DCHECK(!base_path_.empty()); | 221 DCHECK(!base_path_.empty()); |
222 DCHECK(!store_id_file_names_.empty()); | |
kcarattini
2016/09/18 12:20:46
Just checking that this list includes API checks a
vakh (use Gerrit instead)
2016/09/19 17:03:05
SafeBrowsingDatabaseManager includes API checks. V
kcarattini
2016/09/26 00:23:34
So that means that until it's added to V$, API che
vakh (use Gerrit instead)
2016/09/26 06:09:55
That's OK. Other things are sill using PVer3 but I
| |
218 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 223 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
219 | 224 |
220 // Only get a new task runner if there isn't one already. If the service has | 225 // Only get a new task runner if there isn't one already. If the service has |
221 // previously been started and stopped, a task runner could already exist. | 226 // previously been started and stopped, a task runner could already exist. |
222 if (!task_runner_) { | 227 if (!task_runner_) { |
223 base::SequencedWorkerPool* pool = BrowserThread::GetBlockingPool(); | 228 base::SequencedWorkerPool* pool = BrowserThread::GetBlockingPool(); |
224 task_runner_ = pool->GetSequencedTaskRunnerWithShutdownBehavior( | 229 task_runner_ = pool->GetSequencedTaskRunnerWithShutdownBehavior( |
225 pool->GetSequenceToken(), base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); | 230 pool->GetSequenceToken(), base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
226 } | 231 } |
227 | 232 |
228 // Do not create the database on the IO thread since this may be an expensive | 233 // Do not create the database on the IO thread since this may be an expensive |
229 // operation. Instead, do that on the task_runner and when the new database | 234 // operation. Instead, do that on the task_runner and when the new database |
230 // has been created, swap it out on the IO thread. | 235 // has been created, swap it out on the IO thread. |
231 StoreFileNameMap store_file_name_map = GetStoreFileNameMap(); | |
232 DCHECK(!store_file_name_map.empty()); | |
233 NewDatabaseReadyCallback db_ready_callback = base::Bind( | 236 NewDatabaseReadyCallback db_ready_callback = base::Bind( |
234 &V4LocalDatabaseManager::DatabaseReady, base::Unretained(this)); | 237 &V4LocalDatabaseManager::DatabaseReady, base::Unretained(this)); |
235 V4Database::Create(task_runner_, base_path_, store_file_name_map, | 238 V4Database::Create(task_runner_, base_path_, store_id_file_names_, |
236 db_ready_callback); | 239 db_ready_callback); |
237 } | 240 } |
238 | 241 |
239 void V4LocalDatabaseManager::DatabaseReady( | 242 void V4LocalDatabaseManager::DatabaseReady( |
240 std::unique_ptr<V4Database> v4_database) { | 243 std::unique_ptr<V4Database> v4_database) { |
241 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 244 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
242 | 245 |
243 // The following check is needed because it is possible that by the time the | 246 // The following check is needed because it is possible that by the time the |
244 // database is ready, StopOnIOThread has been called. | 247 // database is ready, StopOnIOThread has been called. |
245 if (enabled_) { | 248 if (enabled_) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
280 db_updated_callback_); | 283 db_updated_callback_); |
281 } | 284 } |
282 | 285 |
283 void V4LocalDatabaseManager::DatabaseUpdated() { | 286 void V4LocalDatabaseManager::DatabaseUpdated() { |
284 if (enabled_) { | 287 if (enabled_) { |
285 v4_update_protocol_manager_->ScheduleNextUpdate( | 288 v4_update_protocol_manager_->ScheduleNextUpdate( |
286 v4_database_->GetStoreStateMap()); | 289 v4_database_->GetStoreStateMap()); |
287 } | 290 } |
288 } | 291 } |
289 | 292 |
293 std::unordered_set<UpdateListIdentifier> | |
294 V4LocalDatabaseManager::GetStoresForFullHashRequests() { | |
295 std::unordered_set<UpdateListIdentifier> stores_for_full_hash; | |
296 for (auto it : store_id_file_names_) { | |
297 stores_for_full_hash.insert(it.list_id); | |
298 } | |
299 return stores_for_full_hash; | |
300 } | |
301 | |
290 } // namespace safe_browsing | 302 } // namespace safe_browsing |
OLD | NEW |