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

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

Powered by Google App Engine
This is Rietveld 408576698