Index: chrome/browser/safe_browsing/local_database_manager.h |
diff --git a/chrome/browser/safe_browsing/database_manager.h b/chrome/browser/safe_browsing/local_database_manager.h |
similarity index 69% |
copy from chrome/browser/safe_browsing/database_manager.h |
copy to chrome/browser/safe_browsing/local_database_manager.h |
index 3b0984d7ba9c0d07069ea23ec4caa8db8d4ff236..b55c98ce2c8bd12dd468493bb54750c04b71046b 100644 |
--- a/chrome/browser/safe_browsing/database_manager.h |
+++ b/chrome/browser/safe_browsing/local_database_manager.h |
@@ -2,11 +2,11 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
// |
-// The Safe Browsing service is responsible for downloading anti-phishing and |
-// anti-malware tables and checking urls against them. |
+// Safe Browsing Database Manager implementation that manages a local |
+// database. This is used by Desktop Chromium. |
-#ifndef CHROME_BROWSER_SAFE_BROWSING_DATABASE_MANAGER_H_ |
-#define CHROME_BROWSER_SAFE_BROWSING_DATABASE_MANAGER_H_ |
+#ifndef CHROME_BROWSER_SAFE_BROWSING_LOCAL_DATABASE_MANAGER_H_ |
+#define CHROME_BROWSER_SAFE_BROWSING_LOCAL_DATABASE_MANAGER_H_ |
#include <deque> |
#include <map> |
@@ -18,8 +18,10 @@ |
#include "base/containers/hash_tables.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/memory/weak_ptr.h" |
#include "base/synchronization/lock.h" |
#include "base/time/time.h" |
+#include "chrome/browser/safe_browsing/database_manager.h" |
#include "chrome/browser/safe_browsing/protocol_manager.h" |
#include "chrome/browser/safe_browsing/safe_browsing_util.h" |
#include "url/gurl.h" |
@@ -37,13 +39,13 @@ class ClientSideDetectionService; |
class DownloadProtectionService; |
} |
+// Implemetation that manages a local database on disk. |
+// |
// Construction needs to happen on the main thread. |
-class SafeBrowsingDatabaseManager |
- : public base::RefCountedThreadSafe<SafeBrowsingDatabaseManager>, |
+class LocalSafeBrowsingDatabaseManager |
+ : public SafeBrowsingDatabaseManager, |
public SafeBrowsingProtocolManagerDelegate { |
public: |
- class Client; |
- |
// Bundle of SafeBrowsing state while performing a URL or hash prefix check. |
struct SafeBrowsingCheck { |
// |check_type| should correspond to the type of item that is being |
@@ -67,7 +69,7 @@ class SafeBrowsingDatabaseManager |
std::vector<SBFullHash> full_hashes; |
std::vector<SBThreatType> full_hash_results; |
- Client* client; |
+ SafeBrowsingDatabaseManager::Client* client; |
bool need_get_hash; |
base::TimeTicks start; // When check was sent to SB service. |
safe_browsing_util::ListType check_type; // See comment in constructor. |
@@ -75,133 +77,66 @@ class SafeBrowsingDatabaseManager |
std::vector<SBPrefix> prefix_hits; |
std::vector<SBFullHashResult> cache_hits; |
+ // Invoke one of client's callbacks with these results. |
+ void OnSafeBrowsingResult(); |
+ |
// Vends weak pointers for async callbacks on the IO thread, such as |
// timeout checks and replies from checks performed on the SB task runner. |
// TODO(lzheng): We should consider to use this time out check |
// for browsing too (instead of implementing in |
// safe_browsing_resource_handler.cc). |
- scoped_ptr<base::WeakPtrFactory< |
- SafeBrowsingDatabaseManager> > weak_ptr_factory_; |
+ scoped_ptr<base::WeakPtrFactory<LocalSafeBrowsingDatabaseManager>> |
+ weak_ptr_factory_; |
private: |
DISALLOW_COPY_AND_ASSIGN(SafeBrowsingCheck); |
}; |
- class Client { |
- public: |
- void OnSafeBrowsingResult(const SafeBrowsingCheck& check); |
- |
- protected: |
- virtual ~Client() {} |
- |
- // Called when the result of checking a browse URL is known. |
- virtual void OnCheckBrowseUrlResult(const GURL& url, |
- SBThreatType threat_type, |
- const std::string& metadata) {} |
- |
- // Called when the result of checking a download URL is known. |
- virtual void OnCheckDownloadUrlResult(const std::vector<GURL>& url_chain, |
- SBThreatType threat_type) {} |
- |
- // Called when the result of checking a set of extensions is known. |
- virtual void OnCheckExtensionsResult( |
- const std::set<std::string>& threats) {} |
- }; |
- |
// Creates the safe browsing service. Need to initialize before using. |
- explicit SafeBrowsingDatabaseManager( |
+ explicit LocalSafeBrowsingDatabaseManager( |
const scoped_refptr<SafeBrowsingService>& service); |
- // Returns true if the url's scheme can be checked. |
- bool CanCheckUrl(const GURL& url) const; |
- |
- // Returns whether download protection is enabled. |
- bool download_protection_enabled() const { |
- return enable_download_protection_; |
- } |
- |
- // Called on the IO thread to check if the given url is safe or not. If we |
- // can synchronously determine that the url is safe, CheckUrl returns true. |
- // Otherwise it returns false, and "client" is called asynchronously with the |
- // result when it is ready. |
- virtual bool CheckBrowseUrl(const GURL& url, Client* client); |
- |
- // Check if the prefix for |url| is in safebrowsing download add lists. |
- // Result will be passed to callback in |client|. |
- virtual bool CheckDownloadUrl(const std::vector<GURL>& url_chain, |
- Client* client); |
- |
- // Check which prefixes in |extension_ids| are in the safebrowsing blacklist. |
- // Returns true if not, false if further checks need to be made in which case |
- // the result will be passed to |client|. |
- virtual bool CheckExtensionIDs(const std::set<std::string>& extension_ids, |
- Client* client); |
- |
- // Check if the |url| matches any of the full-length hashes from the client- |
- // side phishing detection whitelist. Returns true if there was a match and |
- // false otherwise. To make sure we are conservative we will return true if |
- // an error occurs. This method must be called on the IO thread. |
- virtual bool MatchCsdWhitelistUrl(const GURL& url); |
- |
- // Check if the given IP address (either IPv4 or IPv6) matches the malware |
- // IP blacklist. |
- virtual bool MatchMalwareIP(const std::string& ip_address); |
- |
- // Check if the |url| matches any of the full-length hashes from the download |
- // whitelist. Returns true if there was a match and false otherwise. To make |
- // sure we are conservative we will return true if an error occurs. This |
- // method must be called on the IO thread. |
- virtual bool MatchDownloadWhitelistUrl(const GURL& url); |
- |
- // Check if |str| matches any of the full-length hashes from the download |
- // whitelist. Returns true if there was a match and false otherwise. To make |
- // sure we are conservative we will return true if an error occurs. This |
- // method must be called on the IO thread. |
- virtual bool MatchDownloadWhitelistString(const std::string& str); |
- |
- // Check if the |url| matches any of the full-length hashes from the off- |
- // domain inclusion whitelist. Returns true if there was a match and false |
- // otherwise. To make sure we are conservative, we will return true if an |
- // error occurs. This method must be called on the IO thread. |
- virtual bool MatchInclusionWhitelistUrl(const GURL& url); |
- |
- // Check if the CSD malware IP matching kill switch is turned on. |
- virtual bool IsMalwareKillSwitchOn(); |
- |
- // Check if the CSD whitelist kill switch is turned on. |
- virtual bool IsCsdWhitelistKillSwitchOn(); |
- |
- // Called on the IO thread to cancel a pending check if the result is no |
- // longer needed. |
- void CancelCheck(Client* client); |
- |
- // Called on the IO thread when the SafeBrowsingProtocolManager has received |
- // the full hash results for prefix hits detected in the database. |
- void HandleGetHashResults(SafeBrowsingCheck* check, |
- const std::vector<SBFullHashResult>& full_hashes, |
- const base::TimeDelta& cache_lifetime); |
- |
- // Called to initialize objects that are used on the io_thread. This may be |
- // called multiple times during the life of the DatabaseManager. Must be |
- // called on IO thread. |
- void StartOnIOThread(); |
+ // |
+ // SafeBrowsingDatabaseManager overrides |
+ // |
- // Called to stop or shutdown operations on the io_thread. This may be called |
- // multiple times during the life of the DatabaseManager. Must be called |
- // on IO thread. If shutdown is true, the manager is disabled permanently. |
- void StopOnIOThread(bool shutdown); |
+ bool CanCheckUrl(const GURL& url) const override; |
+ |
+ bool CheckBrowseUrl(const GURL& url, Client* client) override; |
+ bool CheckDownloadUrl(const std::vector<GURL>& url_chain, |
+ Client* client) override; |
+ bool CheckExtensionIDs(const std::set<std::string>& extension_ids, |
+ Client* client) override; |
+ bool MatchCsdWhitelistUrl(const GURL& url) override; |
+ bool MatchMalwareIP(const std::string& ip_address) override; |
+ bool MatchDownloadWhitelistUrl(const GURL& url) override; |
+ bool MatchDownloadWhitelistString(const std::string& str) override; |
+ bool MatchInclusionWhitelistUrl(const GURL& url) override; |
+ bool IsMalwareKillSwitchOn() override; |
+ bool IsCsdWhitelistKillSwitchOn() override; |
+ void CancelCheck(Client* client) override; |
+ void StartOnIOThread() override; |
+ void StopOnIOThread(bool shutdown) override; |
+ bool download_protection_enabled() const override; |
protected: |
- ~SafeBrowsingDatabaseManager() override; |
+ ~LocalSafeBrowsingDatabaseManager() override; |
// protected for tests. |
void NotifyDatabaseUpdateFinished(bool update_succeeded); |
private: |
- friend class base::RefCountedThreadSafe<SafeBrowsingDatabaseManager>; |
+ // Called on the IO thread when the SafeBrowsingProtocolManager has received |
+ // the full hash results for prefix hits detected in the database. |
+ void HandleGetHashResults(SafeBrowsingCheck* check, |
+ const std::vector<SBFullHashResult>& full_hashes, |
+ const base::TimeDelta& cache_lifetime); |
+ |
+ friend class base::RefCountedThreadSafe<LocalSafeBrowsingDatabaseManager>; |
friend class SafeBrowsingServerTest; |
friend class SafeBrowsingServiceTest; |
friend class SafeBrowsingServiceTestHelper; |
+ // TODO(nparker): Rename this test to LocalSafeBrowsingDatabaseManagerTest |
friend class SafeBrowsingDatabaseManagerTest; |
FRIEND_TEST_ALL_PREFIXES(SafeBrowsingDatabaseManagerTest, |
GetUrlSeverestThreatType); |
@@ -402,7 +337,7 @@ class SafeBrowsingDatabaseManager |
// Timeout to use for safe browsing checks. |
base::TimeDelta check_timeout_; |
- DISALLOW_COPY_AND_ASSIGN(SafeBrowsingDatabaseManager); |
-}; |
+ DISALLOW_COPY_AND_ASSIGN(LocalSafeBrowsingDatabaseManager); |
+}; // class LocalSafeBrowsingDatabaseManager |
-#endif // CHROME_BROWSER_SAFE_BROWSING_DATABASE_MANAGER_H_ |
+#endif // CHROME_BROWSER_SAFE_BROWSING_LOCAL_DATABASE_MANAGER_H_ |