Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2519)

Unified Diff: chrome/browser/safe_browsing/incident_reporting_service.h

Issue 470213002: Moving all the incident reporting stuff to a common folder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@binsign
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/safe_browsing/incident_reporting_service.h
diff --git a/chrome/browser/safe_browsing/incident_reporting_service.h b/chrome/browser/safe_browsing/incident_reporting_service.h
deleted file mode 100644
index 196885f47aa76047d6e8b3f69ce83e8af0e2a10d..0000000000000000000000000000000000000000
--- a/chrome/browser/safe_browsing/incident_reporting_service.h
+++ /dev/null
@@ -1,316 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_SERVICE_H_
-#define CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_SERVICE_H_
-
-#include <stdint.h>
-
-#include <map>
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/scoped_vector.h"
-#include "base/memory/weak_ptr.h"
-#include "base/threading/thread_checker.h"
-#include "base/time/time.h"
-#include "base/timer/timer.h"
-#include "chrome/browser/safe_browsing/add_incident_callback.h"
-#include "chrome/browser/safe_browsing/delayed_analysis_callback.h"
-#include "chrome/browser/safe_browsing/delayed_callback_runner.h"
-#include "chrome/browser/safe_browsing/incident_report_uploader.h"
-#include "chrome/browser/safe_browsing/last_download_finder.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-
-class Profile;
-class SafeBrowsingDatabaseManager;
-class SafeBrowsingService;
-class TrackedPreferenceValidationDelegate;
-
-namespace base {
-class TaskRunner;
-}
-
-namespace content {
-class NotificationDetails;
-class NotificationSource;
-}
-
-namespace net {
-class URLRequestContextGetter;
-}
-
-namespace safe_browsing {
-
-class ClientIncidentReport;
-class ClientIncidentReport_DownloadDetails;
-class ClientIncidentReport_EnvironmentData;
-class ClientIncidentReport_IncidentData;
-
-// A class that manages the collection of incidents and submission of incident
-// reports to the safe browsing client-side detection service. The service
-// begins operation when an incident is reported via the AddIncident method.
-// Incidents reported from a profile that is loading are held until the profile
-// is fully created. Incidents originating from profiles that do not participate
-// in safe browsing are dropped. Process-wide incidents are affiliated with a
-// profile that participates in safe browsing when one becomes available.
-// Following the addition of an incident that is not dropped, the service
-// collects environmental data, finds the most recent binary download, and waits
-// a bit. Additional incidents that arrive during this time are collated with
-// the initial incident. Finally, already-reported incidents are pruned and any
-// remaining are uploaded in an incident report.
-class IncidentReportingService : public content::NotificationObserver {
- public:
- IncidentReportingService(SafeBrowsingService* safe_browsing_service,
- const scoped_refptr<net::URLRequestContextGetter>&
- request_context_getter);
-
- // All incident collection, data collection, and uploads in progress are
- // dropped at destruction.
- virtual ~IncidentReportingService();
-
- // Returns a callback by which external components can add an incident to the
- // service on behalf of |profile|. The callback may outlive the service, but
- // will no longer have any effect after the service is deleted. The callback
- // must not be run after |profile| has been destroyed.
- AddIncidentCallback GetAddIncidentCallback(Profile* profile);
-
- // Returns a preference validation delegate that adds incidents to the service
- // for validation failures in |profile|. The delegate may outlive the service,
- // but incidents reported by it will no longer have any effect after the
- // service is deleted. The lifetime of the delegate should not extend beyond
- // that of the profile it services.
- scoped_ptr<TrackedPreferenceValidationDelegate>
- CreatePreferenceValidationDelegate(Profile* profile);
-
- // Registers |callback| to be run after some delay following process launch.
- void RegisterDelayedAnalysisCallback(const DelayedAnalysisCallback& callback);
-
- protected:
- // A pointer to a function that populates a protobuf with environment data.
- typedef void (*CollectEnvironmentDataFn)(
- ClientIncidentReport_EnvironmentData*);
-
- // For testing so that the TaskRunner used for delayed analysis callbacks can
- // be specified.
- IncidentReportingService(
- SafeBrowsingService* safe_browsing_service,
- const scoped_refptr<net::URLRequestContextGetter>& request_context_getter,
- base::TimeDelta delayed_task_interval,
- const scoped_refptr<base::TaskRunner>& delayed_task_runner);
-
- // Sets the function called by the service to collect environment data and the
- // task runner on which it is called. Used by unit tests to provide a fake
- // environment data collector.
- void SetCollectEnvironmentHook(
- CollectEnvironmentDataFn collect_environment_data_hook,
- const scoped_refptr<base::TaskRunner>& task_runner);
-
- // Handles the addition of a new profile to the ProfileManager. Creates a new
- // context for |profile| if one does not exist, drops any received incidents
- // for the profile if the profile is not participating in safe browsing, and
- // initiates a new search for the most recent download if a report is being
- // assembled and the most recent has not been found. Overridden by unit tests
- // to inject incidents prior to creation.
- virtual void OnProfileAdded(Profile* profile);
-
- // Initiates a search for the most recent binary download. Overriden by unit
- // tests to provide a fake finder.
- virtual scoped_ptr<LastDownloadFinder> CreateDownloadFinder(
- const LastDownloadFinder::LastDownloadCallback& callback);
-
- // Initiates an upload. Overridden by unit tests to provide a fake uploader.
- virtual scoped_ptr<IncidentReportUploader> StartReportUpload(
- const IncidentReportUploader::OnResultCallback& callback,
- const scoped_refptr<net::URLRequestContextGetter>& request_context_getter,
- const ClientIncidentReport& report);
-
- private:
- struct ProfileContext;
- class UploadContext;
-
- // A mapping of profiles to contexts holding state about received incidents.
- typedef std::map<Profile*, ProfileContext*> ProfileContextCollection;
-
- // Returns the context for |profile|, creating it if it does not exist.
- ProfileContext* GetOrCreateProfileContext(Profile* profile);
-
- // Returns the context for |profile|, or NULL if it is unknown.
- ProfileContext* GetProfileContext(Profile* profile);
-
- // Handles the destruction of a profile. Incidents reported for the profile
- // but not yet uploaded are dropped.
- void OnProfileDestroyed(Profile* profile);
-
- // Returns an initialized profile that participates in safe browsing. Profiles
- // participating in extended safe browsing are preferred.
- Profile* FindEligibleProfile() const;
-
- // Adds |incident_data| to the service. The incident_time_msec field is
- // populated with the current time if the caller has not already done so.
- void AddIncident(Profile* profile,
- scoped_ptr<ClientIncidentReport_IncidentData> incident_data);
-
- // Begins processing a report. If processing is already underway, ensures that
- // collection tasks have completed or are running.
- void BeginReportProcessing();
-
- // Begins the process of collating incidents by waiting for incidents to
- // arrive. This function is idempotent.
- void BeginIncidentCollation();
-
- // Starts a task to collect environment data in the blocking pool.
- void BeginEnvironmentCollection();
-
- // Returns true if the environment collection task is outstanding.
- bool WaitingForEnvironmentCollection();
-
- // Cancels any pending environment collection task and drops any data that has
- // already been collected.
- void CancelEnvironmentCollection();
-
- // A callback invoked on the UI thread when environment data collection is
- // complete. Incident report processing continues, either by waiting for the
- // collection timeout or by sending an incident report.
- void OnEnvironmentDataCollected(
- scoped_ptr<ClientIncidentReport_EnvironmentData> environment_data);
-
- // Returns true if the service is waiting for additional incidents before
- // uploading a report.
- bool WaitingToCollateIncidents();
-
- // Cancels the collection timeout.
- void CancelIncidentCollection();
-
- // A callback invoked on the UI thread after which incident collation has
- // completed. Incident report processing continues, either by waiting for
- // environment data or the most recent download to arrive or by sending an
- // incident report.
- void OnCollationTimeout();
-
- // Starts the asynchronous process of finding the most recent executable
- // download if one is not currently being search for and/or has not already
- // been found.
- void BeginDownloadCollection();
-
- // True if the service is waiting to discover the most recent download either
- // because a task to do so is outstanding, or because one or more profiles
- // have yet to be added to the ProfileManager.
- bool WaitingForMostRecentDownload();
-
- // Cancels the search for the most recent executable download.
- void CancelDownloadCollection();
-
- // A callback invoked on the UI thread by the last download finder when the
- // search for the most recent binary download is complete.
- void OnLastDownloadFound(
- scoped_ptr<ClientIncidentReport_DownloadDetails> last_download);
-
- // Uploads an incident report if all data collection is complete. Incidents
- // originating from profiles that do not participate in safe browsing are
- // dropped.
- void UploadIfCollectionComplete();
-
- // Cancels all uploads, discarding all reports and responses in progress.
- void CancelAllReportUploads();
-
- // Continues an upload after checking for the CSD whitelist killswitch.
- void OnKillSwitchResult(UploadContext* context, bool is_killswitch_on);
-
- // Performs processing for a report after succesfully receiving a response.
- void HandleResponse(const UploadContext& context);
-
- // IncidentReportUploader::OnResultCallback implementation.
- void OnReportUploadResult(UploadContext* context,
- IncidentReportUploader::Result result,
- scoped_ptr<ClientIncidentResponse> response);
-
- // content::NotificationObserver methods.
- virtual void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) OVERRIDE;
-
- base::ThreadChecker thread_checker_;
-
- // The safe browsing database manager, through which the whitelist killswitch
- // is checked.
- scoped_refptr<SafeBrowsingDatabaseManager> database_manager_;
-
- // Accessor for an URL context with which reports will be sent.
- scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
-
- // A pointer to a function that collects environment data. The function will
- // be run by |environment_collection_task_runner_|. This is ordinarily
- // CollectEnvironmentData, but may be overridden by tests; see
- // SetCollectEnvironmentHook.
- CollectEnvironmentDataFn collect_environment_data_fn_;
-
- // The task runner on which environment collection takes place. This is
- // ordinarily a runner in the browser's blocking pool that will skip the
- // collection task at shutdown if it has not yet started.
- scoped_refptr<base::TaskRunner> environment_collection_task_runner_;
-
- // Registrar for observing profile lifecycle notifications.
- content::NotificationRegistrar notification_registrar_;
-
- // True when the asynchronous environment collection task has been fired off
- // but has not yet completed.
- bool environment_collection_pending_;
-
- // True when an incident has been received and the service is waiting for the
- // collation_timer_ to fire.
- bool collation_timeout_pending_;
-
- // A timer upon the firing of which the service will report received
- // incidents.
- base::DelayTimer<IncidentReportingService> collation_timer_;
-
- // The report currently being assembled. This becomes non-NULL when an initial
- // incident is reported, and returns to NULL when the report is sent for
- // upload.
- scoped_ptr<ClientIncidentReport> report_;
-
- // The time at which the initial incident is reported.
- base::Time first_incident_time_;
-
- // The time at which the last incident is reported.
- base::TimeTicks last_incident_time_;
-
- // The time at which environmental data collection was initiated.
- base::TimeTicks environment_collection_begin_;
-
- // The time at which download collection was initiated.
- base::TimeTicks last_download_begin_;
-
- // Context data for all on-the-record profiles plus the process-wide (NULL)
- // context.
- ProfileContextCollection profiles_;
-
- // Callbacks registered for performing delayed analysis.
- DelayedCallbackRunner delayed_analysis_callbacks_;
-
- // The collection of uploads in progress.
- ScopedVector<UploadContext> uploads_;
-
- // An object that asynchronously searches for the most recent binary download.
- // Non-NULL while such a search is outstanding.
- scoped_ptr<LastDownloadFinder> last_download_finder_;
-
- // A factory for handing out weak pointers for AddIncident callbacks.
- base::WeakPtrFactory<IncidentReportingService> receiver_weak_ptr_factory_;
-
- // A factory for handing out weak pointers for internal asynchronous tasks
- // that are posted during normal processing (e.g., environment collection,
- // safe browsing database checks, and report uploads).
- base::WeakPtrFactory<IncidentReportingService> weak_ptr_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(IncidentReportingService);
-};
-
-} // namespace safe_browsing
-
-#endif // CHROME_BROWSER_SAFE_BROWSING_INCIDENT_REPORTING_SERVICE_H_

Powered by Google App Engine
This is Rietveld 408576698