OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 } |
OLD | NEW |