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

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

Issue 584433002: Add UI for the new harmful download warning (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add histograms to histograms.xml Created 6 years, 3 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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 const char kShowPrivacyCommand[] = "showPrivacy"; 99 const char kShowPrivacyCommand[] = "showPrivacy";
100 const char kTakeMeBackCommand[] = "takeMeBack"; 100 const char kTakeMeBackCommand[] = "takeMeBack";
101 101
102 // Other constants used to communicate with the JavaScript. 102 // Other constants used to communicate with the JavaScript.
103 const char kBoxChecked[] = "boxchecked"; 103 const char kBoxChecked[] = "boxchecked";
104 const char kDisplayCheckBox[] = "displaycheckbox"; 104 const char kDisplayCheckBox[] = "displaycheckbox";
105 105
106 // Constants for the Experience Sampling instrumentation. 106 // Constants for the Experience Sampling instrumentation.
107 #if defined(ENABLE_EXTENSIONS) 107 #if defined(ENABLE_EXTENSIONS)
108 const char kEventNameMalware[] = "safebrowsing_interstitial_"; 108 const char kEventNameMalware[] = "safebrowsing_interstitial_";
109 const char kEventNameHarmful[] = "harmful_interstitial_";
109 const char kEventNamePhishing[] = "phishing_interstitial_"; 110 const char kEventNamePhishing[] = "phishing_interstitial_";
110 const char kEventNameOther[] = "safebrowsing_other_interstitial_"; 111 const char kEventNameOther[] = "safebrowsing_other_interstitial_";
111 #endif 112 #endif
112 113
113 base::LazyInstance<SafeBrowsingBlockingPage::UnsafeResourceMap> 114 base::LazyInstance<SafeBrowsingBlockingPage::UnsafeResourceMap>
114 g_unsafe_resource_map = LAZY_INSTANCE_INITIALIZER; 115 g_unsafe_resource_map = LAZY_INSTANCE_INITIALIZER;
115 116
116 } // namespace 117 } // namespace
117 118
118 // static 119 // static
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 report_loop_(NULL), 155 report_loop_(NULL),
155 is_main_frame_load_blocked_(IsMainPageLoadBlocked(unsafe_resources)), 156 is_main_frame_load_blocked_(IsMainPageLoadBlocked(unsafe_resources)),
156 unsafe_resources_(unsafe_resources), 157 unsafe_resources_(unsafe_resources),
157 proceeded_(false), 158 proceeded_(false),
158 web_contents_(web_contents), 159 web_contents_(web_contents),
159 url_(unsafe_resources[0].url), 160 url_(unsafe_resources[0].url),
160 interstitial_page_(NULL), 161 interstitial_page_(NULL),
161 create_view_(true), 162 create_view_(true),
162 num_visits_(-1) { 163 num_visits_(-1) {
163 bool malware = false; 164 bool malware = false;
165 bool harmful = false;
164 bool phishing = false; 166 bool phishing = false;
165 for (UnsafeResourceList::const_iterator iter = unsafe_resources_.begin(); 167 for (UnsafeResourceList::const_iterator iter = unsafe_resources_.begin();
166 iter != unsafe_resources_.end(); ++iter) { 168 iter != unsafe_resources_.end(); ++iter) {
167 const UnsafeResource& resource = *iter; 169 const UnsafeResource& resource = *iter;
168 SBThreatType threat_type = resource.threat_type; 170 SBThreatType threat_type = resource.threat_type;
169 if (threat_type == SB_THREAT_TYPE_URL_MALWARE || 171 if (threat_type == SB_THREAT_TYPE_URL_MALWARE ||
170 threat_type == SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL) { 172 threat_type == SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL) {
171 malware = true; 173 malware = true;
174 } else if (threat_type == SB_THREAT_TYPE_URL_HARMFUL) {
175 harmful = true;
172 } else { 176 } else {
173 DCHECK(threat_type == SB_THREAT_TYPE_URL_PHISHING || 177 DCHECK(threat_type == SB_THREAT_TYPE_URL_PHISHING ||
174 threat_type == SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL); 178 threat_type == SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL);
175 phishing = true; 179 phishing = true;
176 } 180 }
177 } 181 }
178 DCHECK(phishing || malware); 182 DCHECK(phishing || malware || harmful);
179 if (malware) 183 if (malware)
180 interstitial_type_ = TYPE_MALWARE; 184 interstitial_type_ = TYPE_MALWARE;
185 else if (harmful)
186 interstitial_type_ = TYPE_HARMFUL;
181 else 187 else
182 interstitial_type_ = TYPE_PHISHING; 188 interstitial_type_ = TYPE_PHISHING;
183 189
184 RecordUserDecision(SHOW); 190 RecordUserDecision(SHOW);
185 RecordUserInteraction(TOTAL_VISITS); 191 RecordUserInteraction(TOTAL_VISITS);
186 if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)) 192 if (IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled))
187 RecordUserDecision(PROCEEDING_DISABLED); 193 RecordUserDecision(PROCEEDING_DISABLED);
188 194
189 HistoryService* history_service = HistoryServiceFactory::GetForProfile( 195 HistoryService* history_service = HistoryServiceFactory::GetForProfile(
190 Profile::FromBrowserContext(web_contents->GetBrowserContext()), 196 Profile::FromBrowserContext(web_contents->GetBrowserContext()),
(...skipping 26 matching lines...) Expand all
217 } 223 }
218 224
219 #if defined(ENABLE_EXTENSIONS) 225 #if defined(ENABLE_EXTENSIONS)
220 // ExperienceSampling: Set up new sampling event for this interstitial. 226 // ExperienceSampling: Set up new sampling event for this interstitial.
221 // This needs to handle all types of warnings this interstitial can show. 227 // This needs to handle all types of warnings this interstitial can show.
222 std::string event_name; 228 std::string event_name;
223 switch (interstitial_type_) { 229 switch (interstitial_type_) {
224 case TYPE_MALWARE: 230 case TYPE_MALWARE:
225 event_name = kEventNameMalware; 231 event_name = kEventNameMalware;
226 break; 232 break;
233 case TYPE_HARMFUL:
234 event_name = kEventNameHarmful;
235 break;
227 case TYPE_PHISHING: 236 case TYPE_PHISHING:
228 event_name = kEventNamePhishing; 237 event_name = kEventNamePhishing;
229 break; 238 break;
230 default: 239 default:
231 event_name = kEventNameOther; 240 event_name = kEventNameOther;
232 break; 241 break;
233 } 242 }
234 sampling_event_.reset(new ExperienceSamplingEvent( 243 sampling_event_.reset(new ExperienceSamplingEvent(
235 event_name, 244 event_name,
236 url_, 245 url_,
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 num_visits_ = num_visits; 494 num_visits_ = num_visits;
486 } 495 }
487 496
488 void SafeBrowsingBlockingPage::RecordUserDecision(Decision decision) { 497 void SafeBrowsingBlockingPage::RecordUserDecision(Decision decision) {
489 switch (interstitial_type_) { 498 switch (interstitial_type_) {
490 case TYPE_MALWARE: 499 case TYPE_MALWARE:
491 UMA_HISTOGRAM_ENUMERATION("interstitial.malware.decision", 500 UMA_HISTOGRAM_ENUMERATION("interstitial.malware.decision",
492 decision, 501 decision,
493 MAX_DECISION); 502 MAX_DECISION);
494 break; 503 break;
504 case TYPE_HARMFUL:
505 UMA_HISTOGRAM_ENUMERATION("interstitial.harmful.decision",
506 decision,
507 MAX_DECISION);
508 break;
495 case TYPE_PHISHING: 509 case TYPE_PHISHING:
496 UMA_HISTOGRAM_ENUMERATION("interstitial.phishing.decision", 510 UMA_HISTOGRAM_ENUMERATION("interstitial.phishing.decision",
497 decision, 511 decision,
498 MAX_DECISION); 512 MAX_DECISION);
499 break; 513 break;
500 default:
501 NOTREACHED();
502 } 514 }
503 515
504 #if defined(ENABLE_EXTENSIONS) 516 #if defined(ENABLE_EXTENSIONS)
505 if (sampling_event_.get()) { 517 if (sampling_event_.get()) {
506 switch (decision) { 518 switch (decision) {
507 case PROCEED: 519 case PROCEED:
508 sampling_event_->CreateUserDecisionEvent( 520 sampling_event_->CreateUserDecisionEvent(
509 ExperienceSamplingEvent::kProceed); 521 ExperienceSamplingEvent::kProceed);
510 break; 522 break;
511 case DONT_PROCEED: 523 case DONT_PROCEED:
(...skipping 22 matching lines...) Expand all
534 } 546 }
535 } 547 }
536 548
537 void SafeBrowsingBlockingPage::RecordUserInteraction(Interaction interaction) { 549 void SafeBrowsingBlockingPage::RecordUserInteraction(Interaction interaction) {
538 switch (interstitial_type_) { 550 switch (interstitial_type_) {
539 case TYPE_MALWARE: 551 case TYPE_MALWARE:
540 UMA_HISTOGRAM_ENUMERATION("interstitial.malware.interaction", 552 UMA_HISTOGRAM_ENUMERATION("interstitial.malware.interaction",
541 interaction, 553 interaction,
542 MAX_INTERACTION); 554 MAX_INTERACTION);
543 break; 555 break;
556 case TYPE_HARMFUL:
557 UMA_HISTOGRAM_ENUMERATION("interstitial.harmful.interaction",
558 interaction,
559 MAX_INTERACTION);
560 break;
544 case TYPE_PHISHING: 561 case TYPE_PHISHING:
545 UMA_HISTOGRAM_ENUMERATION("interstitial.phishing.interaction", 562 UMA_HISTOGRAM_ENUMERATION("interstitial.phishing.interaction",
546 interaction, 563 interaction,
547 MAX_INTERACTION); 564 MAX_INTERACTION);
548 break; 565 break;
549 default: 566 default:
550 NOTREACHED(); 567 NOTREACHED();
mattm 2014/09/19 21:28:16 remove this default case too?
felt 2014/09/22 16:42:16 Done.
551 } 568 }
552 569
553 #if defined(ENABLE_EXTENSIONS) 570 #if defined(ENABLE_EXTENSIONS)
554 if (!sampling_event_.get()) 571 if (!sampling_event_.get())
555 return; 572 return;
556 switch (interaction) { 573 switch (interaction) {
557 case SHOW_LEARN_MORE: 574 case SHOW_LEARN_MORE:
558 sampling_event_->set_has_viewed_learn_more(true); 575 sampling_event_->set_has_viewed_learn_more(true);
559 break; 576 break;
560 case SHOW_ADVANCED: 577 case SHOW_ADVANCED:
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 load_time_data.SetString( 700 load_time_data.SetString(
684 "closeDetails", 701 "closeDetails",
685 l10n_util::GetStringUTF16(IDS_SAFEBROWSING_V3_CLOSE_DETAILS_BUTTON)); 702 l10n_util::GetStringUTF16(IDS_SAFEBROWSING_V3_CLOSE_DETAILS_BUTTON));
686 load_time_data.SetString( 703 load_time_data.SetString(
687 "primaryButtonText", 704 "primaryButtonText",
688 l10n_util::GetStringUTF16(IDS_SAFEBROWSING_OVERRIDABLE_SAFETY_BUTTON)); 705 l10n_util::GetStringUTF16(IDS_SAFEBROWSING_OVERRIDABLE_SAFETY_BUTTON));
689 load_time_data.SetBoolean( 706 load_time_data.SetBoolean(
690 "overridable", 707 "overridable",
691 !IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled)); 708 !IsPrefEnabled(prefs::kSafeBrowsingProceedAnywayDisabled));
692 709
693 if (interstitial_type_ == TYPE_PHISHING) 710 switch (interstitial_type_) {
694 PopulatePhishingLoadTimeData(&load_time_data); 711 case TYPE_MALWARE:
695 else 712 PopulateMalwareLoadTimeData(&load_time_data);
696 PopulateMalwareLoadTimeData(&load_time_data); 713 break;
714 case TYPE_HARMFUL:
715 PopulateHarmfulLoadTimeData(&load_time_data);
716 break;
717 case TYPE_PHISHING:
718 PopulatePhishingLoadTimeData(&load_time_data);
719 break;
720 }
697 721
698 base::StringPiece html( 722 base::StringPiece html(
699 ResourceBundle::GetSharedInstance().GetRawDataResource( 723 ResourceBundle::GetSharedInstance().GetRawDataResource(
700 IRD_SECURITY_INTERSTITIAL_HTML)); 724 IRD_SECURITY_INTERSTITIAL_HTML));
701 webui::UseVersion2 version; 725 webui::UseVersion2 version;
702 return webui::GetI18nTemplateHtml(html, &load_time_data); 726 return webui::GetI18nTemplateHtml(html, &load_time_data);
703 } 727 }
704 728
705 void SafeBrowsingBlockingPage::PopulateMalwareLoadTimeData( 729 void SafeBrowsingBlockingPage::PopulateMalwareLoadTimeData(
706 base::DictionaryValue* load_time_data) { 730 base::DictionaryValue* load_time_data) {
(...skipping 28 matching lines...) Expand all
735 load_time_data->SetString( 759 load_time_data->SetString(
736 "optInLink", 760 "optInLink",
737 l10n_util::GetStringFUTF16(IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE, 761 l10n_util::GetStringFUTF16(IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE,
738 base::UTF8ToUTF16(privacy_link))); 762 base::UTF8ToUTF16(privacy_link)));
739 load_time_data->SetBoolean( 763 load_time_data->SetBoolean(
740 kBoxChecked, 764 kBoxChecked,
741 IsPrefEnabled(prefs::kSafeBrowsingExtendedReportingEnabled)); 765 IsPrefEnabled(prefs::kSafeBrowsingExtendedReportingEnabled));
742 } 766 }
743 } 767 }
744 768
769 void SafeBrowsingBlockingPage::PopulateHarmfulLoadTimeData(
770 base::DictionaryValue* load_time_data) {
771 load_time_data->SetBoolean("phishing", false);
772 load_time_data->SetString(
773 "heading", l10n_util::GetStringUTF16(IDS_HARMFUL_V3_HEADING));
774 load_time_data->SetString(
775 "primaryParagraph",
776 l10n_util::GetStringFUTF16(
777 IDS_HARMFUL_V3_PRIMARY_PARAGRAPH,
778 base::UTF8ToUTF16(url_.host())));
779 load_time_data->SetString(
780 "explanationParagraph",
781 l10n_util::GetStringFUTF16(
782 IDS_HARMFUL_V3_EXPLANATION_PARAGRAPH,
783 base::UTF8ToUTF16(url_.host())));
784 load_time_data->SetString(
785 "finalParagraph",
786 l10n_util::GetStringUTF16(IDS_HARMFUL_V3_PROCEED_PARAGRAPH));
787
788 load_time_data->SetBoolean(kDisplayCheckBox, CanShowMalwareDetailsOption());
789 if (CanShowMalwareDetailsOption()) {
790 std::string privacy_link = base::StringPrintf(
791 kPrivacyLinkHtml,
792 l10n_util::GetStringUTF8(
793 IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE).c_str());
794 load_time_data->SetString(
795 "optInLink",
796 l10n_util::GetStringFUTF16(IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE,
797 base::UTF8ToUTF16(privacy_link)));
798 load_time_data->SetBoolean(
799 kBoxChecked,
800 IsPrefEnabled(prefs::kSafeBrowsingExtendedReportingEnabled));
801 }
802 }
803
745 void SafeBrowsingBlockingPage::PopulatePhishingLoadTimeData( 804 void SafeBrowsingBlockingPage::PopulatePhishingLoadTimeData(
746 base::DictionaryValue* load_time_data) { 805 base::DictionaryValue* load_time_data) {
747 load_time_data->SetBoolean("phishing", true); 806 load_time_data->SetBoolean("phishing", true);
748 load_time_data->SetString( 807 load_time_data->SetString(
749 "heading", 808 "heading",
750 l10n_util::GetStringUTF16(IDS_PHISHING_V3_HEADING)); 809 l10n_util::GetStringUTF16(IDS_PHISHING_V3_HEADING));
751 load_time_data->SetString( 810 load_time_data->SetString(
752 "primaryParagraph", 811 "primaryParagraph",
753 l10n_util::GetStringFUTF16( 812 l10n_util::GetStringFUTF16(
754 IDS_PHISHING_V3_PRIMARY_PARAGRAPH, 813 IDS_PHISHING_V3_PRIMARY_PARAGRAPH,
755 base::UTF8ToUTF16(url_.host()))); 814 base::UTF8ToUTF16(url_.host())));
756 load_time_data->SetString( 815 load_time_data->SetString(
757 "explanationParagraph", 816 "explanationParagraph",
758 l10n_util::GetStringFUTF16(IDS_PHISHING_V3_EXPLANATION_PARAGRAPH, 817 l10n_util::GetStringFUTF16(IDS_PHISHING_V3_EXPLANATION_PARAGRAPH,
759 base::UTF8ToUTF16(url_.host()))); 818 base::UTF8ToUTF16(url_.host())));
760 load_time_data->SetString( 819 load_time_data->SetString(
761 "finalParagraph", 820 "finalParagraph",
762 l10n_util::GetStringUTF16(IDS_PHISHING_V3_PROCEED_PARAGRAPH)); 821 l10n_util::GetStringUTF16(IDS_PHISHING_V3_PROCEED_PARAGRAPH));
763 } 822 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698