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

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

Issue 611603002: Add the goog-unwanted-shavar list to a new SafeBrowsing PrefixSet. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: browser tests Created 6 years, 1 month 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 // 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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698