Index: chrome/browser/safe_browsing/client_side_detection_service.h |
diff --git a/chrome/browser/safe_browsing/client_side_detection_service.h b/chrome/browser/safe_browsing/client_side_detection_service.h |
index 864ab7677b06913e1c11b79cfebd5b5f8c2f46f4..98a1fe2229fc21f6feedfaf327b83b5360318de3 100644 |
--- a/chrome/browser/safe_browsing/client_side_detection_service.h |
+++ b/chrome/browser/safe_browsing/client_side_detection_service.h |
@@ -58,12 +58,23 @@ class ClientSideDetectionService : public URLFetcher::Delegate, |
virtual ~ClientSideDetectionService(); |
- // Creates a client-side detection service and starts fetching the client-side |
- // detection model if necessary. The caller takes ownership of the object. |
- // This function may return NULL. |
+ // Creates a client-side detection service. The service is initially |
+ // disabled, use SetEnabled() to start it. The caller takes ownership of the |
+ // object. This function may return NULL. |
static ClientSideDetectionService* Create( |
net::URLRequestContextGetter* request_context_getter); |
+ // Enables or disables the service. This is usually called by the |
+ // SafeBrowsingService, which tracks whether any profile uses these services |
+ // at all. Disabling cancels any pending requests; existing |
+ // ClientSideDetectionHosts will have their callbacks called with "false" |
+ // verdicts. Enabling starts downloading the model after a delay. |
+ void SetEnabled(bool enabled); |
+ |
+ bool enabled() const { |
+ return enabled_; |
+ } |
+ |
// From the URLFetcher::Delegate interface. |
virtual void OnURLFetchComplete(const URLFetcher* source, |
const GURL& url, |
@@ -81,9 +92,9 @@ class ClientSideDetectionService : public URLFetcher::Delegate, |
// The URL scheme of the |url()| in the request should be HTTP. This method |
// takes ownership of the |verdict| as well as the |callback| and calls the |
// the callback once the result has come back from the server or if an error |
- // occurs during the fetch. If an error occurs the phishing verdict will |
- // always be false. The callback is always called after |
- // SendClientReportPhishingRequest() returns and on the same thread as |
+ // occurs during the fetch. If the service is disabled or an error occurs |
+ // the phishing verdict will always be false. The callback is always called |
+ // after SendClientReportPhishingRequest() returns and on the same thread as |
// SendClientReportPhishingRequest() was called. You may set |callback| to |
// NULL if you don't care about the server verdict. |
virtual void SendClientReportPhishingRequest( |
@@ -139,6 +150,9 @@ class ClientSideDetectionService : public URLFetcher::Delegate, |
// for download. |
void StartFetchModel(); |
+ // Schedules the next fetch of the model. |
+ virtual void ScheduleFetchModel(int64 delay_ms); // Virtual for testing. |
+ |
// This method is called when we're done fetching the model either because |
// we hit an error somewhere or because we're actually done fetch and |
// validating the model. |
@@ -148,6 +162,7 @@ class ClientSideDetectionService : public URLFetcher::Delegate, |
friend class ClientSideDetectionServiceTest; |
FRIEND_TEST_ALL_PREFIXES(ClientSideDetectionServiceTest, FetchModelTest); |
FRIEND_TEST_ALL_PREFIXES(ClientSideDetectionServiceTest, SetBadSubnets); |
+ FRIEND_TEST_ALL_PREFIXES(ClientSideDetectionServiceTest, SetEnabled); |
FRIEND_TEST_ALL_PREFIXES(ClientSideDetectionServiceTest, IsBadIpAddress); |
FRIEND_TEST_ALL_PREFIXES(ClientSideDetectionServiceTest, |
ModelHasValidHashIds); |
@@ -232,6 +247,10 @@ class ClientSideDetectionService : public URLFetcher::Delegate, |
// valid hashes in the model. |
static bool ModelHasValidHashIds(const ClientSideModel& model); |
+ // Whether the service is running or not. When the service is not running, |
+ // it won't download the model nor report detected phishing URLs. |
+ bool enabled_; |
+ |
std::string model_str_; |
scoped_ptr<ClientSideModel> model_; |
scoped_ptr<base::TimeDelta> model_max_age_; |