Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_ | 5 #ifndef CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_ |
| 6 #define CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_ | 6 #define CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_ |
| 7 | 7 |
| 8 // A class that implements Chrome's interface with the SafeBrowsing protocol. | 8 // A class that implements Chrome's interface with the SafeBrowsing protocol. |
| 9 // The SafeBrowsingProtocolManager handles formatting and making requests of, | 9 // The SafeBrowsingProtocolManager handles formatting and making requests of, |
| 10 // and handling responses from, Google's SafeBrowsing servers. This class uses | 10 // and handling responses from, Google's SafeBrowsing servers. This class uses |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 54 const std::string& client_name, | 54 const std::string& client_name, |
| 55 net::URLRequestContextGetter* request_context_getter, | 55 net::URLRequestContextGetter* request_context_getter, |
| 56 const std::string& url_prefix, | 56 const std::string& url_prefix, |
| 57 bool disable_auto_update) = 0; | 57 bool disable_auto_update) = 0; |
| 58 private: | 58 private: |
| 59 DISALLOW_COPY_AND_ASSIGN(SBProtocolManagerFactory); | 59 DISALLOW_COPY_AND_ASSIGN(SBProtocolManagerFactory); |
| 60 }; | 60 }; |
| 61 | 61 |
| 62 class SafeBrowsingProtocolManager : public net::URLFetcherDelegate { | 62 class SafeBrowsingProtocolManager : public net::URLFetcherDelegate { |
| 63 public: | 63 public: |
| 64 // FullHashCallback is invoked when GetFullHash completes. | |
| 65 // Parameters: | |
| 66 // - The vector of full hash results. If empty, indicates that there | |
| 67 // were no matches, and that the resource is safe. | |
| 68 // - Whether the result can be cached. This may not be the case when | |
| 69 // the result did not come from the SB server, for example. | |
| 70 typedef base::Callback<void(const std::vector<SBFullHashResult>&, | |
| 71 bool)> FullHashCallback; | |
| 72 | |
| 64 virtual ~SafeBrowsingProtocolManager(); | 73 virtual ~SafeBrowsingProtocolManager(); |
| 65 | 74 |
| 66 // Makes the passed |factory| the factory used to instantiate | 75 // Makes the passed |factory| the factory used to instantiate |
| 67 // a SafeBrowsingService. Useful for tests. | 76 // a SafeBrowsingService. Useful for tests. |
| 68 static void RegisterFactory(SBProtocolManagerFactory* factory) { | 77 static void RegisterFactory(SBProtocolManagerFactory* factory) { |
| 69 factory_ = factory; | 78 factory_ = factory; |
| 70 } | 79 } |
| 71 | 80 |
| 72 // Create an instance of the safe browsing service. | 81 // Create an instance of the safe browsing service. |
| 73 static SafeBrowsingProtocolManager* Create( | 82 static SafeBrowsingProtocolManager* Create( |
| 74 SafeBrowsingService* sb_service, | 83 SafeBrowsingService* sb_service, |
| 75 const std::string& client_name, | 84 const std::string& client_name, |
| 76 net::URLRequestContextGetter* request_context_getter, | 85 net::URLRequestContextGetter* request_context_getter, |
| 77 const std::string& url_prefix, | 86 const std::string& url_prefix, |
| 78 bool disable_auto_update); | 87 bool disable_auto_update); |
| 79 | 88 |
| 80 // Sets up the update schedule and internal state for making periodic requests | 89 // Sets up the update schedule and internal state for making periodic requests |
| 81 // of the SafeBrowsing service. | 90 // of the SafeBrowsing service. |
| 82 virtual void Initialize(); | 91 virtual void Initialize(); |
| 83 | 92 |
| 84 // net::URLFetcherDelegate interface. | 93 // net::URLFetcherDelegate interface. |
| 85 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; | 94 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; |
| 86 | 95 |
| 87 // API used by the SafeBrowsingService for issuing queries. When the results | 96 // Retrieve the full hash for a set of prefixes, and invoke the callback |
| 88 // are available, SafeBrowsingService::HandleGetHashResults is called. | 97 // argument when the results are retrieved. The callback may be invoked |
| 89 virtual void GetFullHash(SafeBrowsingService::SafeBrowsingCheck* check, | 98 // synchronously. |
| 90 const std::vector<SBPrefix>& prefixes); | 99 virtual void GetFullHash(const std::vector<SBPrefix>& prefixes, |
| 100 FullHashCallback callback, | |
| 101 bool is_download); | |
| 91 | 102 |
| 92 // Forces the start of next update after |interval| time. | 103 // Forces the start of next update after |interval| time. |
| 93 void ForceScheduleNextUpdate(base::TimeDelta interval); | 104 void ForceScheduleNextUpdate(base::TimeDelta interval); |
| 94 | 105 |
| 95 // Scheduled update callback. | 106 // Scheduled update callback. |
| 96 void GetNextUpdate(); | 107 void GetNextUpdate(); |
| 97 | 108 |
| 98 // Called by the SafeBrowsingService when our request for a list of all chunks | 109 // Called by the SafeBrowsingService when our request for a list of all chunks |
| 99 // for each list is done. If database_error is true, that means the protocol | 110 // for each list is done. If database_error is true, that means the protocol |
| 100 // manager shouldn't fetch updates since they can't be written to disk. It | 111 // manager shouldn't fetch updates since they can't be written to disk. It |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 268 void HandleGetHashError(const base::Time& now); | 279 void HandleGetHashError(const base::Time& now); |
| 269 | 280 |
| 270 // Helper function for update completion. | 281 // Helper function for update completion. |
| 271 void UpdateFinished(bool success); | 282 void UpdateFinished(bool success); |
| 272 | 283 |
| 273 // A callback that runs if we timeout waiting for a response to an update | 284 // A callback that runs if we timeout waiting for a response to an update |
| 274 // request. We use this to properly set our update state. | 285 // request. We use this to properly set our update state. |
| 275 void UpdateResponseTimeout(); | 286 void UpdateResponseTimeout(); |
| 276 | 287 |
| 277 private: | 288 private: |
| 289 // Map of GetHash requests to parameters which created it. | |
| 290 struct FullHashDetails { | |
| 291 FullHashDetails(); | |
| 292 FullHashDetails(FullHashCallback callback, bool is_download); | |
| 293 ~FullHashDetails(); | |
|
mattm
2012/10/29 23:57:09
Maybe put a blank line between the methods and the
cbentzel
2012/10/30 11:34:03
Done.
| |
| 294 FullHashCallback callback; | |
| 295 bool is_download; | |
| 296 }; | |
| 297 typedef base::hash_map<const net::URLFetcher*, FullHashDetails> HashRequests; | |
| 298 | |
| 278 // The factory that controls the creation of SafeBrowsingProtocolManager. | 299 // The factory that controls the creation of SafeBrowsingProtocolManager. |
| 279 // This is used by tests. | 300 // This is used by tests. |
| 280 static SBProtocolManagerFactory* factory_; | 301 static SBProtocolManagerFactory* factory_; |
| 281 | 302 |
| 282 // Main SafeBrowsing interface object. | 303 // Main SafeBrowsing interface object. |
| 283 SafeBrowsingService* sb_service_; | 304 SafeBrowsingService* sb_service_; |
| 284 | 305 |
| 285 // Current active request (in case we need to cancel) for updates or chunks | 306 // Current active request (in case we need to cancel) for updates or chunks |
| 286 // from the SafeBrowsing service. We can only have one of these outstanding | 307 // from the SafeBrowsing service. We can only have one of these outstanding |
| 287 // at any given time unlike GetHash requests, which are tracked separately. | 308 // at any given time unlike GetHash requests, which are tracked separately. |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 305 std::string list_name_; | 326 std::string list_name_; |
| 306 | 327 |
| 307 // For managing the next earliest time to query the SafeBrowsing servers for | 328 // For managing the next earliest time to query the SafeBrowsing servers for |
| 308 // updates. | 329 // updates. |
| 309 base::TimeDelta next_update_interval_; | 330 base::TimeDelta next_update_interval_; |
| 310 base::OneShotTimer<SafeBrowsingProtocolManager> update_timer_; | 331 base::OneShotTimer<SafeBrowsingProtocolManager> update_timer_; |
| 311 | 332 |
| 312 // All chunk requests that need to be made. | 333 // All chunk requests that need to be made. |
| 313 std::deque<ChunkUrl> chunk_request_urls_; | 334 std::deque<ChunkUrl> chunk_request_urls_; |
| 314 | 335 |
| 315 // Map of GetHash requests. | |
| 316 typedef base::hash_map<const net::URLFetcher*, | |
| 317 SafeBrowsingService::SafeBrowsingCheck*> HashRequests; | |
| 318 HashRequests hash_requests_; | 336 HashRequests hash_requests_; |
| 319 | 337 |
| 320 // The next scheduled update has special behavior for the first 2 requests. | 338 // The next scheduled update has special behavior for the first 2 requests. |
| 321 enum UpdateRequestState { | 339 enum UpdateRequestState { |
| 322 FIRST_REQUEST = 0, | 340 FIRST_REQUEST = 0, |
| 323 SECOND_REQUEST, | 341 SECOND_REQUEST, |
| 324 NORMAL_REQUEST | 342 NORMAL_REQUEST |
| 325 }; | 343 }; |
| 326 UpdateRequestState update_state_; | 344 UpdateRequestState update_state_; |
| 327 | 345 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 364 std::string url_prefix_; | 382 std::string url_prefix_; |
| 365 | 383 |
| 366 // When true, protocol manager will not start an update unless | 384 // When true, protocol manager will not start an update unless |
| 367 // ForceScheduleNextUpdate() is called. This is set for testing purpose. | 385 // ForceScheduleNextUpdate() is called. This is set for testing purpose. |
| 368 bool disable_auto_update_; | 386 bool disable_auto_update_; |
| 369 | 387 |
| 370 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingProtocolManager); | 388 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingProtocolManager); |
| 371 }; | 389 }; |
| 372 | 390 |
| 373 #endif // CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_ | 391 #endif // CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_ |
| OLD | NEW |