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 // This test creates a safebrowsing service using test safebrowsing database | 5 // This test creates a safebrowsing service using test safebrowsing database |
6 // and a test protocol manager. It is used to test logics in safebrowsing | 6 // and a test protocol manager. It is used to test logics in safebrowsing |
7 // service. | 7 // service. |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
127 // otherwise it returns false. | 127 // otherwise it returns false. |
128 bool ContainsBrowseUrl(const GURL& url, | 128 bool ContainsBrowseUrl(const GURL& url, |
129 std::vector<SBPrefix>* prefix_hits, | 129 std::vector<SBPrefix>* prefix_hits, |
130 std::vector<SBFullHashResult>* cache_hits) override { | 130 std::vector<SBFullHashResult>* cache_hits) override { |
131 cache_hits->clear(); | 131 cache_hits->clear(); |
132 return ContainsUrl(safe_browsing_util::MALWARE, | 132 return ContainsUrl(safe_browsing_util::MALWARE, |
133 safe_browsing_util::PHISH, | 133 safe_browsing_util::PHISH, |
134 std::vector<GURL>(1, url), | 134 std::vector<GURL>(1, url), |
135 prefix_hits); | 135 prefix_hits); |
136 } | 136 } |
137 bool ContainsUnwantedSoftwareUrl( | |
138 const GURL& url, | |
139 std::vector<SBPrefix>* prefix_hits, | |
140 std::vector<SBFullHashResult>* cache_hits) override { | |
141 cache_hits->clear(); | |
142 return ContainsUrl(safe_browsing_util::UNWANTEDURL, | |
143 safe_browsing_util::UNWANTEDURL, | |
144 std::vector<GURL>(1, url), | |
145 prefix_hits); | |
146 } | |
137 bool ContainsDownloadUrl(const std::vector<GURL>& urls, | 147 bool ContainsDownloadUrl(const std::vector<GURL>& urls, |
138 std::vector<SBPrefix>* prefix_hits) override { | 148 std::vector<SBPrefix>* prefix_hits) override { |
139 bool found = ContainsUrl(safe_browsing_util::BINURL, | 149 bool found = ContainsUrl(safe_browsing_util::BINURL, |
140 safe_browsing_util::BINURL, | 150 safe_browsing_util::BINURL, |
141 urls, | 151 urls, |
142 prefix_hits); | 152 prefix_hits); |
143 if (!found) | 153 if (!found) |
144 return false; | 154 return false; |
145 DCHECK_LE(1U, prefix_hits->size()); | 155 DCHECK_LE(1U, prefix_hits->size()); |
146 return true; | 156 return true; |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
234 public: | 244 public: |
235 TestSafeBrowsingDatabaseFactory() : db_(NULL) {} | 245 TestSafeBrowsingDatabaseFactory() : db_(NULL) {} |
236 ~TestSafeBrowsingDatabaseFactory() override {} | 246 ~TestSafeBrowsingDatabaseFactory() override {} |
237 | 247 |
238 SafeBrowsingDatabase* CreateSafeBrowsingDatabase( | 248 SafeBrowsingDatabase* CreateSafeBrowsingDatabase( |
239 bool enable_download_protection, | 249 bool enable_download_protection, |
240 bool enable_client_side_whitelist, | 250 bool enable_client_side_whitelist, |
241 bool enable_download_whitelist, | 251 bool enable_download_whitelist, |
242 bool enable_extension_blacklist, | 252 bool enable_extension_blacklist, |
243 bool enable_side_effect_free_whitelist, | 253 bool enable_side_effect_free_whitelist, |
244 bool enable_ip_blacklist) override { | 254 bool enable_ip_blacklist, |
255 bool enabled_unwanted_software_list) override { | |
245 db_ = new TestSafeBrowsingDatabase(); | 256 db_ = new TestSafeBrowsingDatabase(); |
246 return db_; | 257 return db_; |
247 } | 258 } |
248 TestSafeBrowsingDatabase* GetDb() { | 259 TestSafeBrowsingDatabase* GetDb() { |
249 return db_; | 260 return db_; |
250 } | 261 } |
251 private: | 262 private: |
252 // Owned by the SafebrowsingService. | 263 // Owned by the SafebrowsingService. |
253 TestSafeBrowsingDatabase* db_; | 264 TestSafeBrowsingDatabase* db_; |
254 }; | 265 }; |
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
717 } | 728 } |
718 | 729 |
719 void CheckDownloadUrl(const std::vector<GURL>& url_chain) { | 730 void CheckDownloadUrl(const std::vector<GURL>& url_chain) { |
720 BrowserThread::PostTask( | 731 BrowserThread::PostTask( |
721 BrowserThread::IO, FROM_HERE, | 732 BrowserThread::IO, FROM_HERE, |
722 base::Bind(&TestSBClient::CheckDownloadUrlOnIOThread, | 733 base::Bind(&TestSBClient::CheckDownloadUrlOnIOThread, |
723 this, url_chain)); | 734 this, url_chain)); |
724 content::RunMessageLoop(); // Will stop in OnCheckDownloadUrlResult. | 735 content::RunMessageLoop(); // Will stop in OnCheckDownloadUrlResult. |
725 } | 736 } |
726 | 737 |
738 void CheckBrowseUrl(const GURL& url) { | |
739 BrowserThread::PostTask( | |
740 BrowserThread::IO, FROM_HERE, | |
741 base::Bind(&TestSBClient::CheckBrowseUrlOnIOThread, | |
742 this, url)); | |
743 content::RunMessageLoop(); // Will stop in OnCheckBrowseUrlResult. | |
744 } | |
745 | |
727 private: | 746 private: |
728 friend class base::RefCountedThreadSafe<TestSBClient>; | 747 friend class base::RefCountedThreadSafe<TestSBClient>; |
729 ~TestSBClient() override {} | 748 ~TestSBClient() override {} |
730 | 749 |
731 void CheckDownloadUrlOnIOThread(const std::vector<GURL>& url_chain) { | 750 void CheckDownloadUrlOnIOThread(const std::vector<GURL>& url_chain) { |
732 safe_browsing_service_->database_manager()-> | 751 bool synchronous_safe_signal = safe_browsing_service_->database_manager()-> |
733 CheckDownloadUrl(url_chain, this); | 752 CheckDownloadUrl(url_chain, this); |
753 if (synchronous_safe_signal) { | |
754 threat_type_ = SB_THREAT_TYPE_SAFE; | |
755 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | |
756 base::Bind(&TestSBClient::CheckDone, this)); | |
757 } | |
758 } | |
759 | |
760 void CheckBrowseUrlOnIOThread(const GURL& url) { | |
761 // The async CheckDone() hook will not be called when we have a synchronous | |
762 // safe signal, handle it right away. | |
763 bool synchronous_safe_signal = safe_browsing_service_->database_manager()-> | |
764 CheckBrowseUrl(url, this); | |
765 if (synchronous_safe_signal) { | |
766 threat_type_ = SB_THREAT_TYPE_SAFE; | |
767 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | |
768 base::Bind(&TestSBClient::CheckDone, this)); | |
769 } | |
734 } | 770 } |
735 | 771 |
736 // Called when the result of checking a download URL is known. | 772 // Called when the result of checking a download URL is known. |
737 void OnCheckDownloadUrlResult(const std::vector<GURL>& url_chain, | 773 void OnCheckDownloadUrlResult(const std::vector<GURL>& /* url_chain */, |
738 SBThreatType threat_type) override { | 774 SBThreatType threat_type) override { |
739 threat_type_ = threat_type; | 775 threat_type_ = threat_type; |
740 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 776 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
741 base::Bind(&TestSBClient::DownloadCheckDone, this)); | 777 base::Bind(&TestSBClient::CheckDone, this)); |
742 } | 778 } |
743 | 779 |
744 void DownloadCheckDone() { | 780 // Called when the result of checking a browse URL is known. |
781 void OnCheckBrowseUrlResult(const GURL& /* url */, | |
782 SBThreatType threat_type, | |
783 const std::string& /* metadata */ ) override { | |
784 threat_type_ = threat_type; | |
785 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | |
786 base::Bind(&TestSBClient::CheckDone, this)); | |
787 } | |
788 | |
789 void CheckDone() { | |
745 base::MessageLoopForUI::current()->Quit(); | 790 base::MessageLoopForUI::current()->Quit(); |
746 } | 791 } |
747 | 792 |
748 SBThreatType threat_type_; | 793 SBThreatType threat_type_; |
749 SafeBrowsingService* safe_browsing_service_; | 794 SafeBrowsingService* safe_browsing_service_; |
750 | 795 |
751 DISALLOW_COPY_AND_ASSIGN(TestSBClient); | 796 DISALLOW_COPY_AND_ASSIGN(TestSBClient); |
752 }; | 797 }; |
753 | 798 |
754 // These tests use SafeBrowsingService::Client to directly interact with | 799 // These tests use SafeBrowsingService::Client to directly interact with |
(...skipping 14 matching lines...) Expand all Loading... | |
769 GenUrlFullhashResult(badbin_url, safe_browsing_util::BINURL, | 814 GenUrlFullhashResult(badbin_url, safe_browsing_util::BINURL, |
770 &full_hash_result); | 815 &full_hash_result); |
771 SetupResponseForUrl(badbin_url, full_hash_result); | 816 SetupResponseForUrl(badbin_url, full_hash_result); |
772 | 817 |
773 client->CheckDownloadUrl(badbin_urls); | 818 client->CheckDownloadUrl(badbin_urls); |
774 | 819 |
775 // Now, the badbin_url is not safe since it is added to download database. | 820 // Now, the badbin_url is not safe since it is added to download database. |
776 EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_URL, client->GetThreatType()); | 821 EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_URL, client->GetThreatType()); |
777 } | 822 } |
778 | 823 |
824 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckUnwantedSoftwareUrl) { | |
825 const GURL bad_url = test_server()->GetURL(kMalwareFile); | |
826 { | |
827 scoped_refptr<TestSBClient> client(new TestSBClient); | |
828 | |
829 // Since bad_url is not in database, it is considered to be | |
830 // safe. | |
831 client->CheckBrowseUrl(bad_url); | |
832 EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType()); | |
833 | |
834 SBFullHashResult full_hash_result; | |
835 GenUrlFullhashResult(bad_url, safe_browsing_util::UNWANTEDURL, | |
836 &full_hash_result); | |
837 SetupResponseForUrl(bad_url, full_hash_result); | |
838 | |
839 // Now, the bad_url is not safe since it is added to download | |
840 // database. | |
841 client->CheckBrowseUrl(bad_url); | |
842 EXPECT_EQ(SB_THREAT_TYPE_URL_UNWANTED, client->GetThreatType()); | |
843 } | |
844 | |
845 // The unwantedness should survive across multiple clients. | |
846 { | |
847 scoped_refptr<TestSBClient> client(new TestSBClient); | |
848 client->CheckBrowseUrl(bad_url); | |
849 EXPECT_EQ(SB_THREAT_TYPE_URL_UNWANTED, client->GetThreatType()); | |
850 } | |
851 | |
852 // An unwanted URL also marked as malware should be flagged as malware. | |
853 { | |
854 scoped_refptr<TestSBClient> client(new TestSBClient); | |
855 | |
856 SBFullHashResult full_hash_result; | |
857 GenUrlFullhashResult(bad_url, safe_browsing_util::MALWARE, | |
858 &full_hash_result); | |
859 SetupResponseForUrl(bad_url, full_hash_result); | |
860 | |
861 client->CheckBrowseUrl(bad_url); | |
862 EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, client->GetThreatType()); | |
863 } | |
864 } | |
865 | |
866 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckBrowseUrl) { | |
867 const GURL bad_url = test_server()->GetURL(kMalwareFile); | |
868 { | |
869 scoped_refptr<TestSBClient> client(new TestSBClient); | |
870 | |
871 // Since bad_url is not in database, it is considered to be | |
872 // safe. | |
873 client->CheckBrowseUrl(bad_url); | |
874 EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType()); | |
875 | |
876 SBFullHashResult full_hash_result; | |
877 GenUrlFullhashResult(bad_url, safe_browsing_util::MALWARE, | |
878 &full_hash_result); | |
879 SetupResponseForUrl(bad_url, full_hash_result); | |
880 | |
881 // Now, the bad_url is not safe since it is added to download | |
882 // database. | |
883 client->CheckBrowseUrl(bad_url); | |
884 EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, client->GetThreatType()); | |
885 } | |
886 | |
887 // The unwantedness should survive across multiple clients. | |
888 { | |
889 scoped_refptr<TestSBClient> client(new TestSBClient); | |
890 client->CheckBrowseUrl(bad_url); | |
891 EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, client->GetThreatType()); | |
892 } | |
893 | |
894 // Adding the unwanted state to an existing malware URL should have no impact | |
895 // (i.e. a malware hit should still prevail). | |
896 { | |
897 scoped_refptr<TestSBClient> client(new TestSBClient); | |
898 | |
899 SBFullHashResult full_hash_result; | |
900 GenUrlFullhashResult(bad_url, safe_browsing_util::UNWANTEDURL, | |
901 &full_hash_result); | |
902 SetupResponseForUrl(bad_url, full_hash_result); | |
mattm
2014/11/11 01:29:11
Looks like SetupResponseForUrl just overwrites the
gab
2014/11/11 23:39:12
Right, I caught on to that as well while doing fur
| |
903 | |
904 client->CheckBrowseUrl(bad_url); | |
905 EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, client->GetThreatType()); | |
906 } | |
907 } | |
908 | |
779 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckDownloadUrlRedirects) { | 909 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckDownloadUrlRedirects) { |
780 GURL original_url = test_server()->GetURL(kEmptyPage); | 910 GURL original_url = test_server()->GetURL(kEmptyPage); |
781 GURL badbin_url = test_server()->GetURL(kMalwareFile); | 911 GURL badbin_url = test_server()->GetURL(kMalwareFile); |
782 GURL final_url = test_server()->GetURL(kEmptyPage); | 912 GURL final_url = test_server()->GetURL(kEmptyPage); |
783 std::vector<GURL> badbin_urls; | 913 std::vector<GURL> badbin_urls; |
784 badbin_urls.push_back(original_url); | 914 badbin_urls.push_back(original_url); |
785 badbin_urls.push_back(badbin_url); | 915 badbin_urls.push_back(badbin_url); |
786 badbin_urls.push_back(final_url); | 916 badbin_urls.push_back(final_url); |
787 | 917 |
788 scoped_refptr<TestSBClient> client(new TestSBClient); | 918 scoped_refptr<TestSBClient> client(new TestSBClient); |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1089 content::WindowedNotificationObserver observer( | 1219 content::WindowedNotificationObserver observer( |
1090 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, | 1220 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, |
1091 content::Source<SafeBrowsingDatabaseManager>( | 1221 content::Source<SafeBrowsingDatabaseManager>( |
1092 sb_service_->database_manager().get())); | 1222 sb_service_->database_manager().get())); |
1093 BrowserThread::PostTask( | 1223 BrowserThread::PostTask( |
1094 BrowserThread::IO, | 1224 BrowserThread::IO, |
1095 FROM_HERE, | 1225 FROM_HERE, |
1096 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, this)); | 1226 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, this)); |
1097 observer.Wait(); | 1227 observer.Wait(); |
1098 } | 1228 } |
OLD | NEW |