OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_INCIDENT_REPORTING_INCIDENT_REPORTING_SERVI
CE_H_ | 5 #ifndef CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_INCIDENT_REPORTING_SERVI
CE_H_ |
6 #define CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_INCIDENT_REPORTING_SERVI
CE_H_ | 6 #define CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_INCIDENT_REPORTING_SERVI
CE_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
| 11 #include <memory> |
11 #include <vector> | 12 #include <vector> |
12 | 13 |
13 #include "base/compiler_specific.h" | 14 #include "base/compiler_specific.h" |
14 #include "base/macros.h" | 15 #include "base/macros.h" |
15 #include "base/memory/ref_counted.h" | 16 #include "base/memory/ref_counted.h" |
16 #include "base/memory/scoped_ptr.h" | |
17 #include "base/memory/weak_ptr.h" | 17 #include "base/memory/weak_ptr.h" |
18 #include "base/threading/thread_checker.h" | 18 #include "base/threading/thread_checker.h" |
19 #include "base/time/time.h" | 19 #include "base/time/time.h" |
20 #include "base/timer/timer.h" | 20 #include "base/timer/timer.h" |
21 #include "chrome/browser/safe_browsing/download_protection_service.h" | 21 #include "chrome/browser/safe_browsing/download_protection_service.h" |
22 #include "chrome/browser/safe_browsing/incident_reporting/delayed_analysis_callb
ack.h" | 22 #include "chrome/browser/safe_browsing/incident_reporting/delayed_analysis_callb
ack.h" |
23 #include "chrome/browser/safe_browsing/incident_reporting/delayed_callback_runne
r.h" | 23 #include "chrome/browser/safe_browsing/incident_reporting/delayed_callback_runne
r.h" |
24 #include "chrome/browser/safe_browsing/incident_reporting/download_metadata_mana
ger.h" | 24 #include "chrome/browser/safe_browsing/incident_reporting/download_metadata_mana
ger.h" |
25 #include "chrome/browser/safe_browsing/incident_reporting/incident_report_upload
er.h" | 25 #include "chrome/browser/safe_browsing/incident_reporting/incident_report_upload
er.h" |
26 #include "chrome/browser/safe_browsing/incident_reporting/last_download_finder.h
" | 26 #include "chrome/browser/safe_browsing/incident_reporting/last_download_finder.h
" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 // All incident collection, data collection, and uploads in progress are | 79 // All incident collection, data collection, and uploads in progress are |
80 // dropped at destruction. | 80 // dropped at destruction. |
81 ~IncidentReportingService() override; | 81 ~IncidentReportingService() override; |
82 | 82 |
83 // Returns true if incident reporting is enabled for the given profile. | 83 // Returns true if incident reporting is enabled for the given profile. |
84 static bool IsEnabledForProfile(Profile* profile); | 84 static bool IsEnabledForProfile(Profile* profile); |
85 | 85 |
86 // Returns an object by which external components can add an incident to the | 86 // Returns an object by which external components can add an incident to the |
87 // service. The object may outlive the service, but will no longer have any | 87 // service. The object may outlive the service, but will no longer have any |
88 // effect after the service is deleted. | 88 // effect after the service is deleted. |
89 scoped_ptr<IncidentReceiver> GetIncidentReceiver(); | 89 std::unique_ptr<IncidentReceiver> GetIncidentReceiver(); |
90 | 90 |
91 // Returns a preference validation delegate that adds incidents to the service | 91 // Returns a preference validation delegate that adds incidents to the service |
92 // for validation failures in |profile|. The delegate may outlive the service, | 92 // for validation failures in |profile|. The delegate may outlive the service, |
93 // but incidents reported by it will no longer have any effect after the | 93 // but incidents reported by it will no longer have any effect after the |
94 // service is deleted. | 94 // service is deleted. |
95 scoped_ptr<TrackedPreferenceValidationDelegate> | 95 std::unique_ptr<TrackedPreferenceValidationDelegate> |
96 CreatePreferenceValidationDelegate(Profile* profile); | 96 CreatePreferenceValidationDelegate(Profile* profile); |
97 | 97 |
98 // Registers |callback| to be run after some delay following process launch. | 98 // Registers |callback| to be run after some delay following process launch. |
99 void RegisterDelayedAnalysisCallback(const DelayedAnalysisCallback& callback); | 99 void RegisterDelayedAnalysisCallback(const DelayedAnalysisCallback& callback); |
100 | 100 |
101 // Registers |callback| to be run after some delay following process launch if | 101 // Registers |callback| to be run after some delay following process launch if |
102 // a profile participating in extended reporting is found. | 102 // a profile participating in extended reporting is found. |
103 void RegisterExtendedReportingOnlyDelayedAnalysisCallback( | 103 void RegisterExtendedReportingOnlyDelayedAnalysisCallback( |
104 const DelayedAnalysisCallback& callback); | 104 const DelayedAnalysisCallback& callback); |
105 | 105 |
106 // Adds |download_manager| to the set monitored for client download request | 106 // Adds |download_manager| to the set monitored for client download request |
(...skipping 28 matching lines...) Expand all Loading... |
135 // Handles the addition of a new profile to the ProfileManager. Creates a new | 135 // Handles the addition of a new profile to the ProfileManager. Creates a new |
136 // context for |profile| if one does not exist, drops any received incidents | 136 // context for |profile| if one does not exist, drops any received incidents |
137 // for the profile if the profile is not participating in safe browsing, and | 137 // for the profile if the profile is not participating in safe browsing, and |
138 // initiates a new search for the most recent download if a report is being | 138 // initiates a new search for the most recent download if a report is being |
139 // assembled and the most recent has not been found. Overridden by unit tests | 139 // assembled and the most recent has not been found. Overridden by unit tests |
140 // to inject incidents prior to creation. | 140 // to inject incidents prior to creation. |
141 virtual void OnProfileAdded(Profile* profile); | 141 virtual void OnProfileAdded(Profile* profile); |
142 | 142 |
143 // Initiates a search for the most recent binary download. Overriden by unit | 143 // Initiates a search for the most recent binary download. Overriden by unit |
144 // tests to provide a fake finder. | 144 // tests to provide a fake finder. |
145 virtual scoped_ptr<LastDownloadFinder> CreateDownloadFinder( | 145 virtual std::unique_ptr<LastDownloadFinder> CreateDownloadFinder( |
146 const LastDownloadFinder::LastDownloadCallback& callback); | 146 const LastDownloadFinder::LastDownloadCallback& callback); |
147 | 147 |
148 // Initiates an upload. Overridden by unit tests to provide a fake uploader. | 148 // Initiates an upload. Overridden by unit tests to provide a fake uploader. |
149 virtual scoped_ptr<IncidentReportUploader> StartReportUpload( | 149 virtual std::unique_ptr<IncidentReportUploader> StartReportUpload( |
150 const IncidentReportUploader::OnResultCallback& callback, | 150 const IncidentReportUploader::OnResultCallback& callback, |
151 const scoped_refptr<net::URLRequestContextGetter>& request_context_getter, | 151 const scoped_refptr<net::URLRequestContextGetter>& request_context_getter, |
152 const ClientIncidentReport& report); | 152 const ClientIncidentReport& report); |
153 | 153 |
154 // Returns true if a report is currently being processed. | 154 // Returns true if a report is currently being processed. |
155 bool IsProcessingReport() const; | 155 bool IsProcessingReport() const; |
156 | 156 |
157 private: | 157 private: |
158 struct ProfileContext; | 158 struct ProfileContext; |
159 class UploadContext; | 159 class UploadContext; |
(...skipping 10 matching lines...) Expand all Loading... |
170 | 170 |
171 // Handles the destruction of a profile. Incidents reported for the profile | 171 // Handles the destruction of a profile. Incidents reported for the profile |
172 // but not yet uploaded are dropped. | 172 // but not yet uploaded are dropped. |
173 void OnProfileDestroyed(Profile* profile); | 173 void OnProfileDestroyed(Profile* profile); |
174 | 174 |
175 // Returns an initialized profile that participates in safe browsing. Profiles | 175 // Returns an initialized profile that participates in safe browsing. Profiles |
176 // participating in extended safe browsing are preferred. | 176 // participating in extended safe browsing are preferred. |
177 Profile* FindEligibleProfile() const; | 177 Profile* FindEligibleProfile() const; |
178 | 178 |
179 // Adds |incident_data| relating to the optional |profile| to the service. | 179 // Adds |incident_data| relating to the optional |profile| to the service. |
180 void AddIncident(Profile* profile, scoped_ptr<Incident> incident); | 180 void AddIncident(Profile* profile, std::unique_ptr<Incident> incident); |
181 | 181 |
182 // Clears all data associated with the |incident| relating to the optional | 182 // Clears all data associated with the |incident| relating to the optional |
183 // |profile|. | 183 // |profile|. |
184 void ClearIncident(Profile* profile, scoped_ptr<Incident> incident); | 184 void ClearIncident(Profile* profile, std::unique_ptr<Incident> incident); |
185 | 185 |
186 // Returns true if there are incidents waiting to be sent. | 186 // Returns true if there are incidents waiting to be sent. |
187 bool HasIncidentsToUpload() const; | 187 bool HasIncidentsToUpload() const; |
188 | 188 |
189 // Begins processing a report. If processing is already underway, ensures that | 189 // Begins processing a report. If processing is already underway, ensures that |
190 // collection tasks have completed or are running. | 190 // collection tasks have completed or are running. |
191 void BeginReportProcessing(); | 191 void BeginReportProcessing(); |
192 | 192 |
193 // Begins the process of collating incidents by waiting for incidents to | 193 // Begins the process of collating incidents by waiting for incidents to |
194 // arrive. This function is idempotent. | 194 // arrive. This function is idempotent. |
(...skipping 19 matching lines...) Expand all Loading... |
214 bool WaitingForEnvironmentCollection(); | 214 bool WaitingForEnvironmentCollection(); |
215 | 215 |
216 // Cancels any pending environment collection task and drops any data that has | 216 // Cancels any pending environment collection task and drops any data that has |
217 // already been collected. | 217 // already been collected. |
218 void CancelEnvironmentCollection(); | 218 void CancelEnvironmentCollection(); |
219 | 219 |
220 // A callback invoked on the UI thread when environment data collection is | 220 // A callback invoked on the UI thread when environment data collection is |
221 // complete. Incident report processing continues, either by waiting for the | 221 // complete. Incident report processing continues, either by waiting for the |
222 // collection timeout or by sending an incident report. | 222 // collection timeout or by sending an incident report. |
223 void OnEnvironmentDataCollected( | 223 void OnEnvironmentDataCollected( |
224 scoped_ptr<ClientIncidentReport_EnvironmentData> environment_data); | 224 std::unique_ptr<ClientIncidentReport_EnvironmentData> environment_data); |
225 | 225 |
226 // Starts the asynchronous process of finding the most recent executable | 226 // Starts the asynchronous process of finding the most recent executable |
227 // download if one is not currently being search for and/or has not already | 227 // download if one is not currently being search for and/or has not already |
228 // been found. | 228 // been found. |
229 void BeginDownloadCollection(); | 229 void BeginDownloadCollection(); |
230 | 230 |
231 // True if the service is waiting to discover the most recent download either | 231 // True if the service is waiting to discover the most recent download either |
232 // because a task to do so is outstanding, or because one or more profiles | 232 // because a task to do so is outstanding, or because one or more profiles |
233 // have yet to be added to the ProfileManager. | 233 // have yet to be added to the ProfileManager. |
234 bool WaitingForMostRecentDownload(); | 234 bool WaitingForMostRecentDownload(); |
235 | 235 |
236 // Cancels the search for the most recent executable download. | 236 // Cancels the search for the most recent executable download. |
237 void CancelDownloadCollection(); | 237 void CancelDownloadCollection(); |
238 | 238 |
239 // A callback invoked on the UI thread by the last download finder when the | 239 // A callback invoked on the UI thread by the last download finder when the |
240 // search for the most recent binary download and most recent non-binary | 240 // search for the most recent binary download and most recent non-binary |
241 // download is complete. | 241 // download is complete. |
242 void OnLastDownloadFound( | 242 void OnLastDownloadFound( |
243 scoped_ptr<ClientIncidentReport_DownloadDetails> last_binary_download, | 243 std::unique_ptr<ClientIncidentReport_DownloadDetails> |
244 scoped_ptr<ClientIncidentReport_NonBinaryDownloadDetails> | 244 last_binary_download, |
| 245 std::unique_ptr<ClientIncidentReport_NonBinaryDownloadDetails> |
245 last_non_binary_download); | 246 last_non_binary_download); |
246 | 247 |
247 // Processes all received incidents once all data collection is | 248 // Processes all received incidents once all data collection is |
248 // complete. Incidents originating from profiles that do not participate in | 249 // complete. Incidents originating from profiles that do not participate in |
249 // safe browsing are dropped, incidents that have already been reported are | 250 // safe browsing are dropped, incidents that have already been reported are |
250 // pruned, and prune state is cleared for incidents that are now clear. Report | 251 // pruned, and prune state is cleared for incidents that are now clear. Report |
251 // upload is started if any incidents remain. | 252 // upload is started if any incidents remain. |
252 void ProcessIncidentsIfCollectionComplete(); | 253 void ProcessIncidentsIfCollectionComplete(); |
253 | 254 |
254 // Cancels all uploads, discarding all reports and responses in progress. | 255 // Cancels all uploads, discarding all reports and responses in progress. |
255 void CancelAllReportUploads(); | 256 void CancelAllReportUploads(); |
256 | 257 |
257 // Continues an upload after checking for the CSD whitelist killswitch. | 258 // Continues an upload after checking for the CSD whitelist killswitch. |
258 void OnKillSwitchResult(UploadContext* context, bool is_killswitch_on); | 259 void OnKillSwitchResult(UploadContext* context, bool is_killswitch_on); |
259 | 260 |
260 // Performs processing for a report after succesfully receiving a response. | 261 // Performs processing for a report after succesfully receiving a response. |
261 void HandleResponse(const UploadContext& context); | 262 void HandleResponse(const UploadContext& context); |
262 | 263 |
263 // IncidentReportUploader::OnResultCallback implementation. | 264 // IncidentReportUploader::OnResultCallback implementation. |
264 void OnReportUploadResult(UploadContext* context, | 265 void OnReportUploadResult(UploadContext* context, |
265 IncidentReportUploader::Result result, | 266 IncidentReportUploader::Result result, |
266 scoped_ptr<ClientIncidentResponse> response); | 267 std::unique_ptr<ClientIncidentResponse> response); |
267 | 268 |
268 // DownloadProtectionService::ClientDownloadRequestCallback implementation. | 269 // DownloadProtectionService::ClientDownloadRequestCallback implementation. |
269 void OnClientDownloadRequest(content::DownloadItem* download, | 270 void OnClientDownloadRequest(content::DownloadItem* download, |
270 const ClientDownloadRequest* request); | 271 const ClientDownloadRequest* request); |
271 | 272 |
272 // content::NotificationObserver methods. | 273 // content::NotificationObserver methods. |
273 void Observe(int type, | 274 void Observe(int type, |
274 const content::NotificationSource& source, | 275 const content::NotificationSource& source, |
275 const content::NotificationDetails& details) override; | 276 const content::NotificationDetails& details) override; |
276 | 277 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 // collation_timer_ to fire. | 311 // collation_timer_ to fire. |
311 bool collation_timeout_pending_; | 312 bool collation_timeout_pending_; |
312 | 313 |
313 // A timer upon the firing of which the service will report received | 314 // A timer upon the firing of which the service will report received |
314 // incidents. | 315 // incidents. |
315 base::DelayTimer collation_timer_; | 316 base::DelayTimer collation_timer_; |
316 | 317 |
317 // The report currently being assembled. This becomes non-NULL when an initial | 318 // The report currently being assembled. This becomes non-NULL when an initial |
318 // incident is reported, and returns to NULL when the report is sent for | 319 // incident is reported, and returns to NULL when the report is sent for |
319 // upload. | 320 // upload. |
320 scoped_ptr<ClientIncidentReport> report_; | 321 std::unique_ptr<ClientIncidentReport> report_; |
321 | 322 |
322 // The time at which the initial incident is reported. | 323 // The time at which the initial incident is reported. |
323 base::Time first_incident_time_; | 324 base::Time first_incident_time_; |
324 | 325 |
325 // The time at which the last incident is reported. | 326 // The time at which the last incident is reported. |
326 base::TimeTicks last_incident_time_; | 327 base::TimeTicks last_incident_time_; |
327 | 328 |
328 // The time at which environmental data collection was initiated. | 329 // The time at which environmental data collection was initiated. |
329 base::TimeTicks environment_collection_begin_; | 330 base::TimeTicks environment_collection_begin_; |
330 | 331 |
331 // The time at which download collection was initiated. | 332 // The time at which download collection was initiated. |
332 base::TimeTicks last_download_begin_; | 333 base::TimeTicks last_download_begin_; |
333 | 334 |
334 // Context data for all on-the-record profiles plus the process-wide (NULL) | 335 // Context data for all on-the-record profiles plus the process-wide (NULL) |
335 // context. | 336 // context. |
336 ProfileContextCollection profiles_; | 337 ProfileContextCollection profiles_; |
337 | 338 |
338 // Callbacks registered for performing delayed analysis. | 339 // Callbacks registered for performing delayed analysis. |
339 DelayedCallbackRunner delayed_analysis_callbacks_; | 340 DelayedCallbackRunner delayed_analysis_callbacks_; |
340 | 341 |
341 // Callbacks registered for performing delayed analysis that should only | 342 // Callbacks registered for performing delayed analysis that should only |
342 // be executed for safebrowsing extended reporting users. | 343 // be executed for safebrowsing extended reporting users. |
343 DelayedCallbackRunner extended_reporting_only_delayed_analysis_callbacks_; | 344 DelayedCallbackRunner extended_reporting_only_delayed_analysis_callbacks_; |
344 | 345 |
345 DownloadMetadataManager download_metadata_manager_; | 346 DownloadMetadataManager download_metadata_manager_; |
346 | 347 |
347 // The collection of uploads in progress. | 348 // The collection of uploads in progress. |
348 std::vector<scoped_ptr<UploadContext>> uploads_; | 349 std::vector<std::unique_ptr<UploadContext>> uploads_; |
349 | 350 |
350 // An object that asynchronously searches for the most recent binary download. | 351 // An object that asynchronously searches for the most recent binary download. |
351 // Non-NULL while such a search is outstanding. | 352 // Non-NULL while such a search is outstanding. |
352 scoped_ptr<LastDownloadFinder> last_download_finder_; | 353 std::unique_ptr<LastDownloadFinder> last_download_finder_; |
353 | 354 |
354 // True if IncidentReportingService is enabled at the process level, by a | 355 // True if IncidentReportingService is enabled at the process level, by a |
355 // field trial. | 356 // field trial. |
356 bool enabled_by_field_trial_; | 357 bool enabled_by_field_trial_; |
357 | 358 |
358 // A factory for handing out weak pointers for IncidentReceiver objects. | 359 // A factory for handing out weak pointers for IncidentReceiver objects. |
359 base::WeakPtrFactory<IncidentReportingService> receiver_weak_ptr_factory_; | 360 base::WeakPtrFactory<IncidentReportingService> receiver_weak_ptr_factory_; |
360 | 361 |
361 // A factory for handing out weak pointers for internal asynchronous tasks | 362 // A factory for handing out weak pointers for internal asynchronous tasks |
362 // that are posted during normal processing (e.g., environment collection, | 363 // that are posted during normal processing (e.g., environment collection, |
363 // safe browsing database checks, and report uploads). | 364 // safe browsing database checks, and report uploads). |
364 base::WeakPtrFactory<IncidentReportingService> weak_ptr_factory_; | 365 base::WeakPtrFactory<IncidentReportingService> weak_ptr_factory_; |
365 | 366 |
366 DISALLOW_COPY_AND_ASSIGN(IncidentReportingService); | 367 DISALLOW_COPY_AND_ASSIGN(IncidentReportingService); |
367 }; | 368 }; |
368 | 369 |
369 } // namespace safe_browsing | 370 } // namespace safe_browsing |
370 | 371 |
371 #endif // CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_INCIDENT_REPORTING_SE
RVICE_H_ | 372 #endif // CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_INCIDENT_REPORTING_SE
RVICE_H_ |
OLD | NEW |