| Index: chrome/browser/safe_browsing/protocol_manager.h
|
| diff --git a/chrome/browser/safe_browsing/protocol_manager.h b/chrome/browser/safe_browsing/protocol_manager.h
|
| index fe354284b81f6e4f91571023dcbbb046a537457c..7faba475494e14179ecc6e8536bd711d18c837a4 100644
|
| --- a/chrome/browser/safe_browsing/protocol_manager.h
|
| +++ b/chrome/browser/safe_browsing/protocol_manager.h
|
| @@ -216,6 +216,8 @@ class SafeBrowsingProtocolManager : public net::URLFetcherDelegate,
|
| TestParseV4HashResponseNonPermissionMetadata);
|
| FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest,
|
| TestGetHashBackOffTimes);
|
| + FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest,
|
| + TestGetV4HashBackOffTimes);
|
| FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestNextChunkUrl);
|
| FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestUpdateUrl);
|
| friend class SafeBrowsingServerTest;
|
| @@ -284,6 +286,15 @@ class SafeBrowsingProtocolManager : public net::URLFetcherDelegate,
|
| base::TimeDelta GetNextBackOffInterval(size_t* error_count,
|
| size_t* multiplier) const;
|
|
|
| + // Worker function for calculating the V4 GetHash backoff times.
|
| + // |multiplier| is doubled for each consecutive error after the
|
| + // first, and |error_count| is incremented with each call.
|
| + static base::TimeDelta GetNextV4BackOffInterval(size_t* error_count,
|
| + size_t* multiplier);
|
| +
|
| + // Resets the V4 gethash error counter and multiplier.
|
| + void ResetGetHashV4Errors();
|
| +
|
| // Manages our update with the next allowable update time. If 'back_off_' is
|
| // true, we must decrease the frequency of requests of the SafeBrowsing
|
| // service according to section 5 of the protocol specification.
|
| @@ -318,6 +329,10 @@ class SafeBrowsingProtocolManager : public net::URLFetcherDelegate,
|
| // current time is |now|.
|
| void HandleGetHashError(const base::Time& now);
|
|
|
| + // Updates internal state for each GetHash V4 response error, assuming that
|
| + // the current time is |now|.
|
| + void HandleGetHashV4Error(const base::Time& now);
|
| +
|
| // Helper function for update completion.
|
| void UpdateFinished(bool success);
|
| void UpdateFinished(bool success, bool back_off);
|
| @@ -356,13 +371,16 @@ class SafeBrowsingProtocolManager : public net::URLFetcherDelegate,
|
| // The kind of request that is currently in progress.
|
| SafeBrowsingRequestType request_type_;
|
|
|
| - // The number of HTTP response errors, used for request backoff timing.
|
| + // The number of HTTP response errors since the the last successful HTTP
|
| + // response, used for request backoff timing.
|
| size_t update_error_count_;
|
| size_t gethash_error_count_;
|
| + size_t gethash_v4_error_count_;
|
|
|
| // Multipliers which double (max == 8) for each error after the second.
|
| size_t update_back_off_mult_;
|
| size_t gethash_back_off_mult_;
|
| + size_t gethash_v4_back_off_mult_;
|
|
|
| // Multiplier between 0 and 1 to spread clients over an interval.
|
| float back_off_fuzz_;
|
| @@ -394,6 +412,10 @@ class SafeBrowsingProtocolManager : public net::URLFetcherDelegate,
|
|
|
| // While in GetHash backoff, we can't make another GetHash until this time.
|
| base::Time next_gethash_time_;
|
| + // For v4, the next gethash time is set to the backoff time is the last
|
| + // response was an error, or the minimum wait time if the last response was
|
| + // successful.
|
| + base::Time next_gethash_v4_time_;
|
|
|
| // Current product version sent in each request.
|
| std::string version_;
|
|
|