OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #pragma once | 7 #pragma once |
8 | 8 |
9 // A class that implements Chrome's interface with the SafeBrowsing protocol. | 9 // A class that implements Chrome's interface with the SafeBrowsing protocol. |
10 // The SafeBrowsingProtocolManager handles formatting and making requests of, | 10 // The SafeBrowsingProtocolManager handles formatting and making requests of, |
(...skipping 18 matching lines...) Expand all Loading... |
29 | 29 |
30 namespace net { | 30 namespace net { |
31 class URLRequestStatus; | 31 class URLRequestStatus; |
32 } // namespace net | 32 } // namespace net |
33 | 33 |
34 #if defined(COMPILER_GCC) | 34 #if defined(COMPILER_GCC) |
35 // Allows us to use URLFetchers in a hash_map with gcc (MSVC is okay without | 35 // Allows us to use URLFetchers in a hash_map with gcc (MSVC is okay without |
36 // specifying this). | 36 // specifying this). |
37 namespace __gnu_cxx { | 37 namespace __gnu_cxx { |
38 template<> | 38 template<> |
39 struct hash<const URLFetcher*> { | 39 struct hash<const content::URLFetcher*> { |
40 size_t operator()(const URLFetcher* fetcher) const { | 40 size_t operator()(const content::URLFetcher* fetcher) const { |
41 return reinterpret_cast<size_t>(fetcher); | 41 return reinterpret_cast<size_t>(fetcher); |
42 } | 42 } |
43 }; | 43 }; |
44 } | 44 } |
45 #endif | 45 #endif |
46 | 46 |
47 class SafeBrowsingProtocolManager; | 47 class SafeBrowsingProtocolManager; |
48 // Interface of a factory to create ProtocolManager. Useful for tests. | 48 // Interface of a factory to create ProtocolManager. Useful for tests. |
49 class SBProtocolManagerFactory { | 49 class SBProtocolManagerFactory { |
50 public: | 50 public: |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 net::URLRequestContextGetter* request_context_getter, | 96 net::URLRequestContextGetter* request_context_getter, |
97 const std::string& info_url_prefix, | 97 const std::string& info_url_prefix, |
98 const std::string& mackey_url_prefix, | 98 const std::string& mackey_url_prefix, |
99 bool disable_auto_update); | 99 bool disable_auto_update); |
100 | 100 |
101 // Sets up the update schedule and internal state for making periodic requests | 101 // Sets up the update schedule and internal state for making periodic requests |
102 // of the SafeBrowsing service. | 102 // of the SafeBrowsing service. |
103 virtual void Initialize(); | 103 virtual void Initialize(); |
104 | 104 |
105 // content::URLFetcherDelegate interface. | 105 // content::URLFetcherDelegate interface. |
106 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; | 106 virtual void OnURLFetchComplete(const content::URLFetcher* source) OVERRIDE; |
107 | 107 |
108 // API used by the SafeBrowsingService for issuing queries. When the results | 108 // API used by the SafeBrowsingService for issuing queries. When the results |
109 // are available, SafeBrowsingService::HandleGetHashResults is called. | 109 // are available, SafeBrowsingService::HandleGetHashResults is called. |
110 virtual void GetFullHash(SafeBrowsingService::SafeBrowsingCheck* check, | 110 virtual void GetFullHash(SafeBrowsingService::SafeBrowsingCheck* check, |
111 const std::vector<SBPrefix>& prefixes); | 111 const std::vector<SBPrefix>& prefixes); |
112 | 112 |
113 // Forces the start of next update after |next_update_msec| in msec. | 113 // Forces the start of next update after |next_update_msec| in msec. |
114 void ForceScheduleNextUpdate(int next_update_msec); | 114 void ForceScheduleNextUpdate(int next_update_msec); |
115 | 115 |
116 // Scheduled update callback. | 116 // Scheduled update callback. |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 // The factory that controls the creation of SafeBrowsingProtocolManager. | 304 // The factory that controls the creation of SafeBrowsingProtocolManager. |
305 // This is used by tests. | 305 // This is used by tests. |
306 static SBProtocolManagerFactory* factory_; | 306 static SBProtocolManagerFactory* factory_; |
307 | 307 |
308 // Main SafeBrowsing interface object. | 308 // Main SafeBrowsing interface object. |
309 SafeBrowsingService* sb_service_; | 309 SafeBrowsingService* sb_service_; |
310 | 310 |
311 // Current active request (in case we need to cancel) for updates or chunks | 311 // Current active request (in case we need to cancel) for updates or chunks |
312 // from the SafeBrowsing service. We can only have one of these outstanding | 312 // from the SafeBrowsing service. We can only have one of these outstanding |
313 // at any given time unlike GetHash requests, which are tracked separately. | 313 // at any given time unlike GetHash requests, which are tracked separately. |
314 scoped_ptr<URLFetcher> request_; | 314 scoped_ptr<content::URLFetcher> request_; |
315 | 315 |
316 // The kind of request that is currently in progress. | 316 // The kind of request that is currently in progress. |
317 SafeBrowsingRequestType request_type_; | 317 SafeBrowsingRequestType request_type_; |
318 | 318 |
319 // The number of HTTP response errors, used for request backoff timing. | 319 // The number of HTTP response errors, used for request backoff timing. |
320 int update_error_count_; | 320 int update_error_count_; |
321 int gethash_error_count_; | 321 int gethash_error_count_; |
322 | 322 |
323 // Multipliers which double (max == 8) for each error after the second. | 323 // Multipliers which double (max == 8) for each error after the second. |
324 int update_back_off_mult_; | 324 int update_back_off_mult_; |
325 int gethash_back_off_mult_; | 325 int gethash_back_off_mult_; |
326 | 326 |
327 // Multiplier between 0 and 1 to spread clients over an interval. | 327 // Multiplier between 0 and 1 to spread clients over an interval. |
328 float back_off_fuzz_; | 328 float back_off_fuzz_; |
329 | 329 |
330 // The list for which we are make a request. | 330 // The list for which we are make a request. |
331 std::string list_name_; | 331 std::string list_name_; |
332 | 332 |
333 // For managing the next earliest time to query the SafeBrowsing servers for | 333 // For managing the next earliest time to query the SafeBrowsing servers for |
334 // updates. | 334 // updates. |
335 int next_update_sec_; | 335 int next_update_sec_; |
336 base::OneShotTimer<SafeBrowsingProtocolManager> update_timer_; | 336 base::OneShotTimer<SafeBrowsingProtocolManager> update_timer_; |
337 | 337 |
338 // All chunk requests that need to be made, along with their MAC. | 338 // All chunk requests that need to be made, along with their MAC. |
339 std::deque<ChunkUrl> chunk_request_urls_; | 339 std::deque<ChunkUrl> chunk_request_urls_; |
340 | 340 |
341 // Map of GetHash requests. | 341 // Map of GetHash requests. |
342 typedef base::hash_map<const URLFetcher*, | 342 typedef base::hash_map<const content::URLFetcher*, |
343 SafeBrowsingService::SafeBrowsingCheck*> HashRequests; | 343 SafeBrowsingService::SafeBrowsingCheck*> HashRequests; |
344 HashRequests hash_requests_; | 344 HashRequests hash_requests_; |
345 | 345 |
346 // The next scheduled update has special behavior for the first 2 requests. | 346 // The next scheduled update has special behavior for the first 2 requests. |
347 enum UpdateRequestState { | 347 enum UpdateRequestState { |
348 FIRST_REQUEST = 0, | 348 FIRST_REQUEST = 0, |
349 SECOND_REQUEST, | 349 SECOND_REQUEST, |
350 NORMAL_REQUEST | 350 NORMAL_REQUEST |
351 }; | 351 }; |
352 UpdateRequestState update_state_; | 352 UpdateRequestState update_state_; |
(...skipping 21 matching lines...) Expand all Loading... |
374 std::string version_; | 374 std::string version_; |
375 | 375 |
376 // Used for measuring chunk request latency. | 376 // Used for measuring chunk request latency. |
377 base::Time chunk_request_start_; | 377 base::Time chunk_request_start_; |
378 | 378 |
379 // Tracks the size of each update (in bytes). | 379 // Tracks the size of each update (in bytes). |
380 int update_size_; | 380 int update_size_; |
381 | 381 |
382 // Track outstanding SafeBrowsing report fetchers for clean up. | 382 // Track outstanding SafeBrowsing report fetchers for clean up. |
383 // We add both "hit" and "detail" fetchers in this set. | 383 // We add both "hit" and "detail" fetchers in this set. |
384 std::set<const URLFetcher*> safebrowsing_reports_; | 384 std::set<const content::URLFetcher*> safebrowsing_reports_; |
385 | 385 |
386 // The safe browsing client name sent in each request. | 386 // The safe browsing client name sent in each request. |
387 std::string client_name_; | 387 std::string client_name_; |
388 | 388 |
389 // A string that is appended to the end of URLs for download, gethash, | 389 // A string that is appended to the end of URLs for download, gethash, |
390 // newkey, safebrowsing hits and chunk update requests. | 390 // newkey, safebrowsing hits and chunk update requests. |
391 std::string additional_query_; | 391 std::string additional_query_; |
392 | 392 |
393 // The context we use to issue network requests. | 393 // The context we use to issue network requests. |
394 scoped_refptr<net::URLRequestContextGetter> request_context_getter_; | 394 scoped_refptr<net::URLRequestContextGetter> request_context_getter_; |
395 | 395 |
396 // URL prefix where browser fetches safebrowsing chunk updates, hashes, and | 396 // URL prefix where browser fetches safebrowsing chunk updates, hashes, and |
397 // reports hits to the safebrowsing list for UMA users. | 397 // reports hits to the safebrowsing list for UMA users. |
398 std::string http_url_prefix_; | 398 std::string http_url_prefix_; |
399 | 399 |
400 // URL prefix where browser fetches MAC client key, and reports detailed | 400 // URL prefix where browser fetches MAC client key, and reports detailed |
401 // malware reports for users who opt-in. | 401 // malware reports for users who opt-in. |
402 std::string https_url_prefix_; | 402 std::string https_url_prefix_; |
403 | 403 |
404 // When true, protocol manager will not start an update unless | 404 // When true, protocol manager will not start an update unless |
405 // ForceScheduleNextUpdate() is called. This is set for testing purpose. | 405 // ForceScheduleNextUpdate() is called. This is set for testing purpose. |
406 bool disable_auto_update_; | 406 bool disable_auto_update_; |
407 | 407 |
408 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingProtocolManager); | 408 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingProtocolManager); |
409 }; | 409 }; |
410 | 410 |
411 #endif // CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_ | 411 #endif // CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_ |
OLD | NEW |