Chromium Code Reviews| 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 |