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 e944af9613ae2866a57aec886acd27335ca73346..9c78afa989a423e944b1521219c292e8cd3d1d2f 100644 |
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc |
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc |
@@ -131,57 +131,23 @@ SafeBrowsingBlockingPage::SafeBrowsingBlockingPage( |
WebContents* web_contents, |
const GURL& main_frame_url, |
const UnsafeResourceList& unsafe_resources) |
- : SecurityInterstitialPage(web_contents, unsafe_resources[0].url), |
+ : SecurityInterstitialPage( |
+ web_contents, |
+ unsafe_resources[0].url, |
+ CreateMetricsHelper(web_contents, unsafe_resources)), |
threat_details_proceed_delay_ms_(kThreatDetailsProceedDelayMilliSeconds), |
ui_manager_(ui_manager), |
is_main_frame_load_blocked_(IsMainPageLoadBlocked(unsafe_resources)), |
main_frame_url_(main_frame_url), |
unsafe_resources_(unsafe_resources), |
- proceeded_(false) { |
- bool malware = false; |
- bool harmful = false; |
- bool phishing = false; |
- for (UnsafeResourceList::const_iterator iter = unsafe_resources_.begin(); |
- iter != unsafe_resources_.end(); ++iter) { |
- const UnsafeResource& resource = *iter; |
- SBThreatType threat_type = resource.threat_type; |
- 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_UNWANTED) { |
- 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 || harmful); |
- if (malware) |
- interstitial_reason_ = SB_REASON_MALWARE; |
- else if (harmful) |
- interstitial_reason_ = SB_REASON_HARMFUL; |
- else |
- interstitial_reason_ = SB_REASON_PHISHING; |
- |
- // This must be done after calculating |interstitial_reason_| above. |
- security_interstitials::MetricsHelper::ReportDetails reporting_info; |
- reporting_info.metric_prefix = GetMetricPrefix(); |
- reporting_info.extra_suffix = GetExtraMetricsSuffix(); |
- reporting_info.rappor_prefix = GetRapporPrefix(); |
- reporting_info.deprecated_rappor_prefix = GetDeprecatedRapporPrefix(); |
- reporting_info.rappor_report_type = |
- rappor::LOW_FREQUENCY_SAFEBROWSING_RAPPOR_TYPE; |
- reporting_info.deprecated_rappor_report_type = |
- rappor::SAFEBROWSING_RAPPOR_TYPE; |
- set_metrics_helper(base::MakeUnique<ChromeMetricsHelper>( |
- web_contents, request_url(), reporting_info, GetSamplingEventName())); |
- metrics_helper()->RecordUserDecision( |
+ proceeded_(false), |
+ interstitial_reason_(GetInterstitialReason(unsafe_resources)) { |
+ controller()->metrics_helper()->RecordUserDecision( |
security_interstitials::MetricsHelper::SHOW); |
- metrics_helper()->RecordUserInteraction( |
+ controller()->metrics_helper()->RecordUserInteraction( |
security_interstitials::MetricsHelper::TOTAL_VISITS); |
if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) { |
- metrics_helper()->RecordUserDecision( |
+ controller()->metrics_helper()->RecordUserDecision( |
security_interstitials::MetricsHelper::PROCEEDING_DISABLED); |
} |
@@ -355,7 +321,7 @@ void SafeBrowsingBlockingPage::OnProceed() { |
proceeded_ = true; |
// Send the threat details, if we opted to. |
FinishThreatDetails(threat_details_proceed_delay_ms_, true, /* did_proceed */ |
- metrics_helper()->NumVisits()); |
+ controller()->metrics_helper()->NumVisits()); |
ui_manager_->OnBlockingPageDone(unsafe_resources_, true); |
@@ -398,13 +364,13 @@ void SafeBrowsingBlockingPage::OnDontProceed() { |
return; |
if (!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) { |
- metrics_helper()->RecordUserDecision( |
+ controller()->metrics_helper()->RecordUserDecision( |
security_interstitials::MetricsHelper::DONT_PROCEED); |
} |
// Send the malware details, if we opted to. |
FinishThreatDetails(0, false /* did_proceed */, |
- metrics_helper()->NumVisits()); // No delay |
+ controller()->metrics_helper()->NumVisits()); // No delay |
ui_manager_->OnBlockingPageDone(unsafe_resources_, false); |
@@ -445,7 +411,7 @@ void SafeBrowsingBlockingPage::FinishThreatDetails(int64_t delay_ms, |
if (!enabled) |
return; |
- metrics_helper()->RecordUserInteraction( |
+ controller()->metrics_helper()->RecordUserInteraction( |
security_interstitials::MetricsHelper::EXTENDED_REPORTING_IS_ENABLED); |
// Finish the malware details collection, send it over. |
BrowserThread::PostDelayedTask( |
@@ -520,16 +486,19 @@ bool SafeBrowsingBlockingPage::IsMainPageLoadBlocked( |
unsafe_resources[0].IsMainPageLoadBlocked(); |
} |
-std::string SafeBrowsingBlockingPage::GetMetricPrefix() const { |
- bool primary_subresource = unsafe_resources_[0].is_subresource; |
- switch (interstitial_reason_) { |
+// static |
+std::string SafeBrowsingBlockingPage::GetMetricPrefix( |
+ const UnsafeResourceList& unsafe_resources, |
+ SBInterstitialReason interstitial_reason) { |
+ bool primary_subresource = unsafe_resources[0].is_subresource; |
+ switch (interstitial_reason) { |
case SB_REASON_MALWARE: |
return primary_subresource ? "malware_subresource" : "malware"; |
case SB_REASON_HARMFUL: |
return primary_subresource ? "harmful_subresource" : "harmful"; |
case SB_REASON_PHISHING: |
ThreatPatternType threat_pattern_type = |
- unsafe_resources_[0].threat_metadata.threat_pattern_type; |
+ unsafe_resources[0].threat_metadata.threat_pattern_type; |
if (threat_pattern_type == ThreatPatternType::PHISHING || |
threat_pattern_type == ThreatPatternType::NONE) |
return primary_subresource ? "phishing_subresource" : "phishing"; |
@@ -546,8 +515,10 @@ std::string SafeBrowsingBlockingPage::GetMetricPrefix() const { |
} |
// We populate a parallel set of metrics to differentiate some threat sources. |
-std::string SafeBrowsingBlockingPage::GetExtraMetricsSuffix() const { |
- switch (unsafe_resources_[0].threat_source) { |
+// static |
+std::string SafeBrowsingBlockingPage::GetExtraMetricsSuffix( |
+ const UnsafeResourceList& unsafe_resources) { |
+ switch (unsafe_resources[0].threat_source) { |
case safe_browsing::ThreatSource::DATA_SAVER: |
return "from_data_saver"; |
case safe_browsing::ThreatSource::REMOTE: |
@@ -566,8 +537,10 @@ std::string SafeBrowsingBlockingPage::GetExtraMetricsSuffix() const { |
return std::string(); |
} |
-std::string SafeBrowsingBlockingPage::GetRapporPrefix() const { |
- switch (interstitial_reason_) { |
+// static |
+std::string SafeBrowsingBlockingPage::GetRapporPrefix( |
+ SBInterstitialReason interstitial_reason) { |
+ switch (interstitial_reason) { |
case SB_REASON_MALWARE: |
return "malware2"; |
case SB_REASON_HARMFUL: |
@@ -579,8 +552,10 @@ std::string SafeBrowsingBlockingPage::GetRapporPrefix() const { |
return std::string(); |
} |
-std::string SafeBrowsingBlockingPage::GetDeprecatedRapporPrefix() const { |
- switch (interstitial_reason_) { |
+// static |
+std::string SafeBrowsingBlockingPage::GetDeprecatedRapporPrefix( |
+ SBInterstitialReason interstitial_reason) { |
+ switch (interstitial_reason) { |
case SB_REASON_MALWARE: |
return "malware"; |
case SB_REASON_HARMFUL: |
@@ -592,8 +567,10 @@ std::string SafeBrowsingBlockingPage::GetDeprecatedRapporPrefix() const { |
return std::string(); |
} |
-std::string SafeBrowsingBlockingPage::GetSamplingEventName() const { |
- switch (interstitial_reason_) { |
+// static |
+std::string SafeBrowsingBlockingPage::GetSamplingEventName( |
+ SBInterstitialReason interstitial_reason) { |
+ switch (interstitial_reason) { |
case SB_REASON_MALWARE: |
return kEventNameMalware; |
case SB_REASON_HARMFUL: |
@@ -605,6 +582,60 @@ std::string SafeBrowsingBlockingPage::GetSamplingEventName() const { |
} |
} |
+// static |
+SafeBrowsingBlockingPage::SBInterstitialReason |
+SafeBrowsingBlockingPage::GetInterstitialReason( |
+ const UnsafeResourceList& unsafe_resources) { |
+ bool malware = false; |
+ bool harmful = false; |
+ bool phishing = false; |
+ for (UnsafeResourceList::const_iterator iter = unsafe_resources.begin(); |
+ iter != unsafe_resources.end(); ++iter) { |
+ const SafeBrowsingUIManager::UnsafeResource& resource = *iter; |
+ safe_browsing::SBThreatType threat_type = resource.threat_type; |
+ 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_UNWANTED) { |
+ 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 || harmful); |
+ if (malware) |
+ return SB_REASON_MALWARE; |
+ else if (harmful) |
+ return SB_REASON_HARMFUL; |
+ return SB_REASON_PHISHING; |
+} |
+ |
+// static |
+std::unique_ptr<ChromeMetricsHelper> |
+SafeBrowsingBlockingPage::CreateMetricsHelper( |
+ WebContents* web_contents, |
+ const UnsafeResourceList& unsafe_resources) { |
+ SBInterstitialReason interstitial_reason = |
+ GetInterstitialReason(unsafe_resources); |
+ GURL request_url(unsafe_resources[0].url); |
+ security_interstitials::MetricsHelper::ReportDetails reporting_info; |
+ reporting_info.metric_prefix = |
+ GetMetricPrefix(unsafe_resources, interstitial_reason); |
+ reporting_info.extra_suffix = GetExtraMetricsSuffix(unsafe_resources); |
+ reporting_info.rappor_prefix = GetRapporPrefix(interstitial_reason); |
+ reporting_info.deprecated_rappor_prefix = |
+ GetDeprecatedRapporPrefix(interstitial_reason); |
+ reporting_info.rappor_report_type = |
+ rappor::LOW_FREQUENCY_SAFEBROWSING_RAPPOR_TYPE; |
+ reporting_info.deprecated_rappor_report_type = |
+ rappor::SAFEBROWSING_RAPPOR_TYPE; |
+ return std::unique_ptr<ChromeMetricsHelper>( |
+ new ChromeMetricsHelper(web_contents, request_url, reporting_info, |
+ GetSamplingEventName(interstitial_reason))); |
+} |
+ |
void SafeBrowsingBlockingPage::PopulateInterstitialStrings( |
base::DictionaryValue* load_time_data) { |
CHECK(load_time_data); |