Index: chrome/browser/safe_browsing/protocol_manager.h |
=================================================================== |
--- chrome/browser/safe_browsing/protocol_manager.h (revision 69048) |
+++ chrome/browser/safe_browsing/protocol_manager.h (working copy) |
@@ -42,6 +42,25 @@ |
} |
#endif |
+class SafeBrowsingProtocolManager; |
+// Interface of a factory to create ProtocolManager. Useful for tests. |
+class SBProtocolManagerFactory { |
+ public: |
+ SBProtocolManagerFactory() {} |
+ virtual ~SBProtocolManagerFactory() {} |
+ virtual SafeBrowsingProtocolManager* CreateProtocolManager( |
+ SafeBrowsingService* sb_service, |
+ const std::string& client_name, |
+ const std::string& client_key, |
+ const std::string& wrapped_key, |
+ URLRequestContextGetter* request_context_getter, |
+ const std::string& info_url_prefix, |
+ const std::string& mackey_url_prefix, |
+ bool disable_auto_update) = 0; |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(SBProtocolManagerFactory); |
+}; |
+ |
class SafeBrowsingProtocolManager : public URLFetcher::Delegate { |
FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestBackOffTimes); |
FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestChunkStrings); |
@@ -58,23 +77,28 @@ |
friend class SafeBrowsingServiceTest; |
public: |
- // Constructs a SafeBrowsingProtocolManager for |sb_service| that issues |
- // network requests using |request_context_getter|. When |disable_auto_update| |
- // is true, protocol manager won't schedule next update until |
- // ForceScheduleNextUpdate is called. |
- SafeBrowsingProtocolManager(SafeBrowsingService* sb_service, |
- const std::string& client_name, |
- const std::string& client_key, |
- const std::string& wrapped_key, |
- URLRequestContextGetter* request_context_getter, |
- const std::string& http_url_prefix, |
- const std::string& https_url_prefix, |
- bool disable_auto_update); |
virtual ~SafeBrowsingProtocolManager(); |
+ // Makes the passed |factory| the factory used to instantiate |
+ // a SafeBrowsingService. Useful for tests. |
+ static void RegisterFactory(SBProtocolManagerFactory* factory) { |
+ factory_ = factory; |
+ } |
+ |
+ // Create an instance of the safe browsing service. |
+ static SafeBrowsingProtocolManager* Create( |
+ SafeBrowsingService* sb_service, |
+ const std::string& client_name, |
+ const std::string& client_key, |
+ const std::string& wrapped_key, |
+ URLRequestContextGetter* request_context_getter, |
+ const std::string& info_url_prefix, |
+ const std::string& mackey_url_prefix, |
+ bool disable_auto_update); |
+ |
// Sets up the update schedule and internal state for making periodic requests |
// of the SafeBrowsing service. |
- void Initialize(); |
+ virtual void Initialize(); |
// URLFetcher::Delegate interface. |
virtual void OnURLFetchComplete(const URLFetcher* source, |
@@ -86,14 +110,12 @@ |
// API used by the SafeBrowsingService for issuing queries. When the results |
// are available, SafeBrowsingService::HandleGetHashResults is called. |
- void GetFullHash(SafeBrowsingService::SafeBrowsingCheck* check, |
- const std::vector<SBPrefix>& prefixes); |
+ virtual void GetFullHash(SafeBrowsingService::SafeBrowsingCheck* check, |
+ const std::vector<SBPrefix>& prefixes); |
// Forces the start of next update after |next_update_msec| in msec. |
void ForceScheduleNextUpdate(int next_update_msec); |
- bool is_initial_request() const { return initial_request_; } |
- |
// Scheduled update callback. |
void GetNextUpdate(); |
@@ -107,9 +129,6 @@ |
// Called after the chunks that were parsed were inserted in the database. |
void OnChunkInserted(); |
- // The last time we received an update. |
- base::Time last_update() const { return last_update_; } |
- |
// For UMA users we report to Google when a SafeBrowsing interstitial is shown |
// to the user. We assume that the threat type is either URL_MALWARE or |
// URL_PHISHING. |
@@ -123,6 +142,11 @@ |
// malware reports. |report| is the serialized report. |
void ReportMalwareDetails(const std::string& report); |
+ bool is_initial_request() const { return initial_request_; } |
+ |
+ // The last time we received an update. |
+ base::Time last_update() const { return last_update_; } |
+ |
// Setter for additional_query_. To make sure the additional_query_ won't |
// be changed in the middle of an update, caller (e.g.: SafeBrowsingService) |
// should call this after callbacks triggered in UpdateFinished() or before |
@@ -134,7 +158,22 @@ |
return additional_query_; |
} |
+ protected: |
+ // Constructs a SafeBrowsingProtocolManager for |sb_service| that issues |
+ // network requests using |request_context_getter|. When |disable_auto_update| |
+ // is true, protocol manager won't schedule next update until |
+ // ForceScheduleNextUpdate is called. |
+ SafeBrowsingProtocolManager(SafeBrowsingService* sb_service, |
+ const std::string& client_name, |
+ const std::string& client_key, |
+ const std::string& wrapped_key, |
+ URLRequestContextGetter* request_context_getter, |
+ const std::string& http_url_prefix, |
+ const std::string& https_url_prefix, |
+ bool disable_auto_update); |
private: |
+ friend class SBProtocolManagerFactoryImpl; |
+ |
// Internal API for fetching information from the SafeBrowsing servers. The |
// GetHash requests are higher priority since they can block user requests |
// so are handled separately. |
@@ -230,6 +269,10 @@ |
void UpdateResponseTimeout(); |
private: |
+ // The factory that controls the creation of SafeBrowsingProtocolManager. |
+ // This is used by tests. |
+ static SBProtocolManagerFactory* factory_; |
+ |
// Main SafeBrowsing interface object. |
SafeBrowsingService* sb_service_; |