Index: chrome/browser/safe_browsing/safe_browsing_blocking_page.cc |
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc |
index be1adc97f847e1c93cf916edbfa2c55ae0c31167..4cf9f2e06c2742b7a9396b133ec8ebf3e08d5fda 100644 |
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc |
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc |
@@ -106,6 +106,7 @@ const char kDisplayCheckBox[] = "displaycheckbox"; |
// Constants for the Experience Sampling instrumentation. |
#if defined(ENABLE_EXTENSIONS) |
const char kEventNameMalware[] = "safebrowsing_interstitial_"; |
+const char kEventNameHarmful[] = "harmful_interstitial_"; |
const char kEventNamePhishing[] = "phishing_interstitial_"; |
const char kEventNameOther[] = "safebrowsing_other_interstitial_"; |
#endif |
@@ -161,6 +162,7 @@ SafeBrowsingBlockingPage::SafeBrowsingBlockingPage( |
create_view_(true), |
num_visits_(-1) { |
bool malware = false; |
+ bool harmful = false; |
bool phishing = false; |
for (UnsafeResourceList::const_iterator iter = unsafe_resources_.begin(); |
iter != unsafe_resources_.end(); ++iter) { |
@@ -169,15 +171,19 @@ SafeBrowsingBlockingPage::SafeBrowsingBlockingPage( |
if (threat_type == SB_THREAT_TYPE_URL_MALWARE || |
threat_type == SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL) { |
malware = true; |
+ } else if (threat_type == SB_THREAT_TYPE_URL_HARMFUL) { |
+ harmful = true; |
} else { |
DCHECK(threat_type == SB_THREAT_TYPE_URL_PHISHING || |
threat_type == SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL); |
phishing = true; |
} |
} |
- DCHECK(phishing || malware); |
+ DCHECK(phishing || malware || harmful); |
if (malware) |
interstitial_type_ = TYPE_MALWARE; |
+ else if (harmful) |
+ interstitial_type_ = TYPE_HARMFUL; |
else |
interstitial_type_ = TYPE_PHISHING; |
@@ -224,6 +230,9 @@ SafeBrowsingBlockingPage::SafeBrowsingBlockingPage( |
case TYPE_MALWARE: |
event_name = kEventNameMalware; |
break; |
+ case TYPE_HARMFUL: |
+ event_name = kEventNameHarmful; |
+ break; |
case TYPE_PHISHING: |
event_name = kEventNamePhishing; |
break; |
@@ -492,13 +501,16 @@ void SafeBrowsingBlockingPage::RecordUserDecision(Decision decision) { |
decision, |
MAX_DECISION); |
break; |
+ case TYPE_HARMFUL: |
+ UMA_HISTOGRAM_ENUMERATION("interstitial.harmful.decision", |
+ decision, |
+ MAX_DECISION); |
+ break; |
case TYPE_PHISHING: |
UMA_HISTOGRAM_ENUMERATION("interstitial.phishing.decision", |
decision, |
MAX_DECISION); |
break; |
- default: |
- NOTREACHED(); |
} |
#if defined(ENABLE_EXTENSIONS) |
@@ -541,6 +553,11 @@ void SafeBrowsingBlockingPage::RecordUserInteraction(Interaction interaction) { |
interaction, |
MAX_INTERACTION); |
break; |
+ case TYPE_HARMFUL: |
+ UMA_HISTOGRAM_ENUMERATION("interstitial.harmful.interaction", |
+ interaction, |
+ MAX_INTERACTION); |
+ break; |
case TYPE_PHISHING: |
UMA_HISTOGRAM_ENUMERATION("interstitial.phishing.interaction", |
interaction, |
@@ -690,10 +707,17 @@ std::string SafeBrowsingBlockingPage::GetHTMLContents() { |
"overridable", |
!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)); |
- if (interstitial_type_ == TYPE_PHISHING) |
- PopulatePhishingLoadTimeData(&load_time_data); |
- else |
- PopulateMalwareLoadTimeData(&load_time_data); |
+ switch (interstitial_type_) { |
+ case TYPE_MALWARE: |
+ PopulateMalwareLoadTimeData(&load_time_data); |
+ break; |
+ case TYPE_HARMFUL: |
+ PopulateHarmfulLoadTimeData(&load_time_data); |
+ break; |
+ case TYPE_PHISHING: |
+ PopulatePhishingLoadTimeData(&load_time_data); |
+ break; |
+ } |
base::StringPiece html( |
ResourceBundle::GetSharedInstance().GetRawDataResource( |
@@ -742,6 +766,41 @@ void SafeBrowsingBlockingPage::PopulateMalwareLoadTimeData( |
} |
} |
+void SafeBrowsingBlockingPage::PopulateHarmfulLoadTimeData( |
+ base::DictionaryValue* load_time_data) { |
+ load_time_data->SetBoolean("phishing", false); |
+ load_time_data->SetString( |
+ "heading", l10n_util::GetStringUTF16(IDS_HARMFUL_V3_HEADING)); |
+ load_time_data->SetString( |
+ "primaryParagraph", |
+ l10n_util::GetStringFUTF16( |
+ IDS_HARMFUL_V3_PRIMARY_PARAGRAPH, |
+ base::UTF8ToUTF16(url_.host()))); |
+ load_time_data->SetString( |
+ "explanationParagraph", |
+ l10n_util::GetStringFUTF16( |
+ IDS_HARMFUL_V3_EXPLANATION_PARAGRAPH, |
+ base::UTF8ToUTF16(url_.host()))); |
+ load_time_data->SetString( |
+ "finalParagraph", |
+ l10n_util::GetStringUTF16(IDS_HARMFUL_V3_PROCEED_PARAGRAPH)); |
+ |
+ load_time_data->SetBoolean(kDisplayCheckBox, CanShowMalwareDetailsOption()); |
+ if (CanShowMalwareDetailsOption()) { |
+ std::string privacy_link = base::StringPrintf( |
+ kPrivacyLinkHtml, |
+ l10n_util::GetStringUTF8( |
+ IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE).c_str()); |
+ load_time_data->SetString( |
+ "optInLink", |
+ l10n_util::GetStringFUTF16(IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE, |
+ base::UTF8ToUTF16(privacy_link))); |
+ load_time_data->SetBoolean( |
+ kBoxChecked, |
+ IsPrefEnabled(prefs::kSafeBrowsingExtendedReportingEnabled)); |
+ } |
+} |
+ |
void SafeBrowsingBlockingPage::PopulatePhishingLoadTimeData( |
base::DictionaryValue* load_time_data) { |
load_time_data->SetBoolean("phishing", true); |