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

Side by Side Diff: chrome/browser/safe_browsing/safe_browsing_blocking_page.cc

Issue 872813003: Add Rappor metrics for Safe Browsing and SSL interstitials. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Actually fix nit Created 5 years, 10 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // Implementation of the SafeBrowsingBlockingPage class. 5 // Implementation of the SafeBrowsingBlockingPage class.
6 6
7 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" 7 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h"
8 8
9 #include <string> 9 #include <string>
10 10
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 } 168 }
169 DCHECK(phishing || malware || harmful); 169 DCHECK(phishing || malware || harmful);
170 if (malware) 170 if (malware)
171 interstitial_reason_ = SB_REASON_MALWARE; 171 interstitial_reason_ = SB_REASON_MALWARE;
172 else if (harmful) 172 else if (harmful)
173 interstitial_reason_ = SB_REASON_HARMFUL; 173 interstitial_reason_ = SB_REASON_HARMFUL;
174 else 174 else
175 interstitial_reason_ = SB_REASON_PHISHING; 175 interstitial_reason_ = SB_REASON_PHISHING;
176 176
177 // This must be done after calculating |interstitial_reason_| above. 177 // This must be done after calculating |interstitial_reason_| above.
178 uma_helper_.reset(new SecurityInterstitialUmaHelper( 178 metrics_helper_.reset(new SecurityInterstitialMetricsHelper(
179 web_contents, request_url(), 179 web_contents, request_url(), GetMetricPrefix(), GetMetricPrefix(),
180 GetHistogramPrefix(), GetSamplingEventName())); 180 GetSamplingEventName()));
181 uma_helper_->RecordUserDecision(SecurityInterstitialUmaHelper::SHOW); 181 metrics_helper_->RecordUserDecision(SecurityInterstitialMetricsHelper::SHOW);
182 uma_helper_->RecordUserInteraction( 182 metrics_helper_->RecordUserInteraction(
183 SecurityInterstitialUmaHelper::TOTAL_VISITS); 183 SecurityInterstitialMetricsHelper::TOTAL_VISITS);
184 if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) { 184 if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
185 uma_helper_->RecordUserDecision( 185 metrics_helper_->RecordUserDecision(
186 SecurityInterstitialUmaHelper::PROCEEDING_DISABLED); 186 SecurityInterstitialMetricsHelper::PROCEEDING_DISABLED);
187 } 187 }
188 188
189 if (!is_main_frame_load_blocked_) { 189 if (!is_main_frame_load_blocked_) {
190 navigation_entry_index_to_remove_ = 190 navigation_entry_index_to_remove_ =
191 web_contents->GetController().GetLastCommittedEntryIndex(); 191 web_contents->GetController().GetLastCommittedEntryIndex();
192 } else { 192 } else {
193 navigation_entry_index_to_remove_ = -1; 193 navigation_entry_index_to_remove_ = -1;
194 } 194 }
195 195
196 // Start computing malware details. They will be sent only 196 // Start computing malware details. They will be sent only
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 return; 232 return;
233 } 233 }
234 234
235 if (command == kDontReportCommand) { 235 if (command == kDontReportCommand) {
236 SetReportingPreference(false); 236 SetReportingPreference(false);
237 return; 237 return;
238 } 238 }
239 239
240 if (command == kLearnMoreCommand) { 240 if (command == kLearnMoreCommand) {
241 // User pressed "Learn more". 241 // User pressed "Learn more".
242 uma_helper_->RecordUserInteraction( 242 metrics_helper_->RecordUserInteraction(
243 SecurityInterstitialUmaHelper::SHOW_LEARN_MORE); 243 SecurityInterstitialMetricsHelper::SHOW_LEARN_MORE);
244 GURL learn_more_url( 244 GURL learn_more_url(
245 interstitial_reason_ == SB_REASON_PHISHING ? 245 interstitial_reason_ == SB_REASON_PHISHING ?
246 kLearnMorePhishingUrlV2 : kLearnMoreMalwareUrlV2); 246 kLearnMorePhishingUrlV2 : kLearnMoreMalwareUrlV2);
247 learn_more_url = google_util::AppendGoogleLocaleParam( 247 learn_more_url = google_util::AppendGoogleLocaleParam(
248 learn_more_url, g_browser_process->GetApplicationLocale()); 248 learn_more_url, g_browser_process->GetApplicationLocale());
249 OpenURLParams params(learn_more_url, 249 OpenURLParams params(learn_more_url,
250 Referrer(), 250 Referrer(),
251 CURRENT_TAB, 251 CURRENT_TAB,
252 ui::PAGE_TRANSITION_LINK, 252 ui::PAGE_TRANSITION_LINK,
253 false); 253 false);
254 web_contents()->OpenURL(params); 254 web_contents()->OpenURL(params);
255 return; 255 return;
256 } 256 }
257 257
258 if (command == kShowPrivacyCommand) { 258 if (command == kShowPrivacyCommand) {
259 // User pressed "Safe Browsing privacy policy". 259 // User pressed "Safe Browsing privacy policy".
260 uma_helper_->RecordUserInteraction( 260 metrics_helper_->RecordUserInteraction(
261 SecurityInterstitialUmaHelper::SHOW_PRIVACY_POLICY); 261 SecurityInterstitialMetricsHelper::SHOW_PRIVACY_POLICY);
262 GURL privacy_url( 262 GURL privacy_url(
263 l10n_util::GetStringUTF8(IDS_SAFE_BROWSING_PRIVACY_POLICY_URL)); 263 l10n_util::GetStringUTF8(IDS_SAFE_BROWSING_PRIVACY_POLICY_URL));
264 privacy_url = google_util::AppendGoogleLocaleParam( 264 privacy_url = google_util::AppendGoogleLocaleParam(
265 privacy_url, g_browser_process->GetApplicationLocale()); 265 privacy_url, g_browser_process->GetApplicationLocale());
266 OpenURLParams params(privacy_url, 266 OpenURLParams params(privacy_url,
267 Referrer(), 267 Referrer(),
268 CURRENT_TAB, 268 CURRENT_TAB,
269 ui::PAGE_TRANSITION_LINK, 269 ui::PAGE_TRANSITION_LINK,
270 false); 270 false);
271 web_contents()->OpenURL(params); 271 web_contents()->OpenURL(params);
272 return; 272 return;
273 } 273 }
274 274
275 bool proceed_blocked = false; 275 bool proceed_blocked = false;
276 if (command == kProceedCommand) { 276 if (command == kProceedCommand) {
277 if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) { 277 if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
278 proceed_blocked = true; 278 proceed_blocked = true;
279 } else { 279 } else {
280 uma_helper_->RecordUserDecision(SecurityInterstitialUmaHelper::PROCEED); 280 metrics_helper_->RecordUserDecision(
281 SecurityInterstitialMetricsHelper::PROCEED);
281 interstitial_page()->Proceed(); 282 interstitial_page()->Proceed();
282 // |this| has been deleted after Proceed() returns. 283 // |this| has been deleted after Proceed() returns.
283 return; 284 return;
284 } 285 }
285 } 286 }
286 287
287 if (command == kTakeMeBackCommand || proceed_blocked) { 288 if (command == kTakeMeBackCommand || proceed_blocked) {
288 // Don't record the user action here because there are other ways of 289 // Don't record the user action here because there are other ways of
289 // triggering DontProceed, like clicking the back button. 290 // triggering DontProceed, like clicking the back button.
290 if (is_main_frame_load_blocked_) { 291 if (is_main_frame_load_blocked_) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 } 327 }
327 328
328 if (element_index >= unsafe_resources_.size()) { 329 if (element_index >= unsafe_resources_.size()) {
329 NOTREACHED(); 330 NOTREACHED();
330 return; 331 return;
331 } 332 }
332 333
333 std::string bad_url_spec = unsafe_resources_[element_index].url.spec(); 334 std::string bad_url_spec = unsafe_resources_[element_index].url.spec();
334 if (command == kShowDiagnosticCommand) { 335 if (command == kShowDiagnosticCommand) {
335 // We're going to take the user to Google's SafeBrowsing diagnostic page. 336 // We're going to take the user to Google's SafeBrowsing diagnostic page.
336 uma_helper_->RecordUserInteraction( 337 metrics_helper_->RecordUserInteraction(
337 SecurityInterstitialUmaHelper::SHOW_DIAGNOSTIC); 338 SecurityInterstitialMetricsHelper::SHOW_DIAGNOSTIC);
338 std::string diagnostic = 339 std::string diagnostic =
339 base::StringPrintf(kSbDiagnosticUrl, 340 base::StringPrintf(kSbDiagnosticUrl,
340 net::EscapeQueryParamValue(bad_url_spec, true).c_str()); 341 net::EscapeQueryParamValue(bad_url_spec, true).c_str());
341 GURL diagnostic_url(diagnostic); 342 GURL diagnostic_url(diagnostic);
342 diagnostic_url = google_util::AppendGoogleLocaleParam( 343 diagnostic_url = google_util::AppendGoogleLocaleParam(
343 diagnostic_url, g_browser_process->GetApplicationLocale()); 344 diagnostic_url, g_browser_process->GetApplicationLocale());
344 DCHECK(unsafe_resources_[element_index].threat_type == 345 DCHECK(unsafe_resources_[element_index].threat_type ==
345 SB_THREAT_TYPE_URL_MALWARE || 346 SB_THREAT_TYPE_URL_MALWARE ||
346 unsafe_resources_[element_index].threat_type == 347 unsafe_resources_[element_index].threat_type ==
347 SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL || 348 SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL ||
348 unsafe_resources_[element_index].threat_type == 349 unsafe_resources_[element_index].threat_type ==
349 SB_THREAT_TYPE_URL_UNWANTED); 350 SB_THREAT_TYPE_URL_UNWANTED);
350 OpenURLParams params( 351 OpenURLParams params(
351 diagnostic_url, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_LINK, 352 diagnostic_url, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_LINK,
352 false); 353 false);
353 web_contents()->OpenURL(params); 354 web_contents()->OpenURL(params);
354 return; 355 return;
355 } 356 }
356 357
357 if (command == kExpandedSeeMoreCommand) { 358 if (command == kExpandedSeeMoreCommand) {
358 uma_helper_->RecordUserInteraction( 359 metrics_helper_->RecordUserInteraction(
359 SecurityInterstitialUmaHelper::SHOW_ADVANCED); 360 SecurityInterstitialMetricsHelper::SHOW_ADVANCED);
360 return; 361 return;
361 } 362 }
362 363
363 NOTREACHED() << "Unexpected command: " << command; 364 NOTREACHED() << "Unexpected command: " << command;
364 } 365 }
365 366
366 void SafeBrowsingBlockingPage::OverrideRendererPrefs( 367 void SafeBrowsingBlockingPage::OverrideRendererPrefs(
367 content::RendererPreferences* prefs) { 368 content::RendererPreferences* prefs) {
368 Profile* profile = Profile::FromBrowserContext( 369 Profile* profile = Profile::FromBrowserContext(
369 web_contents()->GetBrowserContext()); 370 web_contents()->GetBrowserContext());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 return is_main_frame_load_blocked_; 415 return is_main_frame_load_blocked_;
415 } 416 }
416 417
417 void SafeBrowsingBlockingPage::OnDontProceed() { 418 void SafeBrowsingBlockingPage::OnDontProceed() {
418 // We could have already called Proceed(), in which case we must not notify 419 // We could have already called Proceed(), in which case we must not notify
419 // the SafeBrowsingUIManager again, as the client has been deleted. 420 // the SafeBrowsingUIManager again, as the client has been deleted.
420 if (proceeded_) 421 if (proceeded_)
421 return; 422 return;
422 423
423 if (!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) { 424 if (!IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) {
424 uma_helper_->RecordUserDecision( 425 metrics_helper_->RecordUserDecision(
425 SecurityInterstitialUmaHelper::DONT_PROCEED); 426 SecurityInterstitialMetricsHelper::DONT_PROCEED);
426 } 427 }
427 428
428 // Send the malware details, if we opted to. 429 // Send the malware details, if we opted to.
429 FinishMalwareDetails(0); // No delay 430 FinishMalwareDetails(0); // No delay
430 431
431 NotifySafeBrowsingUIManager(ui_manager_, unsafe_resources_, false); 432 NotifySafeBrowsingUIManager(ui_manager_, unsafe_resources_, false);
432 433
433 // The user does not want to proceed, clear the queued unsafe resources 434 // The user does not want to proceed, clear the queued unsafe resources
434 // notifications we received while the interstitial was showing. 435 // notifications we received while the interstitial was showing.
435 UnsafeResourceMap* unsafe_resource_map = GetUnsafeResourcesMap(); 436 UnsafeResourceMap* unsafe_resource_map = GetUnsafeResourcesMap();
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 // load, since they happen after the page is finished loading. 549 // load, since they happen after the page is finished loading.
549 if (unsafe_resources[0].threat_type == 550 if (unsafe_resources[0].threat_type ==
550 SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL) { 551 SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL) {
551 return false; 552 return false;
552 } 553 }
553 554
554 // Otherwise, check the threat type. 555 // Otherwise, check the threat type.
555 return unsafe_resources.size() == 1 && !unsafe_resources[0].is_subresource; 556 return unsafe_resources.size() == 1 && !unsafe_resources[0].is_subresource;
556 } 557 }
557 558
558 std::string SafeBrowsingBlockingPage::GetHistogramPrefix() const { 559 std::string SafeBrowsingBlockingPage::GetMetricPrefix() const {
559 switch (interstitial_reason_) { 560 switch (interstitial_reason_) {
560 case SB_REASON_MALWARE: 561 case SB_REASON_MALWARE:
561 return "malware"; 562 return "malware";
562 case SB_REASON_HARMFUL: 563 case SB_REASON_HARMFUL:
563 return "harmful"; 564 return "harmful";
564 case SB_REASON_PHISHING: 565 case SB_REASON_PHISHING:
565 return "phishing"; 566 return "phishing";
566 } 567 }
567 NOTREACHED(); 568 NOTREACHED();
568 return std::string(); 569 return std::string();
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 load_time_data->SetString( 700 load_time_data->SetString(
700 "explanationParagraph", 701 "explanationParagraph",
701 l10n_util::GetStringFUTF16(IDS_PHISHING_V3_EXPLANATION_PARAGRAPH, 702 l10n_util::GetStringFUTF16(IDS_PHISHING_V3_EXPLANATION_PARAGRAPH,
702 GetFormattedHostName())); 703 GetFormattedHostName()));
703 load_time_data->SetString( 704 load_time_data->SetString(
704 "finalParagraph", 705 "finalParagraph",
705 l10n_util::GetStringUTF16(IDS_PHISHING_V3_PROCEED_PARAGRAPH)); 706 l10n_util::GetStringUTF16(IDS_PHISHING_V3_PROCEED_PARAGRAPH));
706 707
707 PopulateExtendedReportingOption(load_time_data); 708 PopulateExtendedReportingOption(load_time_data);
708 } 709 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698