Index: chrome/browser/safe_browsing/protocol_manager.h |
=================================================================== |
--- chrome/browser/safe_browsing/protocol_manager.h (revision 51059) |
+++ chrome/browser/safe_browsing/protocol_manager.h (working copy) |
@@ -46,20 +46,31 @@ |
class SafeBrowsingProtocolManager : public URLFetcher::Delegate { |
FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestBackOffTimes); |
FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestChunkStrings); |
+ FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestGetHashUrl); |
FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, |
TestGetHashBackOffTimes); |
+ FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestMacKeyUrl); |
+ FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, |
+ TestMalwareReportUrl); |
+ FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestNextChunkUrl); |
+ FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestUpdateUrl); |
public: |
// Constructs a SafeBrowsingProtocolManager for |sb_service| that issues |
- // network requests using |request_context_getter|. |
+ // 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); |
+ URLRequestContextGetter* request_context_getter, |
+ const std::string& info_url_prefix, |
+ const std::string& mackey_url_prefix, |
+ bool disable_auto_update); |
~SafeBrowsingProtocolManager(); |
- // Set up the update schedule and internal state for making periodic requests |
+ // Sets up the update schedule and internal state for making periodic requests |
// of the SafeBrowsing service. |
void Initialize(); |
@@ -76,6 +87,11 @@ |
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(); |
@@ -92,11 +108,22 @@ |
// The last time we received an update. |
base::Time last_update() const { return last_update_; } |
- // Report a malware resource to the SafeBrowsing service. |
+ // Reports a malware resource to the SafeBrowsing service. |
void ReportMalware(const GURL& malware_url, |
const GURL& page_url, |
const GURL& referrer_url); |
+ // 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 |
+ // IssueUpdateRequest(). |
+ void set_additional_query(const std::string& query) { |
+ additional_query_ = query; |
+ } |
+ const std::string& additional_query() const { |
+ return additional_query_; |
+ } |
+ |
private: |
// Internal API for fetching information from the SafeBrowsing servers. The |
// GetHash requests are higher priority since they can block user requests |
@@ -108,6 +135,29 @@ |
GETKEY_REQUEST // Update the client's MAC key |
}; |
+ // Composes a URL using |prefix|, |method| (e.g.: gethash, download, |
+ // newkey, report), |client_name| and |version|. When not empty, |
+ // |additional_query| is appended to the URL. |
+ static std::string ComposeUrl(const std::string& prefix, |
+ const std::string& method, |
+ const std::string& client_name, |
+ const std::string& version, |
+ const std::string& additional_query); |
+ |
+ // Generates Update URL for querying about the latest set of chunk updates. |
+ // Append "wrkey=xxx" to the URL when |use_mac| is true. |
+ GURL UpdateUrl(bool use_mac) const; |
+ // Generates GetHash request URL for retrieving full hashes. |
+ // Append "wrkey=xxx" to the URL when |use_mac| is true. |
+ GURL GetHashUrl(bool use_mac) const; |
+ // Generates new MAC client key request URL. |
+ GURL MacKeyUrl() const; |
+ // Generates URL for reporting malware pages. |
+ GURL MalwareReportUrl(const GURL& malware_url, const GURL& page_url, |
+ const GURL& referrer_url) const; |
+ // Composes a ChunkUrl based on input string. |
+ GURL NextChunkUrl(const std::string& input) const; |
+ |
// Returns the time (in milliseconds) for the next update request. If |
// 'back_off' is true, the time returned will increment an error count and |
// return the appriate next time (see ScheduleNextUpdate below). |
@@ -118,38 +168,41 @@ |
// 2nd and 5th, and 'error_count' is incremented with each call. |
int GetNextBackOffTime(int* error_count, int* multiplier); |
- // Manage our update with the next allowable update time. If 'back_off_' is |
+ // 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. |
+ // When disable_auto_update_ is set, ScheduleNextUpdate will do nothing. |
+ // ForceScheduleNextUpdate has to be called to trigger the update. |
void ScheduleNextUpdate(bool back_off); |
- // Send a request for a list of chunks we should download to the SafeBrowsing |
+ // Sends a request for a list of chunks we should download to the SafeBrowsing |
// servers. In order to format this request, we need to send all the chunk |
// numbers for each list that we have to the server. Getting the chunk numbers |
// requires a database query (run on the database thread), and the request |
// is sent upon completion of that query in OnGetChunksComplete. |
void IssueUpdateRequest(); |
- // Send a request for a chunk to the SafeBrowsing servers. |
+ // Sends a request for a chunk to the SafeBrowsing servers. |
void IssueChunkRequest(); |
- // Get a key from the SafeBrowsing servers for use with MAC. This should only |
+ // Gets a key from the SafeBrowsing servers for use with MAC. This should only |
// be called once per client unless the server directly tells us to update. |
void IssueKeyRequest(); |
- // Format a string returned from the database into: |
+ // Formats a string returned from the database into: |
// "list_name;a:<add_chunk_ranges>:s:<sub_chunk_ranges>:mac\n" |
static std::string FormatList(const SBListChunkRanges& list, bool use_mac); |
- // Run the protocol parser on received data and update the SafeBrowsingService |
- // with the new content. Returns 'true' on successful parse, 'false' on error. |
+ // Runs the protocol parser on received data and update the |
+ // SafeBrowsingService with the new content. Returns 'true' on successful |
+ // parse, 'false' on error. |
bool HandleServiceResponse(const GURL& url, const char* data, int length); |
// If the SafeBrowsing service wants us to re-key, we clear our key state and |
// issue the request. |
void HandleReKey(); |
- // Update internal state for each GetHash response error, assuming that the |
+ // Updates internal state for each GetHash response error, assuming that the |
// current time is |now|. |
void HandleGetHashError(const base::Time& now); |
@@ -232,7 +285,7 @@ |
// Used for measuring chunk request latency. |
base::Time chunk_request_start_; |
- // Track the size of each update (in bytes). |
+ // Tracks the size of each update (in bytes). |
int update_size_; |
// Track outstanding malware report fetchers for clean up. |
@@ -241,9 +294,24 @@ |
// The safe browsing client name sent in each request. |
std::string client_name_; |
+ // A string that is appended to the end of URLs for download, gethash, |
+ // newkey, malware report and chunk update requests. |
+ std::string additional_query_; |
+ |
// The context we use to issue network requests. |
scoped_refptr<URLRequestContextGetter> request_context_getter_; |
+ // URL prefix where browser fetches safebrowsing chunk updates, hashes, and |
+ // reports malware. |
+ std::string info_url_prefix_; |
+ |
+ // URL prefix where browser fetches MAC client key. |
+ std::string mackey_url_prefix_; |
+ |
+ // When true, protocol manager will not start an update unless |
+ // ForceScheduleNextUpdate() is called. This is set for testing purpose. |
+ bool disable_auto_update_; |
+ |
DISALLOW_COPY_AND_ASSIGN(SafeBrowsingProtocolManager); |
}; |