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 0e3eb4431eea4e96f5d2a78383d5eb3c571fa2fd..00e17202b6d2e55917fc8c96bfb03ca28b88cedd 100644 |
--- a/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc |
+++ b/chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc |
@@ -28,6 +28,8 @@ |
#include "chrome/browser/safe_browsing/incident_reporting/blacklist_load_incident_handlers.h" |
#include "chrome/browser/safe_browsing/incident_reporting/environment_data_collection.h" |
#include "chrome/browser/safe_browsing/incident_reporting/incident_report_uploader_impl.h" |
+#include "chrome/browser/safe_browsing/incident_reporting/omnibox_incident_handlers.h" |
+#include "chrome/browser/safe_browsing/incident_reporting/omnibox_watcher.h" |
#include "chrome/browser/safe_browsing/incident_reporting/preference_validation_delegate.h" |
#include "chrome/browser/safe_browsing/incident_reporting/tracked_preference_incident_handlers.h" |
#include "chrome/browser/safe_browsing/safe_browsing_service.h" |
@@ -49,8 +51,9 @@ enum IncidentType { |
TRACKED_PREFERENCE = 1, |
BINARY_INTEGRITY = 2, |
BLACKLIST_LOAD = 3, |
+ OMNIBOX_INTERACTION = 4, |
// Values for new incident types go here. |
- NUM_INCIDENT_TYPES = 4 |
+ NUM_INCIDENT_TYPES = 5 |
}; |
// The action taken for an incident; used for user metrics (see |
@@ -93,6 +96,8 @@ size_t CountIncidents(const ClientIncidentReport_IncidentData& incident) { |
++result; |
if (incident.has_blacklist_load()) |
++result; |
+ if (incident.has_omnibox_interaction()) |
+ ++result; |
// Add detection for new incident types here. |
return result; |
} |
@@ -106,9 +111,11 @@ IncidentType GetIncidentType( |
return BINARY_INTEGRITY; |
if (incident_data.has_blacklist_load()) |
return BLACKLIST_LOAD; |
+ if (incident_data.has_omnibox_interaction()) |
+ return OMNIBOX_INTERACTION; |
// Add detection for new incident types here. |
- COMPILE_ASSERT(BLACKLIST_LOAD + 1 == NUM_INCIDENT_TYPES, |
+ COMPILE_ASSERT(OMNIBOX_INTERACTION + 1 == NUM_INCIDENT_TYPES, |
add_support_for_new_types); |
NOTREACHED(); |
return NUM_INCIDENT_TYPES; |
@@ -155,9 +162,13 @@ PersistentIncidentState ComputeIncidentState( |
state.key = GetBlacklistLoadIncidentKey(incident); |
state.digest = GetBlacklistLoadIncidentDigest(incident); |
break; |
+ case OMNIBOX_INTERACTION: |
+ state.key = GetOmniboxIncidentKey(incident); |
+ state.digest = GetOmniboxIncidentDigest(incident); |
+ break; |
// Add handling for new incident types here. |
default: |
- COMPILE_ASSERT(BLACKLIST_LOAD + 1 == NUM_INCIDENT_TYPES, |
+ COMPILE_ASSERT(OMNIBOX_INTERACTION + 1 == NUM_INCIDENT_TYPES, |
add_support_for_new_types); |
NOTREACHED(); |
break; |
@@ -219,6 +230,9 @@ struct IncidentReportingService::ProfileContext { |
// Will contain null values for pruned incidents. |
ScopedVector<ClientIncidentReport_IncidentData> incidents; |
+ // Watches for suspicious omnibox interactions on this profile. |
+ scoped_ptr<OmniboxWatcher> omnibox_watcher; |
+ |
// False until PROFILE_ADDED notification is received. |
bool added; |
@@ -423,6 +437,11 @@ void IncidentReportingService::OnProfileAdded(Profile* profile) { |
// so that the service can determine whether or not it can evaluate a |
// profile's preferences at the time of incident addition. |
ProfileContext* context = GetOrCreateProfileContext(profile); |
+ // Start watching the profile now if necessary. |
+ if (!context->omnibox_watcher) { |
+ context->omnibox_watcher.reset( |
+ new OmniboxWatcher(profile, GetAddIncidentCallback(profile))); |
+ } |
context->added = true; |
const bool safe_browsing_enabled = |