Index: chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc |
diff --git a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc |
index 5878376b182a80665758be80b75b39912bb9a254..edefa8f054f459eae80dd7ecff97fad2622818d5 100644 |
--- a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc |
+++ b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc |
@@ -320,6 +320,11 @@ IncidentReportingService::IncidentReportingService( |
content::BrowserThread::GetBlockingPool() |
->GetTaskRunnerWithShutdownBehavior( |
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)), |
+ extended_reporting_only_delayed_analysis_callbacks_( |
+ base::TimeDelta::FromMilliseconds(kDefaultCallbackIntervalMs), |
+ content::BrowserThread::GetBlockingPool() |
+ ->GetTaskRunnerWithShutdownBehavior( |
+ base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)), |
download_metadata_manager_(content::BrowserThread::GetBlockingPool()), |
receiver_weak_ptr_factory_(this), |
weak_ptr_factory_(this) { |
@@ -387,6 +392,26 @@ void IncidentReportingService::RegisterDelayedAnalysisCallback( |
delayed_analysis_callbacks_.Start(); |
} |
+void IncidentReportingService:: |
+ RegisterExtendedReportingOnlyDelayedAnalysisCallback( |
+ const DelayedAnalysisCallback& callback) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
+ // |callback| will be run on the blocking pool. The receiver will bounce back |
+ // to the origin thread if needed. |
+ extended_reporting_only_delayed_analysis_callbacks_.RegisterCallback( |
+ base::Bind(callback, base::Passed(GetIncidentReceiver()))); |
+ |
+ // Start running the callbacks if any profiles have opted into Safebrowsing |
+ // extended reporting. If none are now, running will commence if/when such a |
+ // profile is added. |
+ Profile* profile = FindEligibleProfile(); |
+ if (profile && |
+ profile->GetPrefs()->GetBoolean( |
+ prefs::kSafeBrowsingExtendedReportingEnabled)) |
+ extended_reporting_only_delayed_analysis_callbacks_.Start(); |
+} |
+ |
void IncidentReportingService::AddDownloadManager( |
content::DownloadManager* download_manager) { |
download_metadata_manager_.AddDownloadManager(download_manager); |
@@ -413,6 +438,8 @@ IncidentReportingService::IncidentReportingService( |
this, |
&IncidentReportingService::OnCollationTimeout), |
delayed_analysis_callbacks_(delayed_task_interval, delayed_task_runner), |
+ extended_reporting_only_delayed_analysis_callbacks_(delayed_task_interval, |
+ delayed_task_runner), |
download_metadata_manager_(content::BrowserThread::GetBlockingPool()), |
receiver_weak_ptr_factory_(this), |
weak_ptr_factory_(this) { |
@@ -472,6 +499,12 @@ void IncidentReportingService::OnProfileAdded(Profile* profile) { |
// if they're already running. |
delayed_analysis_callbacks_.Start(); |
+ if (profile && |
+ profile->GetPrefs()->GetBoolean( |
+ prefs::kSafeBrowsingExtendedReportingEnabled)) { |
+ extended_reporting_only_delayed_analysis_callbacks_.Start(); |
+ } |
+ |
// Start a new report if there are process-wide incidents, or incidents for |
// this profile. |
if ((GetProfileContext(nullptr) && |