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

Unified Diff: chrome/browser/safe_browsing/safe_browsing_blocking_page.cc

Issue 839183002: Remove redundancy in security interstitial UMA logic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Answering mattm's questions Created 5 years, 11 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/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 667e09fe0392abec422bba38d0f8d4576add7f75..6657510cc3c9b705eeabb975af90db9f10f8db17 100644
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
@@ -22,7 +22,6 @@
#include "base/time/time.h"
#include "base/values.h"
#include "chrome/browser/browser_process.h"
-#include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/renderer_preferences_util.h"
#include "chrome/browser/safe_browsing/malware_details.h"
@@ -44,10 +43,6 @@
#include "net/base/escape.h"
#include "ui/base/l10n/l10n_util.h"
-#if defined(ENABLE_EXTENSIONS)
-#include "chrome/browser/extensions/api/experience_sampling_private/experience_sampling.h"
-#endif
-
using base::UserMetricsAction;
using content::BrowserThread;
using content::InterstitialPage;
@@ -55,10 +50,6 @@ using content::OpenURLParams;
using content::Referrer;
using content::WebContents;
-#if defined(ENABLE_EXTENSIONS)
-using extensions::ExperienceSamplingEvent;
-#endif
-
namespace {
// For malware interstitial pages, we link the problematic URL to Google's
@@ -102,12 +93,10 @@ const char kBoxChecked[] = "boxchecked";
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
base::LazyInstance<SafeBrowsingBlockingPage::UnsafeResourceMap>
g_unsafe_resource_map = LAZY_INSTANCE_INITIALIZER;
@@ -158,8 +147,7 @@ SafeBrowsingBlockingPage::SafeBrowsingBlockingPage(
report_loop_(NULL),
is_main_frame_load_blocked_(IsMainPageLoadBlocked(unsafe_resources)),
unsafe_resources_(unsafe_resources),
- proceeded_(false),
- num_visits_(-1) {
+ proceeded_(false) {
bool malware = false;
bool harmful = false;
bool phishing = false;
@@ -180,26 +168,21 @@ SafeBrowsingBlockingPage::SafeBrowsingBlockingPage(
}
DCHECK(phishing || malware || harmful);
if (malware)
- interstitial_type_ = TYPE_MALWARE;
+ interstitial_reason_ = SB_REASON_MALWARE;
else if (harmful)
- interstitial_type_ = TYPE_HARMFUL;
+ interstitial_reason_ = SB_REASON_HARMFUL;
else
- interstitial_type_ = TYPE_PHISHING;
-
- RecordUserDecision(SHOW);
- RecordUserInteraction(TOTAL_VISITS);
- if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled))
- RecordUserDecision(PROCEEDING_DISABLED);
-
- HistoryService* history_service = HistoryServiceFactory::GetForProfile(
- Profile::FromBrowserContext(web_contents->GetBrowserContext()),
- ServiceAccessType::EXPLICIT_ACCESS);
- if (history_service) {
- history_service->GetVisibleVisitCountToHost(
- request_url(),
- base::Bind(&SafeBrowsingBlockingPage::OnGotHistoryCount,
- base::Unretained(this)),
- &request_tracker_);
+ interstitial_reason_ = SB_REASON_PHISHING;
+
+ uma_helper_.reset(new SecurityInterstitialUmaHelper(
+ web_contents, request_url(),
+ GetHistogramPrefix(), GetSamplingEventName()));
+ uma_helper_->RecordUserDecision(SecurityInterstitialUmaHelper::SHOW);
+ uma_helper_->RecordUserInteraction(
+ SecurityInterstitialUmaHelper::TOTAL_VISITS);
+ if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
+ uma_helper_->RecordUserDecision(
+ SecurityInterstitialUmaHelper::PROCEEDING_DISABLED);
}
if (!is_main_frame_load_blocked_) {
@@ -220,31 +203,6 @@ SafeBrowsingBlockingPage::SafeBrowsingBlockingPage(
malware_details_ = MalwareDetails::NewMalwareDetails(
ui_manager_, web_contents, unsafe_resources[0]);
}
-
-#if defined(ENABLE_EXTENSIONS)
- // ExperienceSampling: Set up new sampling event for this interstitial.
- // This needs to handle all types of warnings this interstitial can show.
- std::string event_name;
- switch (interstitial_type_) {
- case TYPE_MALWARE:
- event_name = kEventNameMalware;
- break;
- case TYPE_HARMFUL:
- event_name = kEventNameHarmful;
- break;
- case TYPE_PHISHING:
- event_name = kEventNamePhishing;
- break;
- default:
- event_name = kEventNameOther;
- break;
- }
- sampling_event_.reset(new ExperienceSamplingEvent(
- event_name,
- request_url(),
- web_contents->GetLastCommittedURL(),
- web_contents->GetBrowserContext()));
-#endif
}
bool SafeBrowsingBlockingPage::CanShowMalwareDetailsOption() {
@@ -273,9 +231,11 @@ void SafeBrowsingBlockingPage::CommandReceived(const std::string& cmd) {
if (command == kLearnMoreCommand) {
// User pressed "Learn more".
- RecordUserInteraction(SHOW_LEARN_MORE);
- GURL learn_more_url(interstitial_type_ == TYPE_PHISHING ?
- kLearnMorePhishingUrlV2 : kLearnMoreMalwareUrlV2);
+ uma_helper_->RecordUserInteraction(
+ SecurityInterstitialUmaHelper::SHOW_LEARN_MORE);
+ GURL learn_more_url(
+ interstitial_reason_ == SB_REASON_PHISHING ?
+ kLearnMorePhishingUrlV2 : kLearnMoreMalwareUrlV2);
learn_more_url = google_util::AppendGoogleLocaleParam(
learn_more_url, g_browser_process->GetApplicationLocale());
OpenURLParams params(learn_more_url,
@@ -289,7 +249,8 @@ void SafeBrowsingBlockingPage::CommandReceived(const std::string& cmd) {
if (command == kShowPrivacyCommand) {
// User pressed "Safe Browsing privacy policy".
- RecordUserInteraction(SHOW_PRIVACY_POLICY);
+ uma_helper_->RecordUserInteraction(
+ SecurityInterstitialUmaHelper::SHOW_PRIVACY_POLICY);
GURL privacy_url(
l10n_util::GetStringUTF8(IDS_SAFE_BROWSING_PRIVACY_POLICY_URL));
privacy_url = google_util::AppendGoogleLocaleParam(
@@ -308,7 +269,7 @@ void SafeBrowsingBlockingPage::CommandReceived(const std::string& cmd) {
if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
proceed_blocked = true;
} else {
- RecordUserDecision(PROCEED);
+ uma_helper_->RecordUserDecision(SecurityInterstitialUmaHelper::PROCEED);
interstitial_page()->Proceed();
// |this| has been deleted after Proceed() returns.
return;
@@ -364,7 +325,8 @@ void SafeBrowsingBlockingPage::CommandReceived(const std::string& cmd) {
std::string bad_url_spec = unsafe_resources_[element_index].url.spec();
if (command == kShowDiagnosticCommand) {
// We're going to take the user to Google's SafeBrowsing diagnostic page.
- RecordUserInteraction(SHOW_DIAGNOSTIC);
+ uma_helper_->RecordUserInteraction(
+ SecurityInterstitialUmaHelper::SHOW_DIAGNOSTIC);
std::string diagnostic =
base::StringPrintf(kSbDiagnosticUrl,
net::EscapeQueryParamValue(bad_url_spec, true).c_str());
@@ -385,7 +347,8 @@ void SafeBrowsingBlockingPage::CommandReceived(const std::string& cmd) {
}
if (command == kExpandedSeeMoreCommand) {
- RecordUserInteraction(SHOW_ADVANCED);
+ uma_helper_->RecordUserInteraction(
+ SecurityInterstitialUmaHelper::SHOW_ADVANCED);
return;
}
@@ -449,8 +412,10 @@ void SafeBrowsingBlockingPage::OnDontProceed() {
if (proceeded_)
return;
- if (!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled))
- RecordUserDecision(DONT_PROCEED);
+ if (!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
+ uma_helper_->RecordUserDecision(
+ SecurityInterstitialUmaHelper::DONT_PROCEED);
+ }
// Send the malware details, if we opted to.
FinishMalwareDetails(0); // No delay
@@ -482,107 +447,10 @@ void SafeBrowsingBlockingPage::OnDontProceed() {
}
}
-void SafeBrowsingBlockingPage::OnGotHistoryCount(bool success,
- int num_visits,
- base::Time first_visit) {
- if (success)
- num_visits_ = num_visits;
-}
-
-void SafeBrowsingBlockingPage::RecordUserDecision(Decision decision) {
- switch (interstitial_type_) {
- case TYPE_MALWARE:
- UMA_HISTOGRAM_ENUMERATION("interstitial.malware.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;
- }
-
-#if defined(ENABLE_EXTENSIONS)
- if (sampling_event_.get()) {
- switch (decision) {
- case PROCEED:
- sampling_event_->CreateUserDecisionEvent(
- ExperienceSamplingEvent::kProceed);
- break;
- case DONT_PROCEED:
- sampling_event_->CreateUserDecisionEvent(
- ExperienceSamplingEvent::kDeny);
- break;
- case SHOW:
- case PROCEEDING_DISABLED:
- case MAX_DECISION:
- break;
- }
- }
-#endif
-
- // Record additional information about malware sites that users have
- // visited before.
- if (num_visits_ < 1 || interstitial_type_ != TYPE_MALWARE)
- return;
- if (decision == PROCEED || decision == DONT_PROCEED) {
- UMA_HISTOGRAM_ENUMERATION("interstitial.malware.decision.repeat_visit",
- SHOW,
- MAX_DECISION);
- UMA_HISTOGRAM_ENUMERATION("interstitial.malware.decision.repeat_visit",
- decision,
- MAX_DECISION);
- }
-}
-
-void SafeBrowsingBlockingPage::RecordUserInteraction(Interaction interaction) {
- switch (interstitial_type_) {
- case TYPE_MALWARE:
- UMA_HISTOGRAM_ENUMERATION("interstitial.malware.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,
- MAX_INTERACTION);
- break;
- }
-
-#if defined(ENABLE_EXTENSIONS)
- if (!sampling_event_.get())
- return;
- switch (interaction) {
- case SHOW_LEARN_MORE:
- sampling_event_->set_has_viewed_learn_more(true);
- break;
- case SHOW_ADVANCED:
- sampling_event_->set_has_viewed_details(true);
- break;
- case SHOW_PRIVACY_POLICY:
- case SHOW_DIAGNOSTIC:
- case TOTAL_VISITS:
- case MAX_INTERACTION:
- break;
- }
-#endif
-}
-
void SafeBrowsingBlockingPage::FinishMalwareDetails(int64 delay_ms) {
if (malware_details_.get() == NULL)
return; // Not all interstitials have malware details (eg phishing).
- DCHECK(interstitial_type_ == TYPE_MALWARE);
+ DCHECK(interstitial_reason_ == SB_REASON_MALWARE);
Alexei Svitkine (slow) 2015/01/14 22:12:33 Nit: Can this be a DCHECK_EQ?
felt 2015/01/15 06:47:22 Done.
const bool enabled =
IsPrefEnabled(prefs::kSafeBrowsingExtendedReportingEnabled);
@@ -679,6 +547,32 @@ bool SafeBrowsingBlockingPage::IsMainPageLoadBlocked(
return unsafe_resources.size() == 1 && !unsafe_resources[0].is_subresource;
}
+std::string SafeBrowsingBlockingPage::GetHistogramPrefix() const {
+ switch (interstitial_reason_) {
+ case SB_REASON_MALWARE:
+ return "malware";
+ case SB_REASON_HARMFUL:
+ return "harmful";
+ case SB_REASON_PHISHING:
+ return "phishing";
+ }
+ NOTREACHED();
palmer 2015/01/15 01:09:32 Do you have to return string() here, for non-Debug
felt 2015/01/15 06:47:22 Good question.
+}
+
+std::string SafeBrowsingBlockingPage::GetSamplingEventName() const {
+ switch (interstitial_reason_) {
+ case SB_REASON_MALWARE:
+ return kEventNameMalware;
+ case SB_REASON_HARMFUL:
+ return kEventNameHarmful;
+ case SB_REASON_PHISHING:
+ return kEventNamePhishing;
+ default:
+ return kEventNameOther;
+ }
+ NOTREACHED();
+}
+
void SafeBrowsingBlockingPage::PopulateInterstitialStrings(
base::DictionaryValue* load_time_data) {
CHECK(load_time_data);
@@ -700,14 +594,14 @@ void SafeBrowsingBlockingPage::PopulateInterstitialStrings(
"overridable",
!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled));
- switch (interstitial_type_) {
- case TYPE_MALWARE:
+ switch (interstitial_reason_) {
+ case SB_REASON_MALWARE:
PopulateMalwareLoadTimeData(load_time_data);
break;
- case TYPE_HARMFUL:
+ case SB_REASON_HARMFUL:
PopulateHarmfulLoadTimeData(load_time_data);
break;
- case TYPE_PHISHING:
+ case SB_REASON_PHISHING:
PopulatePhishingLoadTimeData(load_time_data);
break;
}

Powered by Google App Engine
This is Rietveld 408576698