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

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

Issue 981243003: Make commands consistent across security interstitials (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: if -> switch in SafeBrowsingBlockingPage Created 5 years, 9 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 67f2cc4dd0b3e7f6a96a07e1f5f7ca75a267bf5f..b0b0a5c57ffe7e9a78f45cf7392994f4f3d7b75c 100644
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
@@ -69,7 +69,7 @@ const char kLearnMorePhishingUrlV2[] =
"https://www.google.com/transparencyreport/safebrowsing/";
const char kPrivacyLinkHtml[] =
- "<a id=\"privacy-link\" href=\"\" onclick=\"sendCommand('showPrivacy'); "
+ "<a id=\"privacy-link\" href=\"\" onclick=\"sendCommand(%d); "
"return false;\" onmousedown=\"return false;\">%s</a>";
// After a malware interstitial where the user opted-in to the report
@@ -78,16 +78,6 @@ const char kPrivacyLinkHtml[] =
// milliseconds).
const int64 kMalwareDetailsProceedDelayMilliSeconds = 3000;
-// The commands returned by the page when the user performs an action.
-const char kDoReportCommand[] = "doReport";
-const char kDontReportCommand[] = "dontReport";
-const char kExpandedSeeMoreCommand[] = "expandedSeeMore";
-const char kLearnMoreCommand[] = "learnMore2";
-const char kProceedCommand[] = "proceed";
-const char kShowDiagnosticCommand[] = "showDiagnostic";
-const char kShowPrivacyCommand[] = "showPrivacy";
-const char kTakeMeBackCommand[] = "takeMeBack";
-
// Other constants used to communicate with the JavaScript.
const char kBoxChecked[] = "boxchecked";
const char kDisplayCheckBox[] = "displaycheckbox";
@@ -216,154 +206,128 @@ bool SafeBrowsingBlockingPage::CanShowMalwareDetailsOption() {
SafeBrowsingBlockingPage::~SafeBrowsingBlockingPage() {
}
-void SafeBrowsingBlockingPage::CommandReceived(const std::string& cmd) {
- std::string command(cmd); // Make a local copy so we can modify it.
- // The Jasonified response has quotes, remove them.
- if (command.length() > 1 && command[0] == '"') {
- command = command.substr(1, command.length() - 2);
- }
-
- if (command == "pageLoadComplete") {
+void SafeBrowsingBlockingPage::CommandReceived(const std::string& page_cmd) {
+ if (page_cmd == "\"pageLoadComplete\"") {
// content::WaitForRenderFrameReady sends this message when the page
// load completes. Ignore it.
return;
}
- if (command == kDoReportCommand) {
- SetReportingPreference(true);
- return;
- }
-
- if (command == kDontReportCommand) {
- SetReportingPreference(false);
- return;
- }
-
- if (command == kLearnMoreCommand) {
- // User pressed "Learn more".
- metrics_helper_->RecordUserInteraction(
- SecurityInterstitialMetricsHelper::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,
- Referrer(),
- CURRENT_TAB,
- ui::PAGE_TRANSITION_LINK,
- false);
- web_contents()->OpenURL(params);
- return;
- }
-
- if (command == kShowPrivacyCommand) {
- // User pressed "Safe Browsing privacy policy".
- metrics_helper_->RecordUserInteraction(
- SecurityInterstitialMetricsHelper::SHOW_PRIVACY_POLICY);
- GURL privacy_url(
- l10n_util::GetStringUTF8(IDS_SAFE_BROWSING_PRIVACY_POLICY_URL));
- privacy_url = google_util::AppendGoogleLocaleParam(
- privacy_url, g_browser_process->GetApplicationLocale());
- OpenURLParams params(privacy_url,
- Referrer(),
- CURRENT_TAB,
- ui::PAGE_TRANSITION_LINK,
- false);
- web_contents()->OpenURL(params);
- return;
- }
+ int command = 0;
+ bool retval = base::StringToInt(page_cmd, &command);
+ DCHECK(retval) << page_cmd;
- bool proceed_blocked = false;
- if (command == kProceedCommand) {
- if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
- proceed_blocked = true;
- } else {
- metrics_helper_->RecordUserDecision(
- SecurityInterstitialMetricsHelper::PROCEED);
- interstitial_page()->Proceed();
- // |this| has been deleted after Proceed() returns.
- return;
+ switch (command) {
+ case CMD_DO_REPORT: {
+ // User enabled SB Extended Reporting via the checkbox.
+ SetReportingPreference(true);
+ break;
}
- }
-
- if (command == kTakeMeBackCommand || proceed_blocked) {
- // Don't record the user action here because there are other ways of
- // triggering DontProceed, like clicking the back button.
- if (is_main_frame_load_blocked_) {
- // If the load is blocked, we want to close the interstitial and discard
- // the pending entry.
- interstitial_page()->DontProceed();
- // |this| has been deleted after DontProceed() returns.
- return;
+ case CMD_DONT_REPORT: {
+ // User disabled SB Extended Reporting via the checkbox.
+ SetReportingPreference(false);
+ break;
}
-
- // Otherwise the offending entry has committed, and we need to go back or
- // to a safe page. We will close the interstitial when that page commits.
- if (web_contents()->GetController().CanGoBack()) {
- web_contents()->GetController().GoBack();
- } else {
- web_contents()->GetController().LoadURL(
- GURL(chrome::kChromeUINewTabURL),
- content::Referrer(),
- ui::PAGE_TRANSITION_AUTO_TOPLEVEL,
- std::string());
+ case CMD_OPEN_HELP_CENTER: {
+ // User pressed "Learn more".
+ metrics_helper_->RecordUserInteraction(
+ SecurityInterstitialMetricsHelper::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,
+ Referrer(),
+ CURRENT_TAB,
+ ui::PAGE_TRANSITION_LINK,
+ false);
+ web_contents()->OpenURL(params);
+ break;
+ }
+ case CMD_OPEN_REPORTING_PRIVACY: {
+ // User pressed on the SB Extended Reporting "privacy policy" link.
+ metrics_helper_->RecordUserInteraction(
+ SecurityInterstitialMetricsHelper::SHOW_PRIVACY_POLICY);
+ GURL privacy_url(
+ l10n_util::GetStringUTF8(IDS_SAFE_BROWSING_PRIVACY_POLICY_URL));
+ privacy_url = google_util::AppendGoogleLocaleParam(
+ privacy_url, g_browser_process->GetApplicationLocale());
+ OpenURLParams params(privacy_url,
+ Referrer(),
+ CURRENT_TAB,
+ ui::PAGE_TRANSITION_LINK,
+ false);
+ web_contents()->OpenURL(params);
+ break;
+ }
+ case CMD_PROCEED: {
+ // User pressed on the button to proceed.
+ if (!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
+ metrics_helper_->RecordUserDecision(
+ SecurityInterstitialMetricsHelper::PROCEED);
+ interstitial_page()->Proceed();
+ // |this| has been deleted after Proceed() returns.
+ break;
+ }
+ // If the user can't proceed, fall through to CMD_DONT_PROCEED.
+ }
+ case CMD_DONT_PROCEED: {
+ // User pressed on the button to return to safety.
+ // Don't record the user action here because there are other ways of
+ // triggering DontProceed, like clicking the back button.
+ if (is_main_frame_load_blocked_) {
+ // If the load is blocked, we want to close the interstitial and discard
+ // the pending entry.
+ interstitial_page()->DontProceed();
+ // |this| has been deleted after DontProceed() returns.
+ break;
+ }
+
+ // Otherwise the offending entry has committed, and we need to go back or
+ // to a safe page. We will close the interstitial when that page commits.
+ if (web_contents()->GetController().CanGoBack()) {
+ web_contents()->GetController().GoBack();
+ } else {
+ web_contents()->GetController().LoadURL(
+ GURL(chrome::kChromeUINewTabURL),
+ content::Referrer(),
+ ui::PAGE_TRANSITION_AUTO_TOPLEVEL,
+ std::string());
+ }
+ break;
+ }
+ case CMD_OPEN_DIAGNOSTIC: {
+ // User wants to see why this page is blocked.
+ // TODO(felt): element_index will always be 0. See crbug.com/464732
+ size_t element_index = 0;
+ const UnsafeResource& unsafe_resource = unsafe_resources_[element_index];
+ std::string bad_url_spec = unsafe_resource.url.spec();
+ metrics_helper_->RecordUserInteraction(
+ SecurityInterstitialMetricsHelper::SHOW_DIAGNOSTIC);
+ std::string diagnostic =
+ base::StringPrintf(kSbDiagnosticUrl,
+ net::EscapeQueryParamValue(bad_url_spec, true).c_str());
+ GURL diagnostic_url(diagnostic);
+ diagnostic_url = google_util::AppendGoogleLocaleParam(
+ diagnostic_url, g_browser_process->GetApplicationLocale());
+ DCHECK(unsafe_resource.threat_type == SB_THREAT_TYPE_URL_MALWARE ||
+ unsafe_resource.threat_type ==
+ SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL ||
+ unsafe_resource.threat_type == SB_THREAT_TYPE_URL_UNWANTED);
+ OpenURLParams params(
+ diagnostic_url, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_LINK,
+ false);
+ web_contents()->OpenURL(params);
+ break;
+ }
+ case CMD_SHOW_MORE_SECTION: {
+ // User has opened up the hidden text.
+ metrics_helper_->RecordUserInteraction(
+ SecurityInterstitialMetricsHelper::SHOW_ADVANCED);
+ break;
}
- return;
- }
-
- // The "report error" and "show diagnostic" commands can have a number
- // appended to them, which is the index of the element they apply to.
- size_t element_index = 0;
- size_t colon_index = command.find(':');
- if (colon_index != std::string::npos) {
- DCHECK(colon_index < command.size() - 1);
- int result_int = 0;
- bool result = base::StringToInt(base::StringPiece(command.begin() +
- colon_index + 1,
- command.end()),
- &result_int);
- command = command.substr(0, colon_index);
- if (result)
- element_index = static_cast<size_t>(result_int);
- }
-
- if (element_index >= unsafe_resources_.size()) {
- NOTREACHED();
- return;
- }
-
- 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.
- metrics_helper_->RecordUserInteraction(
- SecurityInterstitialMetricsHelper::SHOW_DIAGNOSTIC);
- std::string diagnostic =
- base::StringPrintf(kSbDiagnosticUrl,
- net::EscapeQueryParamValue(bad_url_spec, true).c_str());
- GURL diagnostic_url(diagnostic);
- diagnostic_url = google_util::AppendGoogleLocaleParam(
- diagnostic_url, g_browser_process->GetApplicationLocale());
- DCHECK(unsafe_resources_[element_index].threat_type ==
- SB_THREAT_TYPE_URL_MALWARE ||
- unsafe_resources_[element_index].threat_type ==
- SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL ||
- unsafe_resources_[element_index].threat_type ==
- SB_THREAT_TYPE_URL_UNWANTED);
- OpenURLParams params(
- diagnostic_url, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_LINK,
- false);
- web_contents()->OpenURL(params);
- return;
- }
-
- if (command == kExpandedSeeMoreCommand) {
- metrics_helper_->RecordUserInteraction(
- SecurityInterstitialMetricsHelper::SHOW_ADVANCED);
- return;
}
-
- NOTREACHED() << "Unexpected command: " << command;
}
void SafeBrowsingBlockingPage::OverrideRendererPrefs(
@@ -628,6 +592,7 @@ void SafeBrowsingBlockingPage::PopulateExtendedReportingOption(
const std::string privacy_link = base::StringPrintf(
kPrivacyLinkHtml,
+ CMD_OPEN_REPORTING_PRIVACY,
l10n_util::GetStringUTF8(
IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE).c_str());
load_time_data->SetString(

Powered by Google App Engine
This is Rietveld 408576698