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

Side by Side Diff: chrome/browser/safe_browsing/safe_browsing_database.h

Issue 1673733002: Support new Safe Browsing list "goog-badresource-shavar" in SafeBrowsingDatabase. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 4 years, 10 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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #ifndef CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_DATABASE_H_ 5 #ifndef CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_DATABASE_H_
6 #define CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_DATABASE_H_ 6 #define CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_DATABASE_H_
7 7
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 // 163 //
164 // This function can ONLY be accessed from the creation thread. 164 // This function can ONLY be accessed from the creation thread.
165 virtual bool ContainsExtensionPrefixes( 165 virtual bool ContainsExtensionPrefixes(
166 const std::vector<SBPrefix>& prefixes, 166 const std::vector<SBPrefix>& prefixes,
167 std::vector<SBPrefix>* prefix_hits) = 0; 167 std::vector<SBPrefix>* prefix_hits) = 0;
168 168
169 // Returns true iff the given IP is currently on the csd malware IP blacklist. 169 // Returns true iff the given IP is currently on the csd malware IP blacklist.
170 // This function is safe to call from any thread. 170 // This function is safe to call from any thread.
171 virtual bool ContainsMalwareIP(const std::string& ip_address) = 0; 171 virtual bool ContainsMalwareIP(const std::string& ip_address) = 0;
172 172
173 // Populates |prefix_hits| with any prefixes in |prefixes| that have matches
174 // in the database. Returns true iff there were any matches.
175 //
176 // This function can ONLY by accessed from the creation thread.
177 virtual bool ContainsResourceUrlPrefixes(
178 const std::vector<SBPrefix>& prefixes,
179 std::vector<SBPrefix>* prefix_hits) = 0;
180
173 // A database transaction should look like: 181 // A database transaction should look like:
174 // 182 //
175 // std::vector<SBListChunkRanges> lists; 183 // std::vector<SBListChunkRanges> lists;
176 // if (db.UpdateStarted(&lists)) { 184 // if (db.UpdateStarted(&lists)) {
177 // // Do something with |lists|. 185 // // Do something with |lists|.
178 // 186 //
179 // // Process add/sub commands. 187 // // Process add/sub commands.
180 // db.InsertChunks(list_name, chunks); 188 // db.InsertChunks(list_name, chunks);
181 // 189 //
182 // // Process adddel/subdel commands. 190 // // Process adddel/subdel commands.
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 const base::FilePath& side_effect_free_whitelist_base_filename); 262 const base::FilePath& side_effect_free_whitelist_base_filename);
255 263
256 // Filename for the csd malware IP blacklist database. 264 // Filename for the csd malware IP blacklist database.
257 static base::FilePath IpBlacklistDBFilename( 265 static base::FilePath IpBlacklistDBFilename(
258 const base::FilePath& ip_blacklist_base_filename); 266 const base::FilePath& ip_blacklist_base_filename);
259 267
260 // Filename for the unwanted software blacklist database. 268 // Filename for the unwanted software blacklist database.
261 static base::FilePath UnwantedSoftwareDBFilename( 269 static base::FilePath UnwantedSoftwareDBFilename(
262 const base::FilePath& db_filename); 270 const base::FilePath& db_filename);
263 271
272 static base::FilePath ResourceBlacklistDBFilename(
273 const base::FilePath& db_filename);
274
264 // Get the prefixes matching the download |urls|. 275 // Get the prefixes matching the download |urls|.
265 static void GetDownloadUrlPrefixes(const std::vector<GURL>& urls, 276 static void GetDownloadUrlPrefixes(const std::vector<GURL>& urls,
266 std::vector<SBPrefix>* prefixes); 277 std::vector<SBPrefix>* prefixes);
267 278
268 // SafeBrowsing Database failure types for histogramming purposes. Explicitly 279 // SafeBrowsing Database failure types for histogramming purposes. Explicitly
269 // label new values and do not re-use old values. Also make sure to reflect 280 // label new values and do not re-use old values. Also make sure to reflect
270 // modifications made below in the SB2DatabaseFailure histogram enum. 281 // modifications made below in the SB2DatabaseFailure histogram enum.
271 enum FailureType { 282 enum FailureType {
272 FAILURE_DATABASE_CORRUPT = 0, 283 FAILURE_DATABASE_CORRUPT = 0,
273 FAILURE_DATABASE_CORRUPT_HANDLER = 1, 284 FAILURE_DATABASE_CORRUPT_HANDLER = 1,
(...skipping 23 matching lines...) Expand all
297 // Obsolete: FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_DELETE = 25, 308 // Obsolete: FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_DELETE = 25,
298 FAILURE_IP_BLACKLIST_UPDATE_BEGIN = 26, 309 FAILURE_IP_BLACKLIST_UPDATE_BEGIN = 26,
299 FAILURE_IP_BLACKLIST_UPDATE_FINISH = 27, 310 FAILURE_IP_BLACKLIST_UPDATE_FINISH = 27,
300 FAILURE_IP_BLACKLIST_UPDATE_INVALID = 28, 311 FAILURE_IP_BLACKLIST_UPDATE_INVALID = 28,
301 FAILURE_IP_BLACKLIST_DELETE = 29, 312 FAILURE_IP_BLACKLIST_DELETE = 29,
302 FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_BEGIN = 30, 313 FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_BEGIN = 30,
303 FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_FINISH = 31, 314 FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_FINISH = 31,
304 FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_READ = 32, 315 FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_READ = 32,
305 FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_WRITE = 33, 316 FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_WRITE = 33,
306 FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_DELETE = 34, 317 FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_DELETE = 34,
318 FAILURE_RESOURCE_BLACKLIST_UPDATE_BEGIN = 35,
319 FAILURE_RESOURCE_BLACKLIST_UPDATE_FINISH = 36,
320 FAILURE_RESOURCE_BLACKLIST_DELETE = 37,
307 321
308 // Memory space for histograms is determined by the max. ALWAYS 322 // Memory space for histograms is determined by the max. ALWAYS
309 // ADD NEW VALUES BEFORE THIS ONE. 323 // ADD NEW VALUES BEFORE THIS ONE.
310 FAILURE_DATABASE_MAX 324 FAILURE_DATABASE_MAX
311 }; 325 };
312 326
313 static void RecordFailure(FailureType failure_type); 327 static void RecordFailure(FailureType failure_type);
314 328
315 private: 329 private:
316 // The factory used to instantiate a SafeBrowsingDatabase object. 330 // The factory used to instantiate a SafeBrowsingDatabase object.
317 // Useful for tests, so they can provide their own implementation of 331 // Useful for tests, so they can provide their own implementation of
318 // SafeBrowsingDatabase. 332 // SafeBrowsingDatabase.
319 static SafeBrowsingDatabaseFactory* factory_; 333 static SafeBrowsingDatabaseFactory* factory_;
320 }; 334 };
321 335
322 class SafeBrowsingDatabaseNew : public SafeBrowsingDatabase { 336 class SafeBrowsingDatabaseNew : public SafeBrowsingDatabase {
323 public: 337 public:
324 // Create a database with the stores below. Takes ownership of all store 338 // Create a database with the stores below. Takes ownership of all store
325 // objects handed to this constructor. Ignores all future operations on lists 339 // objects handed to this constructor. Ignores all future operations on lists
326 // for which the store is initialized to NULL. 340 // for which the store is initialized to NULL.
327 SafeBrowsingDatabaseNew( 341 SafeBrowsingDatabaseNew(
328 const scoped_refptr<base::SequencedTaskRunner>& db_task_runner, 342 const scoped_refptr<base::SequencedTaskRunner>& db_task_runner,
329 SafeBrowsingStore* browse_store, 343 SafeBrowsingStore* browse_store,
330 SafeBrowsingStore* download_store, 344 SafeBrowsingStore* download_store,
331 SafeBrowsingStore* csd_whitelist_store, 345 SafeBrowsingStore* csd_whitelist_store,
332 SafeBrowsingStore* download_whitelist_store, 346 SafeBrowsingStore* download_whitelist_store,
333 SafeBrowsingStore* inclusion_whitelist_store, 347 SafeBrowsingStore* inclusion_whitelist_store,
334 SafeBrowsingStore* extension_blacklist_store, 348 SafeBrowsingStore* extension_blacklist_store,
335 SafeBrowsingStore* ip_blacklist_store, 349 SafeBrowsingStore* ip_blacklist_store,
336 SafeBrowsingStore* unwanted_software_store); 350 SafeBrowsingStore* unwanted_software_store,
351 SafeBrowsingStore* resource_blacklist_store);
337 352
338 ~SafeBrowsingDatabaseNew() override; 353 ~SafeBrowsingDatabaseNew() override;
339 354
340 // Implement SafeBrowsingDatabase interface. 355 // Implement SafeBrowsingDatabase interface.
341 void Init(const base::FilePath& filename) override; 356 void Init(const base::FilePath& filename) override;
342 bool ResetDatabase() override; 357 bool ResetDatabase() override;
343 bool ContainsBrowseUrl(const GURL& url, 358 bool ContainsBrowseUrl(const GURL& url,
344 std::vector<SBPrefix>* prefix_hits, 359 std::vector<SBPrefix>* prefix_hits,
345 std::vector<SBFullHashResult>* cache_hits) override; 360 std::vector<SBFullHashResult>* cache_hits) override;
346 bool ContainsBrowseHashes(const std::vector<SBFullHash>& full_hashes, 361 bool ContainsBrowseHashes(const std::vector<SBFullHash>& full_hashes,
347 std::vector<SBPrefix>* prefix_hits, 362 std::vector<SBPrefix>* prefix_hits,
348 std::vector<SBFullHashResult>* cache_hits) override; 363 std::vector<SBFullHashResult>* cache_hits) override;
349 bool ContainsUnwantedSoftwareUrl( 364 bool ContainsUnwantedSoftwareUrl(
350 const GURL& url, 365 const GURL& url,
351 std::vector<SBPrefix>* prefix_hits, 366 std::vector<SBPrefix>* prefix_hits,
352 std::vector<SBFullHashResult>* cache_hits) override; 367 std::vector<SBFullHashResult>* cache_hits) override;
353 bool ContainsUnwantedSoftwareHashes( 368 bool ContainsUnwantedSoftwareHashes(
354 const std::vector<SBFullHash>& full_hashes, 369 const std::vector<SBFullHash>& full_hashes,
355 std::vector<SBPrefix>* prefix_hits, 370 std::vector<SBPrefix>* prefix_hits,
356 std::vector<SBFullHashResult>* cache_hits) override; 371 std::vector<SBFullHashResult>* cache_hits) override;
357 bool ContainsDownloadUrlPrefixes(const std::vector<SBPrefix>& prefixes, 372 bool ContainsDownloadUrlPrefixes(const std::vector<SBPrefix>& prefixes,
358 std::vector<SBPrefix>* prefix_hits) override; 373 std::vector<SBPrefix>* prefix_hits) override;
359 bool ContainsCsdWhitelistedUrl(const GURL& url) override; 374 bool ContainsCsdWhitelistedUrl(const GURL& url) override;
360 bool ContainsDownloadWhitelistedUrl(const GURL& url) override; 375 bool ContainsDownloadWhitelistedUrl(const GURL& url) override;
361 bool ContainsDownloadWhitelistedString(const std::string& str) override; 376 bool ContainsDownloadWhitelistedString(const std::string& str) override;
362 bool ContainsInclusionWhitelistedUrl(const GURL& url) override; 377 bool ContainsInclusionWhitelistedUrl(const GURL& url) override;
363 bool ContainsExtensionPrefixes(const std::vector<SBPrefix>& prefixes, 378 bool ContainsExtensionPrefixes(const std::vector<SBPrefix>& prefixes,
364 std::vector<SBPrefix>* prefix_hits) override; 379 std::vector<SBPrefix>* prefix_hits) override;
365 bool ContainsMalwareIP(const std::string& ip_address) override; 380 bool ContainsMalwareIP(const std::string& ip_address) override;
381 bool ContainsResourceUrlPrefixes(const std::vector<SBPrefix>& prefixes,
382 std::vector<SBPrefix>* prefix_hits) override;
383
366 bool UpdateStarted(std::vector<SBListChunkRanges>* lists) override; 384 bool UpdateStarted(std::vector<SBListChunkRanges>* lists) override;
367 void InsertChunks( 385 void InsertChunks(
368 const std::string& list_name, 386 const std::string& list_name,
369 const std::vector<scoped_ptr<SBChunkData>>& chunks) override; 387 const std::vector<scoped_ptr<SBChunkData>>& chunks) override;
370 void DeleteChunks(const std::vector<SBChunkDelete>& chunk_deletes) override; 388 void DeleteChunks(const std::vector<SBChunkDelete>& chunk_deletes) override;
371 void UpdateFinished(bool update_succeeded) override; 389 void UpdateFinished(bool update_succeeded) override;
372 void CacheHashResults(const std::vector<SBPrefix>& prefixes, 390 void CacheHashResults(const std::vector<SBPrefix>& prefixes,
373 const std::vector<SBFullHashResult>& full_hits, 391 const std::vector<SBFullHashResult>& full_hits,
374 const base::TimeDelta& cache_lifetime) override; 392 const base::TimeDelta& cache_lifetime) override;
375 393
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 // whitelist chunks and full-length hashes. This list only contains 256 692 // whitelist chunks and full-length hashes. This list only contains 256
675 // bit hashes. 693 // bit hashes.
676 // - |download_whitelist_store_|: For the download whitelist chunks and 694 // - |download_whitelist_store_|: For the download whitelist chunks and
677 // full-length hashes. This list only contains 256 bit hashes. 695 // full-length hashes. This list only contains 256 bit hashes.
678 // - |inclusion_whitelist_store_|: For the inclusion whitelist. Same format 696 // - |inclusion_whitelist_store_|: For the inclusion whitelist. Same format
679 // as |download_whitelist_store_|. 697 // as |download_whitelist_store_|.
680 // - |extension_blacklist_store_|: For extension IDs. 698 // - |extension_blacklist_store_|: For extension IDs.
681 // - |ip_blacklist_store_|: For IP blacklist. 699 // - |ip_blacklist_store_|: For IP blacklist.
682 // - |unwanted_software_store_|: For unwanted software list (format 700 // - |unwanted_software_store_|: For unwanted software list (format
683 // identical to browsing lists). 701 // identical to browsing lists).
702 // - |resource_blacklist_store_|: For script resource list (format identical
703 // to browsing lists).
684 // 704 //
685 // The stores themselves will be modified throughout the existence of this 705 // The stores themselves will be modified throughout the existence of this
686 // database, but shouldn't ever be swapped out (hence the const scoped_ptr -- 706 // database, but shouldn't ever be swapped out (hence the const scoped_ptr --
687 // which could be swapped for C++11's std::optional when that's available). 707 // which could be swapped for C++11's std::optional when that's available).
688 // They are NonThreadSafe and should thus only be accessed on the database's 708 // They are NonThreadSafe and should thus only be accessed on the database's
689 // main thread as enforced by SafeBrowsingStoreFile's implementation. 709 // main thread as enforced by SafeBrowsingStoreFile's implementation.
690 const scoped_ptr<SafeBrowsingStore> browse_store_; 710 const scoped_ptr<SafeBrowsingStore> browse_store_;
691 const scoped_ptr<SafeBrowsingStore> download_store_; 711 const scoped_ptr<SafeBrowsingStore> download_store_;
692 const scoped_ptr<SafeBrowsingStore> csd_whitelist_store_; 712 const scoped_ptr<SafeBrowsingStore> csd_whitelist_store_;
693 const scoped_ptr<SafeBrowsingStore> download_whitelist_store_; 713 const scoped_ptr<SafeBrowsingStore> download_whitelist_store_;
694 const scoped_ptr<SafeBrowsingStore> inclusion_whitelist_store_; 714 const scoped_ptr<SafeBrowsingStore> inclusion_whitelist_store_;
695 const scoped_ptr<SafeBrowsingStore> extension_blacklist_store_; 715 const scoped_ptr<SafeBrowsingStore> extension_blacklist_store_;
696 const scoped_ptr<SafeBrowsingStore> ip_blacklist_store_; 716 const scoped_ptr<SafeBrowsingStore> ip_blacklist_store_;
697 const scoped_ptr<SafeBrowsingStore> unwanted_software_store_; 717 const scoped_ptr<SafeBrowsingStore> unwanted_software_store_;
718 const scoped_ptr<SafeBrowsingStore> resource_blacklist_store_;
698 719
699 // Used to schedule resetting the database because of corruption. This factory 720 // Used to schedule resetting the database because of corruption. This factory
700 // and the WeakPtrs it issues should only be used on the database's main 721 // and the WeakPtrs it issues should only be used on the database's main
701 // thread. 722 // thread.
702 base::WeakPtrFactory<SafeBrowsingDatabaseNew> reset_factory_; 723 base::WeakPtrFactory<SafeBrowsingDatabaseNew> reset_factory_;
703 }; 724 };
704 725
705 } // namespace safe_browsing 726 } // namespace safe_browsing
706 727
707 #endif // CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_DATABASE_H_ 728 #endif // CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_DATABASE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698