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

Side by Side Diff: components/security_interstitials/core/safe_browsing_error_ui.cc

Issue 2852333003: Rename SafeBrowsingErrorUI to SafeBrowsingLoudErrorUI (Closed)
Patch Set: Add safe_browsing_blocking_page.cc Created 3 years, 7 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/security_interstitials/core/safe_browsing_error_ui.h"
6
7 #include "base/i18n/time_formatting.h"
8 #include "base/metrics/histogram_macros.h"
9 #include "base/strings/stringprintf.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "components/google/core/browser/google_util.h"
12 #include "components/security_interstitials/core/common_string_util.h"
13 #include "components/security_interstitials/core/metrics_helper.h"
14 #include "components/strings/grit/components_strings.h"
15 #include "net/base/escape.h"
16 #include "ui/base/l10n/l10n_util.h"
17
18 namespace security_interstitials {
19 namespace {
20
21 // URL for the Help Center article on Safe Browsing warnings.
22 const char kLearnMore[] = "https://support.google.com/chrome/answer/99020";
23
24 // For malware interstitial pages, we link the problematic URL to Google's
25 // diagnostic page.
26 #if defined(GOOGLE_CHROME_BUILD)
27 const char kSbDiagnosticUrl[] =
28 "https://www.google.com/safebrowsing/"
29 "diagnostic?site=%s&client=googlechrome";
30 #else
31 const char kSbDiagnosticUrl[] =
32 "https://www.google.com/safebrowsing/diagnostic?site=%s&client=chromium";
33 #endif
34
35 // Constants for the V4 phishing string upgrades.
36 const char kReportPhishingErrorUrl[] =
37 "https://www.google.com/safebrowsing/report_error/";
38
39 void RecordExtendedReportingPrefChanged(bool report, bool is_scout) {
40 if (is_scout) {
41 UMA_HISTOGRAM_BOOLEAN(
42 "SafeBrowsing.Pref.Scout.SetPref.SBER2Pref.SecurityInterstitial",
43 report);
44 } else {
45 UMA_HISTOGRAM_BOOLEAN(
46 "SafeBrowsing.Pref.Scout.SetPref.SBER1Pref.SecurityInterstitial",
47 report);
48 }
49 }
50
51 } // namespace
52
53 SafeBrowsingErrorUI::SafeBrowsingErrorUI(
54 const GURL& request_url,
55 const GURL& main_frame_url,
56 SBInterstitialReason reason,
57 const SBErrorDisplayOptions& display_options,
58 const std::string& app_locale,
59 const base::Time& time_triggered,
60 ControllerClient* controller)
61 : request_url_(request_url),
62 main_frame_url_(main_frame_url),
63 interstitial_reason_(reason),
64 display_options_(display_options),
65 app_locale_(app_locale),
66 time_triggered_(time_triggered),
67 controller_(controller) {
68 controller_->metrics_helper()->RecordUserDecision(MetricsHelper::SHOW);
69 controller_->metrics_helper()->RecordUserInteraction(
70 MetricsHelper::TOTAL_VISITS);
71 if (display_options_.is_proceed_anyway_disabled)
72 controller_->metrics_helper()->RecordUserDecision(
73 security_interstitials::MetricsHelper::PROCEEDING_DISABLED);
74 }
75
76 SafeBrowsingErrorUI::~SafeBrowsingErrorUI() {
77 controller_->metrics_helper()->RecordShutdownMetrics();
78 }
79
80 void SafeBrowsingErrorUI::PopulateStringsForHTML(
81 base::DictionaryValue* load_time_data) {
82 DCHECK(load_time_data);
83
84 load_time_data->SetString("type", "SAFEBROWSING");
85 load_time_data->SetString(
86 "tabTitle", l10n_util::GetStringUTF16(IDS_SAFEBROWSING_V3_TITLE));
87 load_time_data->SetString(
88 "openDetails",
89 l10n_util::GetStringUTF16(IDS_SAFEBROWSING_V3_OPEN_DETAILS_BUTTON));
90 load_time_data->SetString(
91 "closeDetails",
92 l10n_util::GetStringUTF16(IDS_SAFEBROWSING_V3_CLOSE_DETAILS_BUTTON));
93 load_time_data->SetString(
94 "primaryButtonText",
95 l10n_util::GetStringUTF16(IDS_SAFEBROWSING_OVERRIDABLE_SAFETY_BUTTON));
96 load_time_data->SetBoolean("overridable",
97 !display_options_.is_proceed_anyway_disabled);
98
99 switch (interstitial_reason_) {
100 case SB_REASON_MALWARE:
101 PopulateMalwareLoadTimeData(load_time_data);
102 break;
103 case SB_REASON_HARMFUL:
104 PopulateHarmfulLoadTimeData(load_time_data);
105 break;
106 case SB_REASON_PHISHING:
107 PopulatePhishingLoadTimeData(load_time_data);
108 break;
109 }
110
111 PopulateExtendedReportingOption(load_time_data);
112 }
113
114 void SafeBrowsingErrorUI::HandleCommand(SecurityInterstitialCommands command) {
115 switch (command) {
116 case CMD_PROCEED: {
117 // User pressed on the button to proceed.
118 if (!display_options_.is_proceed_anyway_disabled) {
119 controller_->metrics_helper()->RecordUserDecision(
120 MetricsHelper::PROCEED);
121 controller_->Proceed();
122 break;
123 }
124 }
125 // If the user can't proceed, fall through to CMD_DONT_PROCEED.
126 case CMD_DONT_PROCEED: {
127 // User pressed on the button to return to safety.
128 // Don't record the user action here because there are other ways of
129 // triggering DontProceed, like clicking the back button.
130 if (display_options_.is_resource_cancellable) {
131 // If the load is blocked, we want to close the interstitial and discard
132 // the pending entry.
133 controller_->GoBack();
134 } else {
135 // Otherwise the offending entry has committed, and we need to go back
136 // or to a safe page. We will close the interstitial when that page
137 // commits.
138 controller_->GoBackAfterNavigationCommitted();
139 }
140 break;
141 }
142 case CMD_DO_REPORT: {
143 // User enabled SB Extended Reporting via the checkbox.
144 display_options_.is_extended_reporting_enabled = true;
145 controller_->SetReportingPreference(true);
146 RecordExtendedReportingPrefChanged(
147 true, display_options_.is_scout_reporting_enabled);
148 break;
149 }
150 case CMD_DONT_REPORT: {
151 // User disabled SB Extended Reporting via the checkbox.
152 display_options_.is_extended_reporting_enabled = false;
153 controller_->SetReportingPreference(false);
154 RecordExtendedReportingPrefChanged(
155 false, display_options_.is_scout_reporting_enabled);
156 break;
157 }
158 case CMD_SHOW_MORE_SECTION: {
159 controller_->metrics_helper()->RecordUserInteraction(
160 security_interstitials::MetricsHelper::SHOW_ADVANCED);
161 break;
162 }
163 case CMD_OPEN_HELP_CENTER: {
164 // User pressed "Learn more".
165 controller_->metrics_helper()->RecordUserInteraction(
166 security_interstitials::MetricsHelper::SHOW_LEARN_MORE);
167 GURL learn_more_url(kLearnMore);
168 learn_more_url =
169 google_util::AppendGoogleLocaleParam(learn_more_url, app_locale_);
170 controller_->OpenUrlInCurrentTab(learn_more_url);
171 break;
172 }
173 case CMD_RELOAD: {
174 controller_->metrics_helper()->RecordUserInteraction(
175 security_interstitials::MetricsHelper::RELOAD);
176 controller_->Reload();
177 break;
178 }
179 case CMD_OPEN_REPORTING_PRIVACY: {
180 // User pressed on the SB Extended Reporting "privacy policy" link.
181 controller_->OpenExtendedReportingPrivacyPolicy();
182 break;
183 }
184 case CMD_OPEN_WHITEPAPER: {
185 controller_->OpenExtendedReportingWhitepaper();
186 break;
187 }
188 case CMD_OPEN_DIAGNOSTIC: {
189 controller_->metrics_helper()->RecordUserInteraction(
190 security_interstitials::MetricsHelper::SHOW_DIAGNOSTIC);
191 std::string diagnostic = base::StringPrintf(
192 kSbDiagnosticUrl,
193 net::EscapeQueryParamValue(request_url_.spec(), true).c_str());
194 GURL diagnostic_url(diagnostic);
195 diagnostic_url =
196 google_util::AppendGoogleLocaleParam(diagnostic_url, app_locale_);
197 controller_->OpenUrlInCurrentTab(diagnostic_url);
198 break;
199 }
200 case CMD_REPORT_PHISHING_ERROR: {
201 controller_->metrics_helper()->RecordUserInteraction(
202 security_interstitials::MetricsHelper::REPORT_PHISHING_ERROR);
203 GURL phishing_error_url(kReportPhishingErrorUrl);
204 phishing_error_url =
205 google_util::AppendGoogleLocaleParam(phishing_error_url, app_locale_);
206 controller_->OpenUrlInCurrentTab(phishing_error_url);
207 break;
208 }
209 case CMD_OPEN_DATE_SETTINGS:
210 case CMD_OPEN_LOGIN:
211 case CMD_ERROR:
212 case CMD_TEXT_FOUND:
213 case CMD_TEXT_NOT_FOUND:
214 break;
215 }
216 }
217
218 bool SafeBrowsingErrorUI::CanShowExtendedReportingOption() {
219 return !is_off_the_record() && is_extended_reporting_opt_in_allowed();
220 }
221
222 void SafeBrowsingErrorUI::PopulateMalwareLoadTimeData(
223 base::DictionaryValue* load_time_data) {
224 load_time_data->SetBoolean("phishing", false);
225 load_time_data->SetString("heading",
226 l10n_util::GetStringUTF16(IDS_MALWARE_V3_HEADING));
227 load_time_data->SetString(
228 "primaryParagraph",
229 l10n_util::GetStringFUTF16(
230 IDS_MALWARE_V3_PRIMARY_PARAGRAPH,
231 common_string_util::GetFormattedHostName(request_url_)));
232 load_time_data->SetString(
233 "explanationParagraph",
234 display_options_.is_main_frame_load_blocked
235 ? l10n_util::GetStringFUTF16(
236 IDS_MALWARE_V3_EXPLANATION_PARAGRAPH,
237 common_string_util::GetFormattedHostName(request_url_))
238 : l10n_util::GetStringFUTF16(
239 IDS_MALWARE_V3_EXPLANATION_PARAGRAPH_SUBRESOURCE,
240 base::UTF8ToUTF16(main_frame_url_.host()),
241 common_string_util::GetFormattedHostName(request_url_)));
242 load_time_data->SetString(
243 "finalParagraph",
244 l10n_util::GetStringUTF16(IDS_MALWARE_V3_PROCEED_PARAGRAPH));
245 }
246
247 void SafeBrowsingErrorUI::PopulateHarmfulLoadTimeData(
248 base::DictionaryValue* load_time_data) {
249 load_time_data->SetBoolean("phishing", false);
250 load_time_data->SetString("heading",
251 l10n_util::GetStringUTF16(IDS_HARMFUL_V3_HEADING));
252 load_time_data->SetString(
253 "primaryParagraph",
254 l10n_util::GetStringFUTF16(
255 IDS_HARMFUL_V3_PRIMARY_PARAGRAPH,
256 common_string_util::GetFormattedHostName(request_url_)));
257 load_time_data->SetString(
258 "explanationParagraph",
259 l10n_util::GetStringFUTF16(
260 IDS_HARMFUL_V3_EXPLANATION_PARAGRAPH,
261 common_string_util::GetFormattedHostName(request_url_)));
262 load_time_data->SetString(
263 "finalParagraph",
264 l10n_util::GetStringUTF16(IDS_HARMFUL_V3_PROCEED_PARAGRAPH));
265 }
266
267 void SafeBrowsingErrorUI::PopulatePhishingLoadTimeData(
268 base::DictionaryValue* load_time_data) {
269 load_time_data->SetBoolean("phishing", true);
270 load_time_data->SetString("heading",
271 l10n_util::GetStringUTF16(IDS_PHISHING_V4_HEADING));
272 load_time_data->SetString(
273 "primaryParagraph",
274 l10n_util::GetStringFUTF16(
275 IDS_PHISHING_V4_PRIMARY_PARAGRAPH,
276 common_string_util::GetFormattedHostName(request_url_)));
277 load_time_data->SetString(
278 "explanationParagraph",
279 l10n_util::GetStringFUTF16(
280 IDS_PHISHING_V4_EXPLANATION_PARAGRAPH,
281 common_string_util::GetFormattedHostName(request_url_)));
282 load_time_data->SetString(
283 "finalParagraph",
284 l10n_util::GetStringUTF16(IDS_PHISHING_V4_PROCEED_AND_REPORT_PARAGRAPH));
285 }
286
287 void SafeBrowsingErrorUI::PopulateExtendedReportingOption(
288 base::DictionaryValue* load_time_data) {
289 bool can_show_extended_reporting_option = CanShowExtendedReportingOption();
290 load_time_data->SetBoolean(security_interstitials::kDisplayCheckBox,
291 can_show_extended_reporting_option);
292 if (!can_show_extended_reporting_option)
293 return;
294
295 const std::string privacy_link = base::StringPrintf(
296 security_interstitials::kPrivacyLinkHtml,
297 security_interstitials::CMD_OPEN_REPORTING_PRIVACY,
298 l10n_util::GetStringUTF8(IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE).c_str());
299 load_time_data->SetString(security_interstitials::kOptInLink,
300 l10n_util::GetStringFUTF16(
301 display_options_.is_scout_reporting_enabled
302 ? IDS_SAFE_BROWSING_SCOUT_REPORTING_AGREE
303 : IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE,
304 base::UTF8ToUTF16(privacy_link)));
305 load_time_data->SetBoolean(security_interstitials::kBoxChecked,
306 display_options_.is_extended_reporting_enabled);
307 }
308
309 } // security_interstitials
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698