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 032d5eceab5296580fbec821803a52e81f08e190..e0b6ec121dcb21d8e8ef3fc05895f3d0f3f06e11 100644 |
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc |
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc |
@@ -51,41 +51,43 @@ using content::Referrer; |
using content::UserMetricsAction; |
using content::WebContents; |
+namespace { |
+ |
// For malware interstitial pages, we link the problematic URL to Google's |
// diagnostic page. |
#if defined(GOOGLE_CHROME_BUILD) |
-static const char* const kSbDiagnosticUrl = |
+const char* const kSbDiagnosticUrl = |
Dan Beam
2013/05/07 08:07:16
why aren't you using
const char kSbDiagnosticUr
|
"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%s&client=googlechrome"; |
#else |
-static const char* const kSbDiagnosticUrl = |
+const char* const kSbDiagnosticUrl = |
"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%s&client=chromium"; |
#endif |
-static const char* const kSbReportPhishingErrorUrl = |
+const char* const kSbReportPhishingErrorUrl = |
"http://www.google.com/safebrowsing/report_error/"; |
// URL for the "Learn more" link on the multi threat malware blocking page. |
-static const char* const kLearnMoreMalwareUrl = |
+const char* const kLearnMoreMalwareUrl = |
"https://www.google.com/support/bin/answer.py?answer=45449&topic=360" |
"&sa=X&oi=malwarewarninglink&resnum=1&ct=help"; |
-static const char* const kLearnMoreMalwareUrlV2 = |
+const char* const kLearnMoreMalwareUrlV2 = |
"https://www.google.com/goodtoknow/online-safety/malware/"; |
-static const char* const kLearnMorePhishingUrlV2 = |
+const char* const kLearnMorePhishingUrlV2 = |
"https://www.google.com/goodtoknow/online-safety/phishing/"; |
// URL for the "Learn more" link on the phishing blocking page. |
-static const char* const kLearnMorePhishingUrl = |
+const char* const kLearnMorePhishingUrl = |
"https://www.google.com/support/bin/answer.py?answer=106318"; |
-static const char* const kSbDiagnosticHtml = |
+const char* const kSbDiagnosticHtml = |
"<a href=\"\" onclick=\"sendCommand('showDiagnostic'); return false;\" " |
"onmousedown=\"return false;\">%s</a>"; |
-static const char* const kPLinkHtml = |
+const char* const kPLinkHtml = |
"<a href=\"\" onclick=\"sendCommand('proceed'); return false;\" " |
"onmousedown=\"return false;\">%s</a>"; |
-static const char* const kPrivacyLinkHtml = |
+const char* const kPrivacyLinkHtml = |
"<a id=\"privacy-link\" href=\"\" onclick=\"sendCommand('showPrivacy'); " |
"return false;\" onmousedown=\"return false;\">%s</a>"; |
@@ -93,32 +95,52 @@ static const char* const kPrivacyLinkHtml = |
// but clicked "proceed anyway", we delay the call to |
// MalwareDetails::FinishCollection() by this much time (in |
// milliseconds). |
-static const int64 kMalwareDetailsProceedDelayMilliSeconds = 3000; |
+const int64 kMalwareDetailsProceedDelayMilliSeconds = 3000; |
// The commands returned by the page when the user performs an action. |
-static const char* const kShowDiagnosticCommand = "showDiagnostic"; |
-static const char* const kReportErrorCommand = "reportError"; |
-static const char* const kLearnMoreCommand = "learnMore"; |
-static const char* const kLearnMoreCommandV2 = "learnMore2"; |
-static const char* const kShowPrivacyCommand = "showPrivacy"; |
-static const char* const kProceedCommand = "proceed"; |
-static const char* const kTakeMeBackCommand = "takeMeBack"; |
-static const char* const kDoReportCommand = "doReport"; |
-static const char* const kDontReportCommand = "dontReport"; |
-static const char* const kDisplayCheckBox = "displaycheckbox"; |
-static const char* const kBoxChecked = "boxchecked"; |
-static const char* const kExpandedSeeMore = "expandedSeeMore"; |
+const char* const kShowDiagnosticCommand = "showDiagnostic"; |
+const char* const kReportErrorCommand = "reportError"; |
+const char* const kLearnMoreCommand = "learnMore"; |
+const char* const kLearnMoreCommandV2 = "learnMore2"; |
+const char* const kShowPrivacyCommand = "showPrivacy"; |
+const char* const kProceedCommand = "proceed"; |
+const char* const kTakeMeBackCommand = "takeMeBack"; |
+const char* const kDoReportCommand = "doReport"; |
+const char* const kDontReportCommand = "dontReport"; |
+const char* const kDisplayCheckBox = "displaycheckbox"; |
+const char* const kBoxChecked = "boxchecked"; |
+const char* const kExpandedSeeMore = "expandedSeeMore"; |
// Special command that we use when the user navigated away from the |
// page. E.g., closed the tab or the window. This is only used by |
// RecordUserReactionTime. |
-static const char* const kNavigatedAwayMetaCommand = "closed"; |
+const char* const kNavigatedAwayMetaCommand = "closed"; |
+ |
+base::LazyInstance<SafeBrowsingBlockingPage::UnsafeResourceMap> |
+ g_unsafe_resource_map = LAZY_INSTANCE_INITIALIZER; |
+ |
+// These are the conditions for the summer 2013 Finch experiment. |
+const char* const kMalwareStudyName = "InterstitialMalware310"; |
+const char* const kPhishingStudyName = "InterstitialPhishing564"; |
+const char* const kCond1MalwareControl = "cond1MalwareControl"; |
+const char* const kCond2MalwareNoBrand = "cond2MalwareNoBrand"; |
+const char* const kCond3PhishingControl = "cond3PhishingControl"; |
+const char* const kCond4PhishingNoBrand = "cond4PhishingNoBrand"; |
+const char* const kCond5MalwareOneStep = "cond5MalwareOneStep"; |
+const char* const kCond6PhishingOneStep = "cond6PhishingOneStep"; |
+const char* const kCond7MalwareFearMsg = "cond7MalwareFearMsg"; |
+const char* const kCond8PhishingFearMsg = "cond8PhishingFearMsg"; |
+const char* const kCond9MalwareCollabMsg = "cond9MalwareCollabMsg"; |
+const char* const kCond10PhishingCollabMsg = "cond10PhishingCollabMsg"; |
+const char* const kCond11MalwareQuestion = "cond11MalwareQuestion"; |
+const char* const kCond12PhishingQuestion = "cond12PhishingQuestion"; |
+const char* const kCond13MalwareGoBack = "cond13MalwareGoBack"; |
+const char* const kCond14PhishingGoBack = "cond14PhishingGoBack"; |
+ |
+} // namespace |
// static |
SafeBrowsingBlockingPageFactory* SafeBrowsingBlockingPage::factory_ = NULL; |
-static base::LazyInstance<SafeBrowsingBlockingPage::UnsafeResourceMap> |
- g_unsafe_resource_map = LAZY_INSTANCE_INITIALIZER; |
- |
// The default SafeBrowsingBlockingPageFactory. Global, made a singleton so we |
// don't leak it. |
class SafeBrowsingBlockingPageFactoryImpl |
@@ -129,7 +151,7 @@ class SafeBrowsingBlockingPageFactoryImpl |
WebContents* web_contents, |
const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) |
OVERRIDE { |
- // Only do the trial if the interstitial is for a single malware or |
+ // Only use the V2 page if the interstitial is for a single malware or |
// phishing resource, the multi-threat interstitial has not been updated to |
// V2 yet. |
if (unsafe_resources.size() == 1 && |
@@ -483,6 +505,9 @@ void SafeBrowsingBlockingPage::RecordUserAction(BlockingPageEvent event) { |
PHISHING_DONT_PROCEED, |
PHISHING_FORCED_DONT_PROCEED, |
PHISHING_PROCEED, |
+ MALWARE_SHOW_ADVANCED, |
+ MULTIPLE_SHOW_ADVANCED, |
+ PHISHING_SHOW_ADVANCED, |
MAX_ACTION |
} histogram_action = MAX_ACTION; |
@@ -540,6 +565,19 @@ void SafeBrowsingBlockingPage::RecordUserAction(BlockingPageEvent event) { |
} |
} |
break; |
+ case SHOW_ADVANCED: |
+ switch (interstitial_type_) { |
+ case TYPE_MALWARE_AND_PHISHING: |
+ histogram_action = MULTIPLE_SHOW_ADVANCED; |
+ break; |
+ case TYPE_MALWARE: |
+ histogram_action = MALWARE_SHOW_ADVANCED; |
+ break; |
+ case TYPE_PHISHING: |
+ histogram_action = PHISHING_SHOW_ADVANCED; |
+ break; |
+ } |
+ break; |
default: |
NOTREACHED() << "Unexpected event: " << event; |
} |
@@ -578,6 +616,8 @@ void SafeBrowsingBlockingPage::RecordUserAction(BlockingPageEvent event) { |
else |
action.append("DontProceed"); |
break; |
+ case SHOW_ADVANCED: |
+ break; |
default: |
NOTREACHED() << "Unexpected event: " << event; |
} |
@@ -619,7 +659,7 @@ void SafeBrowsingBlockingPage::RecordUserReactionTime( |
// interstitial. |
if (has_expanded_see_more_section_) |
return; |
- |
+ RecordUserAction(SHOW_ADVANCED); |
UMA_HISTOGRAM_MEDIUM_TIMES("SB2.MalwareInterstitialTimeExpandedSeeMore", |
dt); |
has_expanded_see_more_section_ = true; |
@@ -646,7 +686,7 @@ void SafeBrowsingBlockingPage::RecordUserReactionTime( |
// interstitial. |
if (has_expanded_see_more_section_) |
return; |
- |
+ RecordUserAction(SHOW_ADVANCED); |
UMA_HISTOGRAM_MEDIUM_TIMES("SB2.PhishingInterstitialTimeExpandedSeeMore", |
dt); |
has_expanded_see_more_section_ = true; |
@@ -891,6 +931,16 @@ SafeBrowsingBlockingPageV2::SafeBrowsingBlockingPageV2( |
WebContents* web_contents, |
const UnsafeResourceList& unsafe_resources) |
: SafeBrowsingBlockingPage(ui_manager, web_contents, unsafe_resources) { |
+ if (unsafe_resources_[0].threat_type == SB_THREAT_TYPE_URL_MALWARE) { |
Dan Beam
2013/05/07 08:07:16
indent off, can you be sure that unsafe_resources_
|
+ trialCondition_ = |
+ base::FieldTrialList::FindFullName(kMalwareStudyName); |
+ } else if (unsafe_resources_[0].threat_type == |
+ SB_THREAT_TYPE_URL_PHISHING || |
+ unsafe_resources_[0].threat_type == |
+ SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL) { |
+ trialCondition_ = |
+ base::FieldTrialList::FindFullName(kPhishingStudyName); |
+ } |
} |
std::string SafeBrowsingBlockingPageV2::GetHTMLContents() { |
@@ -948,6 +998,35 @@ void SafeBrowsingBlockingPageV2::PopulateStringDictionary( |
strings->SetString("proceed", |
l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_V2_PROCEED_LINK)); |
+ // Field trial |
Dan Beam
2013/05/07 08:07:16
end with .
|
+ strings->SetString("trialType", trialCondition_); |
+ if (trialCondition_ == kCond7MalwareFearMsg) { |
+ strings->SetString("headLine", |
+ l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_FEAR_HEADLINE)); |
+ } else if (trialCondition_ == kCond8PhishingFearMsg) { |
+ strings->SetString("headLine", |
+ l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_PHISHING_FEAR_HEADLINE)); |
+ } else if (trialCondition_ == kCond9MalwareCollabMsg) { |
+ strings->SetString("headLine", |
+ l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_COLLAB_HEADLINE)); |
+ } else if (trialCondition_ == kCond10PhishingCollabMsg) { |
+ strings->SetString("headLine", |
+ l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_PHISHING_COLLAB_HEADLINE)); |
+ } else if (trialCondition_ == kCond11MalwareQuestion) { |
+ strings->SetString("headLine", |
+ l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_QUESTION_HEADLINE)); |
+ } else if (trialCondition_ == kCond12PhishingQuestion) { |
+ strings->SetString("headLine", |
+ l10n_util::GetStringUTF16( |
+ IDS_SAFE_BROWSING_PHISHING_QUESTION_HEADLINE)); |
+ } else if (trialCondition_ == kCond13MalwareGoBack) { |
+ strings->SetString("headLine", |
+ l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_BACK_HEADLINE)); |
+ } else if (trialCondition_ == kCond14PhishingGoBack) { |
+ strings->SetString("headLine", |
Dan Beam
2013/05/07 08:07:16
nit: arguably:
std::string headline;
if () {
|
+ l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_PHISHING_BACK_HEADLINE)); |
+ } |
+ |
webui::SetFontAndTextDirection(strings); |
} |