| 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 c5b4c449b0d539b87804e0550ea47bfb989e208e..d5f93c767ea3ba6a84479bdb6309ecaeb69ea90e 100644
|
| --- a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
|
| +++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
|
| @@ -9,6 +9,7 @@
|
| #include <string>
|
|
|
| #include "base/bind.h"
|
| +#include "base/command_line.h"
|
| #include "base/i18n/rtl.h"
|
| #include "base/lazy_instance.h"
|
| #include "base/metrics/field_trial.h"
|
| @@ -28,6 +29,7 @@
|
| #include "chrome/browser/safe_browsing/malware_details.h"
|
| #include "chrome/browser/safe_browsing/ui_manager.h"
|
| #include "chrome/browser/tab_contents/tab_util.h"
|
| +#include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "chrome/common/url_constants.h"
|
| #include "content/public/browser/browser_thread.h"
|
| @@ -93,23 +95,25 @@ const char kPrivacyLinkHtml[] =
|
| const int64 kMalwareDetailsProceedDelayMilliSeconds = 3000;
|
|
|
| // The commands returned by the page when the user performs an action.
|
| -const char kShowDiagnosticCommand[] = "showDiagnostic";
|
| -const char kReportErrorCommand[] = "reportError";
|
| +const char kDoReportCommand[] = "doReport";
|
| +const char kDontReportCommand[] = "dontReport";
|
| +const char kExpandedSeeMoreCommand[] = "expandedSeeMore";
|
| const char kLearnMoreCommand[] = "learnMore";
|
| const char kLearnMoreCommandV2[] = "learnMore2";
|
| -const char kShowPrivacyCommand[] = "showPrivacy";
|
| const char kProceedCommand[] = "proceed";
|
| +const char kReportErrorCommand[] = "reportError";
|
| +const char kShowDiagnosticCommand[] = "showDiagnostic";
|
| +const char kShowPrivacyCommand[] = "showPrivacy";
|
| const char kTakeMeBackCommand[] = "takeMeBack";
|
| -const char kDoReportCommand[] = "doReport";
|
| -const char kDontReportCommand[] = "dontReport";
|
| -const char kDisplayCheckBox[] = "displaycheckbox";
|
| -const char kBoxChecked[] = "boxchecked";
|
| -const char 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.
|
| const char kNavigatedAwayMetaCommand[] = "closed";
|
|
|
| +// Other constants used to communicate with the JavaScript.
|
| +const char kBoxChecked[] = "boxchecked";
|
| +const char kDisplayCheckBox[] = "displaycheckbox";
|
| +
|
| base::LazyInstance<SafeBrowsingBlockingPage::UnsafeResourceMap>
|
| g_unsafe_resource_map = LAZY_INSTANCE_INITIALIZER;
|
|
|
| @@ -146,6 +150,32 @@ void RecordDetailedUserAction(DetailedDecision decision) {
|
| MAX_DETAILED_ACTION);
|
| }
|
|
|
| +bool Version3Enabled() {
|
| + if (CommandLine::ForCurrentProcess()->HasSwitch(
|
| + switches::kMalwareInterstitialVersionV3)) {
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +class SafeBrowsingBlockingPageV3 : public SafeBrowsingBlockingPage {
|
| + public:
|
| + SafeBrowsingBlockingPageV3(SafeBrowsingUIManager* ui_manager,
|
| + content::WebContents* web_contents,
|
| + const UnsafeResourceList& unsafe_resources);
|
| +
|
| + // InterstitialPageDelegate method:
|
| + virtual std::string GetHTMLContents() OVERRIDE;
|
| +
|
| + private:
|
| + // Fills the passed dictionary with the values to be passed to the template
|
| + // when creating the HTML.
|
| + void PopulateMalwareLoadTimeData(base::DictionaryValue* load_time_data);
|
| + void PopulatePhishingLoadTimeData(base::DictionaryValue* load_time_data);
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SafeBrowsingBlockingPageV3);
|
| +};
|
| +
|
| } // namespace
|
|
|
| // static
|
| @@ -171,8 +201,13 @@ class SafeBrowsingBlockingPageFactoryImpl
|
| unsafe_resources[0].threat_type == SB_THREAT_TYPE_URL_PHISHING ||
|
| unsafe_resources[0].threat_type ==
|
| SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL)) {
|
| - return new SafeBrowsingBlockingPageV2(ui_manager, web_contents,
|
| - unsafe_resources);
|
| + if (Version3Enabled()) {
|
| + return new SafeBrowsingBlockingPageV3(ui_manager, web_contents,
|
| + unsafe_resources);
|
| + } else {
|
| + return new SafeBrowsingBlockingPageV2(ui_manager, web_contents,
|
| + unsafe_resources);
|
| + }
|
| }
|
| return new SafeBrowsingBlockingPageV1(ui_manager, web_contents,
|
| unsafe_resources);
|
| @@ -430,7 +465,7 @@ void SafeBrowsingBlockingPage::CommandReceived(const std::string& cmd) {
|
| return;
|
| }
|
|
|
| - if (command == kExpandedSeeMore) {
|
| + if (command == kExpandedSeeMoreCommand) {
|
| // User expanded the "see more info" section of the page. We don't actually
|
| // do any action based on this, it's just so that RecordUserReactionTime can
|
| // track it.
|
| @@ -713,7 +748,7 @@ void SafeBrowsingBlockingPage::RecordUserReactionTime(
|
| dt);
|
| } else if (command == kNavigatedAwayMetaCommand) {
|
| UMA_HISTOGRAM_MEDIUM_TIMES("SB2.MalwareInterstitialTimeClosed", dt);
|
| - } else if (command == kExpandedSeeMore) {
|
| + } else if (command == kExpandedSeeMoreCommand) {
|
| // Only record the expanded histogram once per display of the
|
| // interstitial.
|
| if (has_expanded_see_more_section_)
|
| @@ -740,7 +775,7 @@ void SafeBrowsingBlockingPage::RecordUserReactionTime(
|
| UMA_HISTOGRAM_MEDIUM_TIMES("SB2.PhishingInterstitialTimeLearnMore", dt);
|
| } else if (command == kNavigatedAwayMetaCommand) {
|
| UMA_HISTOGRAM_MEDIUM_TIMES("SB2.PhishingInterstitialTimeClosed", dt);
|
| - } else if (command == kExpandedSeeMore) {
|
| + } else if (command == kExpandedSeeMoreCommand) {
|
| // Only record the expanded histogram once per display of the
|
| // interstitial.
|
| if (has_expanded_see_more_section_)
|
| @@ -1192,3 +1227,126 @@ void SafeBrowsingBlockingPageV2::PopulatePhishingStringDictionary(
|
| strings->SetString("learnMore",
|
| l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_V2_LEARN_MORE));
|
| }
|
| +
|
| +SafeBrowsingBlockingPageV3::SafeBrowsingBlockingPageV3(
|
| + SafeBrowsingUIManager* ui_manager,
|
| + WebContents* web_contents,
|
| + const UnsafeResourceList& unsafe_resources)
|
| + : SafeBrowsingBlockingPage(ui_manager, web_contents, unsafe_resources) {
|
| +}
|
| +
|
| +std::string SafeBrowsingBlockingPageV3::GetHTMLContents() {
|
| + if (unsafe_resources_.empty() || unsafe_resources_.size() > 1) {
|
| + // TODO(felt): Implement new multi-threat interstitial. crbug.com/160336
|
| + NOTIMPLEMENTED();
|
| + return std::string();
|
| + }
|
| +
|
| + // Fill in the shared values.
|
| + base::DictionaryValue load_time_data;
|
| + webui::SetFontAndTextDirection(&load_time_data);
|
| + load_time_data.SetBoolean("ssl", false);
|
| + load_time_data.SetString(
|
| + "openDetails",
|
| + l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_V2_SEE_MORE));
|
| + load_time_data.SetString(
|
| + "closeDetails",
|
| + l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_V2_SEE_MORE));
|
| + load_time_data.SetString(
|
| + "primaryButtonText",
|
| + l10n_util::GetStringUTF16(IDS_SSL_OVERRIDABLE_SAFETY_BUTTON));
|
| + load_time_data.SetString(
|
| + "proceedText",
|
| + l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_V2_PROCEED_LINK));
|
| + load_time_data.SetBoolean(
|
| + "overridable",
|
| + !IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled));
|
| +
|
| + // Fill in the values that are specific to malware or phishing.
|
| + SBThreatType threat_type = unsafe_resources_[0].threat_type;
|
| + switch (threat_type) {
|
| + case SB_THREAT_TYPE_URL_MALWARE:
|
| + case SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL:
|
| + PopulateMalwareLoadTimeData(&load_time_data);
|
| + break;
|
| + case SB_THREAT_TYPE_URL_PHISHING:
|
| + case SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL:
|
| + PopulatePhishingLoadTimeData(&load_time_data);
|
| + break;
|
| + case SB_THREAT_TYPE_SAFE:
|
| + case SB_THREAT_TYPE_BINARY_MALWARE_URL:
|
| + case SB_THREAT_TYPE_EXTENSION:
|
| + NOTREACHED();
|
| + }
|
| +
|
| + interstitial_show_time_ = base::TimeTicks::Now();
|
| +
|
| + base::StringPiece html(
|
| + ResourceBundle::GetSharedInstance().GetRawDataResource(
|
| + IRD_SSL_INTERSTITIAL_V2_HTML));
|
| + webui::UseVersion2 version;
|
| + return webui::GetI18nTemplateHtml(html, &load_time_data);
|
| +}
|
| +
|
| +void SafeBrowsingBlockingPageV3::PopulateMalwareLoadTimeData(
|
| + base::DictionaryValue* load_time_data) {
|
| + load_time_data->SetBoolean("phishing", false);
|
| + load_time_data->SetString(
|
| + "tabTitle",
|
| + l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_V2_TITLE));
|
| + load_time_data->SetString(
|
| + "heading",
|
| + l10n_util::GetStringUTF16(is_main_frame_load_blocked_ ?
|
| + IDS_SAFE_BROWSING_MALWARE_V2_HEADLINE :
|
| + IDS_SAFE_BROWSING_MALWARE_V2_HEADLINE_SUBRESOURCE));
|
| + load_time_data->SetString(
|
| + "primaryParagraph",
|
| + l10n_util::GetStringFUTF16(
|
| + is_main_frame_load_blocked_ ?
|
| + IDS_SAFE_BROWSING_MALWARE_V2_DESCRIPTION1 :
|
| + IDS_SAFE_BROWSING_MALWARE_V2_DESCRIPTION1_SUBRESOURCE,
|
| + l10n_util::GetStringUTF16(IDS_PRODUCT_NAME),
|
| + base::UTF8ToUTF16(is_main_frame_load_blocked_ ?
|
| + url_.host() : web_contents_->GetURL().host())));
|
| + load_time_data->SetString(
|
| + "secondParagraph",
|
| + is_main_frame_load_blocked_ ?
|
| + l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_V2_DESCRIPTION2) :
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_SAFE_BROWSING_MALWARE_V2_DESCRIPTION2_SUBRESOURCE,
|
| + l10n_util::GetStringUTF16(IDS_PRODUCT_NAME),
|
| + base::UTF8ToUTF16(url_.host())));
|
| + load_time_data->SetString(
|
| + "thirdParagraph",
|
| + l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_V2_DESCRIPTION3));
|
| + load_time_data->SetString(
|
| + "detailsText",
|
| + is_main_frame_load_blocked_ ?
|
| + l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_MALWARE_V2_DETAILS) :
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_SAFE_BROWSING_MALWARE_V2_DETAILS_SUBRESOURCE,
|
| + base::UTF8ToUTF16(url_.host())));
|
| +}
|
| +
|
| +void SafeBrowsingBlockingPageV3::PopulatePhishingLoadTimeData(
|
| + base::DictionaryValue* load_time_data) {
|
| + load_time_data->SetBoolean("phishing", true);
|
| + load_time_data->SetString(
|
| + "tabTitle",
|
| + l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_PHISHING_V2_TITLE));
|
| + load_time_data->SetString(
|
| + "heading",
|
| + l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_PHISHING_V2_HEADLINE));
|
| + load_time_data->SetString(
|
| + "primaryParagraph",
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_SAFE_BROWSING_PHISHING_V2_DESCRIPTION1,
|
| + l10n_util::GetStringUTF16(IDS_PRODUCT_NAME),
|
| + base::UTF8ToUTF16(url_.host())));
|
| + load_time_data->SetString(
|
| + "secondParagraph",
|
| + l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_PHISHING_V2_DESCRIPTION2));
|
| + load_time_data->SetString(
|
| + "detailsText",
|
| + l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_PHISHING_V2_REPORT_ERROR));
|
| +}
|
|
|