| 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 // See https://developers.google.com/safe-browsing/developers_guide_v2 for | 9 // See https://developers.google.com/safe-browsing/developers_guide_v2 for |
| 10 // protocol details. | 10 // protocol details. |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestUpdateUrl); | 173 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingProtocolManagerTest, TestUpdateUrl); |
| 174 friend class SafeBrowsingServerTest; | 174 friend class SafeBrowsingServerTest; |
| 175 friend class SBProtocolManagerFactoryImpl; | 175 friend class SBProtocolManagerFactoryImpl; |
| 176 | 176 |
| 177 // Internal API for fetching information from the SafeBrowsing servers. The | 177 // Internal API for fetching information from the SafeBrowsing servers. The |
| 178 // GetHash requests are higher priority since they can block user requests | 178 // GetHash requests are higher priority since they can block user requests |
| 179 // so are handled separately. | 179 // so are handled separately. |
| 180 enum SafeBrowsingRequestType { | 180 enum SafeBrowsingRequestType { |
| 181 NO_REQUEST = 0, // No requests in progress | 181 NO_REQUEST = 0, // No requests in progress |
| 182 UPDATE_REQUEST, // Request for redirect URLs | 182 UPDATE_REQUEST, // Request for redirect URLs |
| 183 BACKUP_UPDATE_REQUEST, // Request for redirect URLs to a backup URL. |
| 183 CHUNK_REQUEST, // Request for a specific chunk | 184 CHUNK_REQUEST, // Request for a specific chunk |
| 184 }; | 185 }; |
| 185 | 186 |
| 187 // Which type of backup update request is being used. |
| 188 enum BackupUpdateReason { |
| 189 BACKUP_UPDATE_REASON_CONNECT, |
| 190 BACKUP_UPDATE_REASON_HTTP, |
| 191 BACKUP_UPDATE_REASON_NETWORK, |
| 192 BACKUP_UPDATE_REASON_MAX, |
| 193 }; |
| 194 |
| 186 // Generates Update URL for querying about the latest set of chunk updates. | 195 // Generates Update URL for querying about the latest set of chunk updates. |
| 187 GURL UpdateUrl() const; | 196 GURL UpdateUrl() const; |
| 197 |
| 198 // Generates backup Update URL for querying about the latest set of chunk |
| 199 // updates. |url_prefix| is the base prefix to use. |
| 200 GURL BackupUpdateUrl(BackupUpdateReason reason) const; |
| 201 |
| 188 // Generates GetHash request URL for retrieving full hashes. | 202 // Generates GetHash request URL for retrieving full hashes. |
| 189 GURL GetHashUrl() const; | 203 GURL GetHashUrl() const; |
| 190 // Generates URL for reporting safe browsing hits for UMA users. | 204 // Generates URL for reporting safe browsing hits for UMA users. |
| 191 | 205 |
| 192 // Composes a ChunkUrl based on input string. | 206 // Composes a ChunkUrl based on input string. |
| 193 GURL NextChunkUrl(const std::string& input) const; | 207 GURL NextChunkUrl(const std::string& input) const; |
| 194 | 208 |
| 195 // Returns the time for the next update request. If |back_off| is true, | 209 // Returns the time for the next update request. If |back_off| is true, |
| 196 // the time returned will increment an error count and return the appriate | 210 // the time returned will increment an error count and return the appriate |
| 197 // next time (see ScheduleNextUpdate below). | 211 // next time (see ScheduleNextUpdate below). |
| (...skipping 12 matching lines...) Expand all Loading... |
| 210 // ForceScheduleNextUpdate has to be called to trigger the update. | 224 // ForceScheduleNextUpdate has to be called to trigger the update. |
| 211 void ScheduleNextUpdate(bool back_off); | 225 void ScheduleNextUpdate(bool back_off); |
| 212 | 226 |
| 213 // Sends a request for a list of chunks we should download to the SafeBrowsing | 227 // Sends a request for a list of chunks we should download to the SafeBrowsing |
| 214 // servers. In order to format this request, we need to send all the chunk | 228 // servers. In order to format this request, we need to send all the chunk |
| 215 // numbers for each list that we have to the server. Getting the chunk numbers | 229 // numbers for each list that we have to the server. Getting the chunk numbers |
| 216 // requires a database query (run on the database thread), and the request | 230 // requires a database query (run on the database thread), and the request |
| 217 // is sent upon completion of that query in OnGetChunksComplete. | 231 // is sent upon completion of that query in OnGetChunksComplete. |
| 218 void IssueUpdateRequest(); | 232 void IssueUpdateRequest(); |
| 219 | 233 |
| 234 // Sends a backup request for a list of chunks to download, when the primary |
| 235 // update request failed. |reason| specifies why the backup is needed. Unlike |
| 236 // the primary IssueUpdateRequest, this does not need to hit the local |
| 237 // SafeBrowsing database since the existing chunk numbers are remembered from |
| 238 // the primary update request. |
| 239 void IssueBackupUpdateRequest(BackupUpdateReason reason); |
| 240 |
| 220 // Sends a request for a chunk to the SafeBrowsing servers. | 241 // Sends a request for a chunk to the SafeBrowsing servers. |
| 221 void IssueChunkRequest(); | 242 void IssueChunkRequest(); |
| 222 | 243 |
| 223 // Formats a string returned from the database into: | 244 // Formats a string returned from the database into: |
| 224 // "list_name;a:<add_chunk_ranges>:s:<sub_chunk_ranges>\n" | 245 // "list_name;a:<add_chunk_ranges>:s:<sub_chunk_ranges>\n" |
| 225 static std::string FormatList(const SBListChunkRanges& list); | 246 static std::string FormatList(const SBListChunkRanges& list); |
| 226 | 247 |
| 227 // Runs the protocol parser on received data and update the | 248 // Runs the protocol parser on received data and update the |
| 228 // SafeBrowsingService with the new content. Returns 'true' on successful | 249 // SafeBrowsingService with the new content. Returns 'true' on successful |
| 229 // parse, 'false' on error. | 250 // parse, 'false' on error. |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 // A string that is appended to the end of URLs for download, gethash, | 353 // A string that is appended to the end of URLs for download, gethash, |
| 333 // safebrowsing hits and chunk update requests. | 354 // safebrowsing hits and chunk update requests. |
| 334 std::string additional_query_; | 355 std::string additional_query_; |
| 335 | 356 |
| 336 // The context we use to issue network requests. | 357 // The context we use to issue network requests. |
| 337 scoped_refptr<net::URLRequestContextGetter> request_context_getter_; | 358 scoped_refptr<net::URLRequestContextGetter> request_context_getter_; |
| 338 | 359 |
| 339 // URL prefix where browser fetches safebrowsing chunk updates, and hashes. | 360 // URL prefix where browser fetches safebrowsing chunk updates, and hashes. |
| 340 std::string url_prefix_; | 361 std::string url_prefix_; |
| 341 | 362 |
| 363 // Backup URL prefixes for updates. |
| 364 std::string backup_url_prefixes_[BACKUP_UPDATE_REASON_MAX]; |
| 365 |
| 366 // The current reason why the backup update request is happening. |
| 367 BackupUpdateReason backup_update_reason_; |
| 368 |
| 369 // Data to POST when doing an update. |
| 370 std::string update_list_data_; |
| 371 |
| 342 // When true, protocol manager will not start an update unless | 372 // When true, protocol manager will not start an update unless |
| 343 // ForceScheduleNextUpdate() is called. This is set for testing purpose. | 373 // ForceScheduleNextUpdate() is called. This is set for testing purpose. |
| 344 bool disable_auto_update_; | 374 bool disable_auto_update_; |
| 345 | 375 |
| 346 // ID for URLFetchers for testing. | 376 // ID for URLFetchers for testing. |
| 347 int url_fetcher_id_; | 377 int url_fetcher_id_; |
| 348 | 378 |
| 349 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingProtocolManager); | 379 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingProtocolManager); |
| 350 }; | 380 }; |
| 351 | 381 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 // call at a later time. | 422 // call at a later time. |
| 393 virtual void AddChunks(const std::string& list, SBChunkList* chunks, | 423 virtual void AddChunks(const std::string& list, SBChunkList* chunks, |
| 394 AddChunksCallback callback) = 0; | 424 AddChunksCallback callback) = 0; |
| 395 | 425 |
| 396 // Delete chunks from the database. | 426 // Delete chunks from the database. |
| 397 virtual void DeleteChunks( | 427 virtual void DeleteChunks( |
| 398 std::vector<SBChunkDelete>* delete_chunks) = 0; | 428 std::vector<SBChunkDelete>* delete_chunks) = 0; |
| 399 }; | 429 }; |
| 400 | 430 |
| 401 #endif // CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_ | 431 #endif // CHROME_BROWSER_SAFE_BROWSING_PROTOCOL_MANAGER_H_ |
| OLD | NEW |