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

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

Issue 814993003: Finalize thread-safety design for SafeBrowsingDatabase. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@a5_threadSafeStoreManager
Patch Set: fix compile post-merge Created 5 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
« no previous file with comments | « no previous file | chrome/browser/safe_browsing/safe_browsing_database.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 DISALLOW_COPY_AND_ASSIGN(ThreadSafeStateManager); 448 DISALLOW_COPY_AND_ASSIGN(ThreadSafeStateManager);
449 }; 449 };
450 450
451 // Forward the above inner-definitions to alleviate some verbosity in the 451 // Forward the above inner-definitions to alleviate some verbosity in the
452 // impl. 452 // impl.
453 using SBWhitelistId = ThreadSafeStateManager::SBWhitelistId; 453 using SBWhitelistId = ThreadSafeStateManager::SBWhitelistId;
454 using PrefixSetId = ThreadSafeStateManager::PrefixSetId; 454 using PrefixSetId = ThreadSafeStateManager::PrefixSetId;
455 using ReadTransaction = ThreadSafeStateManager::ReadTransaction; 455 using ReadTransaction = ThreadSafeStateManager::ReadTransaction;
456 using WriteTransaction = ThreadSafeStateManager::WriteTransaction; 456 using WriteTransaction = ThreadSafeStateManager::WriteTransaction;
457 457
458 // Manages the non-thread safe (i.e. only to be accessed to the database's
459 // main thread) state of this class.
460 class DatabaseStateManager {
461 public:
462 explicit DatabaseStateManager(const base::ThreadChecker& thread_checker)
463 : thread_checker_(thread_checker),
464 corruption_detected_(false),
465 change_detected_(false) {}
466
467 void init_filename_base(const base::FilePath& filename_base) {
468 DCHECK(thread_checker_.CalledOnValidThread());
469 DCHECK(filename_base_.empty()) << "filename already initialized";
470 filename_base_ = filename_base;
471 }
472
473 const base::FilePath& filename_base() {
474 DCHECK(thread_checker_.CalledOnValidThread());
475 return filename_base_;
476 }
477
478 void set_corruption_detected() {
479 DCHECK(thread_checker_.CalledOnValidThread());
480 corruption_detected_ = true;
481 }
482
483 void reset_corruption_detected() {
484 DCHECK(thread_checker_.CalledOnValidThread());
485 corruption_detected_ = false;
486 }
487
488 bool corruption_detected() {
489 DCHECK(thread_checker_.CalledOnValidThread());
490 return corruption_detected_;
491 }
492
493 void set_change_detected() {
494 DCHECK(thread_checker_.CalledOnValidThread());
495 change_detected_ = true;
496 }
497
498 void reset_change_detected() {
499 DCHECK(thread_checker_.CalledOnValidThread());
500 change_detected_ = false;
501 }
502
503 bool change_detected() {
504 DCHECK(thread_checker_.CalledOnValidThread());
505 return change_detected_;
506 }
507
508 private:
509 // The SafeBrowsingDatabase's ThreadChecker, used to verify that this class'
510 // state is only ever accessed from the database's main thread.
511 const base::ThreadChecker& thread_checker_;
512
513 // The base filename passed to Init(), used to generate the store and prefix
514 // set filenames used to store data on disk.
515 base::FilePath filename_base_;
516
517 // Set if corruption is detected during the course of an update.
518 // Causes the update functions to fail with no side effects, until
519 // the next call to |UpdateStarted()|.
520 bool corruption_detected_;
521
522 // Set to true if any chunks are added or deleted during an update.
523 // Used to optimize away database update.
524 bool change_detected_;
525
526 DISALLOW_COPY_AND_ASSIGN(DatabaseStateManager);
527 };
528
458 bool PrefixSetContainsUrl(const GURL& url, 529 bool PrefixSetContainsUrl(const GURL& url,
459 PrefixSetId prefix_set_id, 530 PrefixSetId prefix_set_id,
460 std::vector<SBPrefix>* prefix_hits, 531 std::vector<SBPrefix>* prefix_hits,
461 std::vector<SBFullHashResult>* cache_hits); 532 std::vector<SBFullHashResult>* cache_hits);
462 533
463 // Exposed for testing of PrefixSetContainsUrlHashes() on the 534 // Exposed for testing of PrefixSetContainsUrlHashes() on the
464 // PrefixSet backing kMalwareList. 535 // PrefixSet backing kMalwareList.
465 bool ContainsBrowseUrlHashesForTesting( 536 bool ContainsBrowseUrlHashesForTesting(
466 const std::vector<SBFullHash>& full_hashes, 537 const std::vector<SBFullHash>& full_hashes,
467 std::vector<SBPrefix>* prefix_hits, 538 std::vector<SBPrefix>* prefix_hits,
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 PrefixGetHashCache* GetUnsynchronizedPrefixGetHashCacheForTesting(); 632 PrefixGetHashCache* GetUnsynchronizedPrefixGetHashCacheForTesting();
562 633
563 // Records a file size histogram for the database or PrefixSet backed by 634 // Records a file size histogram for the database or PrefixSet backed by
564 // |filename|. 635 // |filename|.
565 void RecordFileSizeHistogram(const base::FilePath& file_path); 636 void RecordFileSizeHistogram(const base::FilePath& file_path);
566 637
567 base::ThreadChecker thread_checker_; 638 base::ThreadChecker thread_checker_;
568 639
569 ThreadSafeStateManager state_manager_; 640 ThreadSafeStateManager state_manager_;
570 641
571 // The base filename passed to Init(), used to generate the store and prefix 642 DatabaseStateManager db_state_manager_;
572 // set filenames used to store data on disk.
573 base::FilePath filename_base_;
574 643
575 // Underlying persistent store for chunk data. 644 // Underlying persistent stores for chunk data:
576 // For browsing related (phishing and malware URLs) chunks and prefixes. 645 // - |browse_store_|: For browsing related (phishing and malware URLs)
577 scoped_ptr<SafeBrowsingStore> browse_store_; 646 // chunks and prefixes.
647 // - |download_store_|: For download related (download URL and binary hash)
648 // chunks and prefixes.
649 // - |csd_whitelist_store_|: For the client-side phishing detection
650 // whitelist chunks and full-length hashes. This list only contains 256
651 // bit hashes.
652 // - |download_whitelist_store_|: For the download whitelist chunks and
653 // full-length hashes. This list only contains 256 bit hashes.
654 // - |inclusion_whitelist_store_|: For the inclusion whitelist. Same format
655 // as |download_whitelist_store_|.
656 // - |extension_blacklist_store_|: For extension IDs.
657 // - |side_effect_free_whitelist_store_|: For side-effect free whitelist.
658 // - |ip_blacklist_store_|: For IP blacklist.
659 // - |unwanted_software_store_|: For unwanted software list (format
660 // identical to browsing lists).
661 //
662 // The stores themselves will be modified throughout the existence of this
663 // database, but shouldn't ever be swapped out (hence the const scoped_ptr --
664 // which could be swapped for C++11's std::optional when that's available).
665 // They are NonThreadSafe and should thus only be accessed on the database's
666 // main thread as enforced by SafeBrowsingStoreFile's implementation.
667 const scoped_ptr<SafeBrowsingStore> browse_store_;
668 const scoped_ptr<SafeBrowsingStore> download_store_;
669 const scoped_ptr<SafeBrowsingStore> csd_whitelist_store_;
670 const scoped_ptr<SafeBrowsingStore> download_whitelist_store_;
671 const scoped_ptr<SafeBrowsingStore> inclusion_whitelist_store_;
672 const scoped_ptr<SafeBrowsingStore> extension_blacklist_store_;
673 const scoped_ptr<SafeBrowsingStore> side_effect_free_whitelist_store_;
674 const scoped_ptr<SafeBrowsingStore> ip_blacklist_store_;
675 const scoped_ptr<SafeBrowsingStore> unwanted_software_store_;
578 676
579 // For download related (download URL and binary hash) chunks and prefixes. 677 // Used to schedule resetting the database because of corruption. This factory
580 scoped_ptr<SafeBrowsingStore> download_store_; 678 // and the WeakPtrs it issues should only be used on the database's main
581 679 // thread.
582 // For the client-side phishing detection whitelist chunks and full-length
583 // hashes. This list only contains 256 bit hashes.
584 scoped_ptr<SafeBrowsingStore> csd_whitelist_store_;
585
586 // For the download whitelist chunks and full-length hashes. This list only
587 // contains 256 bit hashes.
588 scoped_ptr<SafeBrowsingStore> download_whitelist_store_;
589
590 // For the off-domain inclusion whitelist chunks and full-length hashes. This
591 // list only contains 256 bit hashes.
592 scoped_ptr<SafeBrowsingStore> inclusion_whitelist_store_;
593
594 // For extension IDs.
595 scoped_ptr<SafeBrowsingStore> extension_blacklist_store_;
596
597 // For side-effect free whitelist.
598 scoped_ptr<SafeBrowsingStore> side_effect_free_whitelist_store_;
599
600 // For IP blacklist.
601 scoped_ptr<SafeBrowsingStore> ip_blacklist_store_;
602
603 // For unwanted software list.
604 scoped_ptr<SafeBrowsingStore> unwanted_software_store_;
605
606 // Set if corruption is detected during the course of an update.
607 // Causes the update functions to fail with no side effects, until
608 // the next call to |UpdateStarted()|.
609 bool corruption_detected_;
610
611 // Set to true if any chunks are added or deleted during an update.
612 // Used to optimize away database update.
613 bool change_detected_;
614
615 // Used to schedule resetting the database because of corruption.
616 base::WeakPtrFactory<SafeBrowsingDatabaseNew> reset_factory_; 680 base::WeakPtrFactory<SafeBrowsingDatabaseNew> reset_factory_;
617 }; 681 };
618 682
619 #endif // CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_DATABASE_H_ 683 #endif // CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_DATABASE_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/safe_browsing/safe_browsing_database.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698