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

Unified Diff: chrome/browser/safe_browsing/v4_protocol_manager.h

Issue 1658913003: SafeBrowsing: Move V4ProtocolManager to components. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@sb-v4-3
Patch Set: Add build dependency Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/safe_browsing/v4_protocol_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/safe_browsing/v4_protocol_manager.h
diff --git a/chrome/browser/safe_browsing/v4_protocol_manager.h b/chrome/browser/safe_browsing/v4_protocol_manager.h
deleted file mode 100644
index 2a8b82759b6fe50e93af9c9e3ffa246a06f158f3..0000000000000000000000000000000000000000
--- a/chrome/browser/safe_browsing/v4_protocol_manager.h
+++ /dev/null
@@ -1,275 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_SAFE_BROWSING_V4_PROTOCOL_MANAGER_H_
-#define CHROME_BROWSER_SAFE_BROWSING_V4_PROTOCOL_MANAGER_H_
-
-// A class that implements Chrome's interface with the SafeBrowsing V4 protocol.
-//
-// The V4ProtocolManager handles formatting and making requests of, and handling
-// responses from, Google's SafeBrowsing servers.
-
-#include <string>
-#include <vector>
-
-#include "base/containers/hash_tables.h"
-#include "base/gtest_prod_util.h"
-#include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/threading/non_thread_safe.h"
-#include "base/time/time.h"
-#include "base/timer/timer.h"
-#include "components/safe_browsing_db/safebrowsing.pb.h"
-#include "components/safe_browsing_db/util.h"
-#include "net/url_request/url_fetcher_delegate.h"
-#include "net/url_request/url_request_status.h"
-#include "url/gurl.h"
-
-namespace net {
-class URLFetcher;
-class URLRequestContextGetter;
-} // namespace net
-
-namespace safe_browsing {
-
-// Config passed to the constructor of a V4ProtocolManager.
-struct V4ProtocolConfig {
- std::string client_name;
- std::string version;
- std::string key_param;
-};
-
-class V4ProtocolManagerFactory;
-
-class V4ProtocolManager : public net::URLFetcherDelegate,
- public base::NonThreadSafe {
- public:
- // FullHashCallback is invoked when GetFullHashes completes.
- // Parameters:
- // - The vector of full hash results. If empty, indicates that there
- // were no matches, and that the resource is safe.
- // - The negative cache duration of the result.
- typedef base::Callback<void(const std::vector<SBFullHashResult>&,
- const base::TimeDelta&)>
- FullHashCallback;
-
- ~V4ProtocolManager() override;
-
- // Makes the passed |factory| the factory used to instantiate
- // a V4ProtocolManager. Useful for tests.
- static void RegisterFactory(V4ProtocolManagerFactory* factory) {
- factory_ = factory;
- }
-
- // Create an instance of the safe browsing v4 protocol manager.
- static V4ProtocolManager* Create(
- net::URLRequestContextGetter* request_context_getter,
- const V4ProtocolConfig& config);
-
- // net::URLFetcherDelegate interface.
- void OnURLFetchComplete(const net::URLFetcher* source) override;
-
- // Retrieve the full hash for a set of prefixes, and invoke the callback
- // argument when the results are retrieved. The callback may be invoked
- // synchronously.
- virtual void GetFullHashes(const std::vector<SBPrefix>& prefixes,
- const std::vector<PlatformType>& platforms,
- ThreatType threat_type,
- FullHashCallback callback);
-
- // Retrieve the full hash and API metadata for a set of prefixes, and invoke
- // the callback argument when the results are retrieved. The callback may be
- // invoked synchronously.
- virtual void GetFullHashesWithApis(const std::vector<SBPrefix>& prefixes,
- FullHashCallback callback);
-
- // Enumerate failures for histogramming purposes. DO NOT CHANGE THE
- // ORDERING OF THESE VALUES.
- // TODO(kcarattini): Use a custom v4 histogram set.
- enum ResultType {
- // 200 response code means that the server recognized the hash
- // prefix, while 204 is an empty response indicating that the
- // server did not recognize it.
- GET_HASH_STATUS_200,
- GET_HASH_STATUS_204,
-
- // Subset of successful responses which returned no full hashes.
- // This includes the STATUS_204 case, and the *_ERROR cases.
- GET_HASH_FULL_HASH_EMPTY,
-
- // Subset of successful responses for which one or more of the
- // full hashes matched (should lead to an interstitial).
- GET_HASH_FULL_HASH_HIT,
-
- // Subset of successful responses which weren't empty and have no
- // matches. It means that there was a prefix collision which was
- // cleared up by the full hashes.
- GET_HASH_FULL_HASH_MISS,
-
- // Subset of successful responses where the response body wasn't parsable.
- GET_HASH_PARSE_ERROR,
-
- // Gethash request failed (network error).
- GET_HASH_NETWORK_ERROR,
-
- // Gethash request returned HTTP result code other than 200 or 204.
- GET_HASH_HTTP_ERROR,
-
- // Gethash attempted during error backoff, no request sent.
- GET_HASH_BACKOFF_ERROR,
-
- // Gethash attempted before min wait duration elapsed, no request sent.
- GET_HASH_MIN_WAIT_DURATION_ERROR,
-
- // Memory space for histograms is determined by the max. ALWAYS
- // ADD NEW VALUES BEFORE THIS ONE.
- GET_HASH_RESULT_MAX
- };
-
- // Record a GetHash result.
- static void RecordGetHashResult(ResultType result_type);
-
- // Record HTTP response code when there's no error in fetching an HTTP
- // request, and the error code, when there is.
- // |metric_name| is the name of the UMA metric to record the response code or
- // error code against, |status| represents the status of the HTTP request, and
- // |response code| represents the HTTP response code received from the server.
- static void RecordHttpResponseOrErrorCode(const char* metric_name,
- const net::URLRequestStatus& status,
- int response_code);
-
- protected:
- // Constructs a V4ProtocolManager that issues
- // network requests using |request_context_getter|.
- V4ProtocolManager(net::URLRequestContextGetter* request_context_getter,
- const V4ProtocolConfig& config);
-
- private:
- FRIEND_TEST_ALL_PREFIXES(SafeBrowsingV4ProtocolManagerTest, TestGetHashUrl);
- FRIEND_TEST_ALL_PREFIXES(SafeBrowsingV4ProtocolManagerTest,
- TestGetHashRequest);
- FRIEND_TEST_ALL_PREFIXES(SafeBrowsingV4ProtocolManagerTest,
- TestParseHashResponse);
- FRIEND_TEST_ALL_PREFIXES(SafeBrowsingV4ProtocolManagerTest,
- TestParseHashResponseWrongThreatEntryType);
- FRIEND_TEST_ALL_PREFIXES(SafeBrowsingV4ProtocolManagerTest,
- TestParseHashResponseSocialEngineeringThreatType);
- FRIEND_TEST_ALL_PREFIXES(SafeBrowsingV4ProtocolManagerTest,
- TestParseHashResponseNonPermissionMetadata);
- FRIEND_TEST_ALL_PREFIXES(SafeBrowsingV4ProtocolManagerTest,
- TestParseHashResponseInconsistentThreatTypes);
- FRIEND_TEST_ALL_PREFIXES(SafeBrowsingV4ProtocolManagerTest,
- TestGetHashBackOffTimes);
- FRIEND_TEST_ALL_PREFIXES(SafeBrowsingV4ProtocolManagerTest,
- TestGetHashErrorHandlingOK);
- FRIEND_TEST_ALL_PREFIXES(SafeBrowsingV4ProtocolManagerTest,
- TestGetHashErrorHandlingNetwork);
- FRIEND_TEST_ALL_PREFIXES(SafeBrowsingV4ProtocolManagerTest,
- TestGetHashErrorHandlingResponseCode);
- friend class V4ProtocolManagerFactoryImpl;
-
- // Generates GetHashWithApis Pver4 request URL for retrieving full hashes.
- // |request_base64| is the serialized FindFullHashesRequest protocol buffer
- // encoded in base 64.
- GURL GetHashUrl(const std::string& request_base64) const;
-
- // Fills a FindFullHashesRequest protocol buffer for a request.
- // Returns the serialized and base 64 encoded request as a string.
- std::string GetHashRequest(const std::vector<SBPrefix>& prefixes,
- const std::vector<PlatformType>& platforms,
- ThreatType threat_type);
-
- // Composes a URL using |prefix|, |method| (e.g.: encodedFullHashes).
- // |request_base64|, |client_id|, |version| and |key_param|. |prefix|
- // should contain the entire url prefix including scheme, host and path.
- static std::string ComposePver4Url(const std::string& prefix,
- const std::string& method,
- const std::string& request_base64,
- const std::string& client_id,
- const std::string& version,
- const std::string& key_param);
-
- // Parses a FindFullHashesResponse protocol buffer and fills the results in
- // |full_hashes| and |negative_cache_duration|. |data| is a serialized
- // FindFullHashes protocol buffer. |negative_cache_duration| is the duration
- // to cache the response for entities that did not match the threat list.
- // Returns true if parsing is successful, false otherwise.
- bool ParseHashResponse(const std::string& data_base64,
- std::vector<SBFullHashResult>* full_hashes,
- base::TimeDelta* negative_cache_duration);
-
- // Worker function for calculating the GetHash backoff times.
- // |multiplier| is doubled for each consecutive error after the
- // first, and |error_count| is incremented with each call.
- static base::TimeDelta GetNextBackOffInterval(size_t* error_count,
- size_t* multiplier);
-
- // Resets the gethash error counter and multiplier.
- void ResetGetHashErrors();
-
- // Updates internal state for each GetHash response error, assuming that
- // the current time is |now|.
- void HandleGetHashError(const base::Time& now);
-
- private:
- // Map of GetHash requests to parameters which created it.
- typedef base::hash_map<const net::URLFetcher*, FullHashCallback> HashRequests;
-
- // The factory that controls the creation of V4ProtocolManager.
- // This is used by tests.
- static V4ProtocolManagerFactory* factory_;
-
- // Current active request (in case we need to cancel) for updates or chunks
- // from the SafeBrowsing service. We can only have one of these outstanding
- // at any given time unlike GetHash requests, which are tracked separately.
- scoped_ptr<net::URLFetcher> request_;
-
- // The number of HTTP response errors since the the last successful HTTP
- // response, used for request backoff timing.
- size_t gethash_error_count_;
-
- // Multiplier for the backoff error after the second.
- size_t gethash_back_off_mult_;
-
- HashRequests hash_requests_;
-
- // 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_time_;
-
- // Current product version sent in each request.
- std::string version_;
-
- // The safe browsing client name sent in each request.
- std::string client_name_;
-
- // The Google API key.
- std::string key_param_;
-
- // The context we use to issue network requests.
- scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
-
- // ID for URLFetchers for testing.
- int url_fetcher_id_;
-
- DISALLOW_COPY_AND_ASSIGN(V4ProtocolManager);
-};
-
-// Interface of a factory to create V4ProtocolManager. Useful for tests.
-class V4ProtocolManagerFactory {
- public:
- V4ProtocolManagerFactory() {}
- virtual ~V4ProtocolManagerFactory() {}
- virtual V4ProtocolManager* CreateProtocolManager(
- net::URLRequestContextGetter* request_context_getter,
- const V4ProtocolConfig& config) = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(V4ProtocolManagerFactory);
-};
-
-} // namespace safe_browsing
-
-#endif // CHROME_BROWSER_SAFE_BROWSING_V4_PROTOCOL_MANAGER_H_
« no previous file with comments | « no previous file | chrome/browser/safe_browsing/v4_protocol_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698