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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 std::vector<GURL> urls(1, url); | 92 std::vector<GURL> urls(1, url); |
93 return ContainsUrl(safe_browsing_util::kMalwareList, | 93 return ContainsUrl(safe_browsing_util::kMalwareList, |
94 safe_browsing_util::kPhishingList, | 94 safe_browsing_util::kPhishingList, |
95 urls, prefix_hits, full_hits); | 95 urls, prefix_hits, full_hits); |
96 } | 96 } |
97 virtual bool ContainsDownloadUrl( | 97 virtual bool ContainsDownloadUrl( |
98 const std::vector<GURL>& urls, | 98 const std::vector<GURL>& urls, |
99 std::vector<SBPrefix>* prefix_hits) OVERRIDE { | 99 std::vector<SBPrefix>* prefix_hits) OVERRIDE { |
100 std::vector<SBFullHashResult> full_hits; | 100 std::vector<SBFullHashResult> full_hits; |
101 bool found = ContainsUrl(safe_browsing_util::kBinUrlList, | 101 bool found = ContainsUrl(safe_browsing_util::kBinUrlList, |
102 safe_browsing_util::kBinHashList, | 102 safe_browsing_util::kBinUrlList, |
103 urls, prefix_hits, &full_hits); | 103 urls, prefix_hits, &full_hits); |
104 if (!found) | 104 if (!found) |
105 return false; | 105 return false; |
106 DCHECK_LE(1U, prefix_hits->size()); | 106 DCHECK_LE(1U, prefix_hits->size()); |
107 return true; | 107 return true; |
108 } | 108 } |
109 virtual bool ContainsDownloadHashPrefix(const SBPrefix& prefix) OVERRIDE { | |
110 return download_digest_prefix_.count(prefix) > 0; | |
111 } | |
112 virtual bool ContainsCsdWhitelistedUrl(const GURL& url) OVERRIDE { | 109 virtual bool ContainsCsdWhitelistedUrl(const GURL& url) OVERRIDE { |
113 return true; | 110 return true; |
114 } | 111 } |
115 virtual bool ContainsDownloadWhitelistedString( | 112 virtual bool ContainsDownloadWhitelistedString( |
116 const std::string& str) OVERRIDE { | 113 const std::string& str) OVERRIDE { |
117 return true; | 114 return true; |
118 } | 115 } |
119 virtual bool ContainsDownloadWhitelistedUrl(const GURL& url) OVERRIDE { | 116 virtual bool ContainsDownloadWhitelistedUrl(const GURL& url) OVERRIDE { |
120 return true; | 117 return true; |
121 } | 118 } |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 } | 611 } |
615 | 612 |
616 void CheckDownloadUrl(const std::vector<GURL>& url_chain) { | 613 void CheckDownloadUrl(const std::vector<GURL>& url_chain) { |
617 BrowserThread::PostTask( | 614 BrowserThread::PostTask( |
618 BrowserThread::IO, FROM_HERE, | 615 BrowserThread::IO, FROM_HERE, |
619 base::Bind(&TestSBClient::CheckDownloadUrlOnIOThread, | 616 base::Bind(&TestSBClient::CheckDownloadUrlOnIOThread, |
620 this, url_chain)); | 617 this, url_chain)); |
621 content::RunMessageLoop(); // Will stop in OnCheckDownloadUrlResult. | 618 content::RunMessageLoop(); // Will stop in OnCheckDownloadUrlResult. |
622 } | 619 } |
623 | 620 |
624 void CheckDownloadHash(const std::string& full_hash) { | |
625 BrowserThread::PostTask( | |
626 BrowserThread::IO, FROM_HERE, | |
627 base::Bind(&TestSBClient::CheckDownloadHashOnIOThread, | |
628 this, full_hash)); | |
629 content::RunMessageLoop(); // Will stop in OnCheckDownloadHashResult. | |
630 } | |
631 | |
632 private: | 621 private: |
633 friend class base::RefCountedThreadSafe<TestSBClient>; | 622 friend class base::RefCountedThreadSafe<TestSBClient>; |
634 virtual ~TestSBClient() {} | 623 virtual ~TestSBClient() {} |
635 | 624 |
636 void CheckDownloadUrlOnIOThread(const std::vector<GURL>& url_chain) { | 625 void CheckDownloadUrlOnIOThread(const std::vector<GURL>& url_chain) { |
637 safe_browsing_service_->database_manager()-> | 626 safe_browsing_service_->database_manager()-> |
638 CheckDownloadUrl(url_chain, this); | 627 CheckDownloadUrl(url_chain, this); |
639 } | 628 } |
640 | 629 |
641 void CheckDownloadHashOnIOThread(const std::string& full_hash) { | |
642 safe_browsing_service_->database_manager()-> | |
643 CheckDownloadHash(full_hash, this); | |
644 } | |
645 | |
646 // Called when the result of checking a download URL is known. | 630 // Called when the result of checking a download URL is known. |
647 virtual void OnCheckDownloadUrlResult(const std::vector<GURL>& url_chain, | 631 virtual void OnCheckDownloadUrlResult(const std::vector<GURL>& url_chain, |
648 SBThreatType threat_type) OVERRIDE { | 632 SBThreatType threat_type) OVERRIDE { |
649 threat_type_ = threat_type; | 633 threat_type_ = threat_type; |
650 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 634 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
651 base::Bind(&TestSBClient::DownloadCheckDone, this)); | 635 base::Bind(&TestSBClient::DownloadCheckDone, this)); |
652 } | 636 } |
653 | 637 |
654 // Called when the result of checking a download hash is known. | |
655 virtual void OnCheckDownloadHashResult(const std::string& hash, | |
656 SBThreatType threat_type) OVERRIDE { | |
657 threat_type_ = threat_type; | |
658 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | |
659 base::Bind(&TestSBClient::DownloadCheckDone, this)); | |
660 } | |
661 | |
662 void DownloadCheckDone() { | 638 void DownloadCheckDone() { |
663 base::MessageLoopForUI::current()->Quit(); | 639 base::MessageLoopForUI::current()->Quit(); |
664 } | 640 } |
665 | 641 |
666 SBThreatType threat_type_; | 642 SBThreatType threat_type_; |
667 SafeBrowsingService* safe_browsing_service_; | 643 SafeBrowsingService* safe_browsing_service_; |
668 | 644 |
669 DISALLOW_COPY_AND_ASSIGN(TestSBClient); | 645 DISALLOW_COPY_AND_ASSIGN(TestSBClient); |
670 }; | 646 }; |
671 | 647 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
715 GenUrlFullhashResult(badbin_url, safe_browsing_util::kBinUrlList, | 691 GenUrlFullhashResult(badbin_url, safe_browsing_util::kBinUrlList, |
716 chunk_id, &full_hash_result); | 692 chunk_id, &full_hash_result); |
717 SetupResponseForUrl(badbin_url, full_hash_result); | 693 SetupResponseForUrl(badbin_url, full_hash_result); |
718 | 694 |
719 client->CheckDownloadUrl(badbin_urls); | 695 client->CheckDownloadUrl(badbin_urls); |
720 | 696 |
721 // Now, the badbin_url is not safe since it is added to download database. | 697 // Now, the badbin_url is not safe since it is added to download database. |
722 EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_URL, client->GetThreatType()); | 698 EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_URL, client->GetThreatType()); |
723 } | 699 } |
724 | 700 |
725 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckDownloadHash) { | |
726 const std::string full_hash = "12345678902234567890323456789012"; | |
727 | |
728 scoped_refptr<TestSBClient> client(new TestSBClient); | |
729 client->CheckDownloadHash(full_hash); | |
730 | |
731 // Since badbin_url is not in database, it is considered to be safe. | |
732 EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType()); | |
733 | |
734 SBFullHashResult full_hash_result; | |
735 int chunk_id = 0; | |
736 GenDigestFullhashResult(full_hash, safe_browsing_util::kBinHashList, | |
737 chunk_id, &full_hash_result); | |
738 SetupResponseForDigest(full_hash, full_hash_result); | |
739 | |
740 client->CheckDownloadHash(full_hash); | |
741 | |
742 // Now, the badbin_url is not safe since it is added to download database. | |
743 EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_HASH, client->GetThreatType()); | |
744 } | |
745 | |
746 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckDownloadUrlTimedOut) { | 701 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckDownloadUrlTimedOut) { |
747 GURL badbin_url = test_server()->GetURL(kMalwareFile); | 702 GURL badbin_url = test_server()->GetURL(kMalwareFile); |
748 std::vector<GURL> badbin_urls(1, badbin_url); | 703 std::vector<GURL> badbin_urls(1, badbin_url); |
749 | 704 |
750 scoped_refptr<TestSBClient> client(new TestSBClient); | 705 scoped_refptr<TestSBClient> client(new TestSBClient); |
751 SBFullHashResult full_hash_result; | 706 SBFullHashResult full_hash_result; |
752 int chunk_id = 0; | 707 int chunk_id = 0; |
753 GenUrlFullhashResult(badbin_url, safe_browsing_util::kBinUrlList, | 708 GenUrlFullhashResult(badbin_url, safe_browsing_util::kBinUrlList, |
754 chunk_id, &full_hash_result); | 709 chunk_id, &full_hash_result); |
755 SetupResponseForUrl(badbin_url, full_hash_result); | 710 SetupResponseForUrl(badbin_url, full_hash_result); |
(...skipping 12 matching lines...) Expand all Loading... |
768 SetCheckTimeout(sb_service, base::TimeDelta::FromMilliseconds(1)); | 723 SetCheckTimeout(sb_service, base::TimeDelta::FromMilliseconds(1)); |
769 client->CheckDownloadUrl(badbin_urls); | 724 client->CheckDownloadUrl(badbin_urls); |
770 | 725 |
771 // There should be a timeout and the hash would be considered as safe. | 726 // There should be a timeout and the hash would be considered as safe. |
772 EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType()); | 727 EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType()); |
773 | 728 |
774 // Need to set the timeout back to the default value. | 729 // Need to set the timeout back to the default value. |
775 SetCheckTimeout(sb_service, default_urlcheck_timeout); | 730 SetCheckTimeout(sb_service, default_urlcheck_timeout); |
776 } | 731 } |
777 | 732 |
778 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckDownloadHashTimedOut) { | |
779 const std::string full_hash = "12345678902234567890323456789012"; | |
780 | |
781 scoped_refptr<TestSBClient> client(new TestSBClient); | |
782 SBFullHashResult full_hash_result; | |
783 int chunk_id = 0; | |
784 GenDigestFullhashResult(full_hash, safe_browsing_util::kBinHashList, | |
785 chunk_id, &full_hash_result); | |
786 SetupResponseForDigest(full_hash, full_hash_result); | |
787 client->CheckDownloadHash(full_hash); | |
788 | |
789 // The badbin_url is not safe since it is added to download database. | |
790 EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_HASH, client->GetThreatType()); | |
791 | |
792 // | |
793 // Now introducing delays and we should hit timeout. | |
794 // | |
795 SafeBrowsingService* sb_service = g_browser_process->safe_browsing_service(); | |
796 base::TimeDelta default_hashcheck_timeout = | |
797 GetCheckTimeout(sb_service); | |
798 IntroduceGetHashDelay(base::TimeDelta::FromSeconds(1)); | |
799 SetCheckTimeout(sb_service, base::TimeDelta::FromMilliseconds(1)); | |
800 client->CheckDownloadHash(full_hash); | |
801 | |
802 // There should be a timeout and the hash would be considered as safe. | |
803 EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType()); | |
804 | |
805 // Need to set the timeout back to the default value. | |
806 SetCheckTimeout(sb_service, default_hashcheck_timeout); | |
807 } | |
808 | |
809 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, StartAndStop) { | 733 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, StartAndStop) { |
810 CreateCSDService(); | 734 CreateCSDService(); |
811 SafeBrowsingService* sb_service = g_browser_process->safe_browsing_service(); | 735 SafeBrowsingService* sb_service = g_browser_process->safe_browsing_service(); |
812 safe_browsing::ClientSideDetectionService* csd_service = | 736 safe_browsing::ClientSideDetectionService* csd_service = |
813 sb_service->safe_browsing_detection_service(); | 737 sb_service->safe_browsing_detection_service(); |
814 PrefService* pref_service = browser()->profile()->GetPrefs(); | 738 PrefService* pref_service = browser()->profile()->GetPrefs(); |
815 | 739 |
816 ASSERT_TRUE(sb_service != NULL); | 740 ASSERT_TRUE(sb_service != NULL); |
817 ASSERT_TRUE(csd_service != NULL); | 741 ASSERT_TRUE(csd_service != NULL); |
818 ASSERT_TRUE(pref_service != NULL); | 742 ASSERT_TRUE(pref_service != NULL); |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1051 content::WindowedNotificationObserver observer( | 975 content::WindowedNotificationObserver observer( |
1052 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, | 976 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, |
1053 content::Source<SafeBrowsingDatabaseManager>( | 977 content::Source<SafeBrowsingDatabaseManager>( |
1054 sb_service_->database_manager().get())); | 978 sb_service_->database_manager().get())); |
1055 BrowserThread::PostTask( | 979 BrowserThread::PostTask( |
1056 BrowserThread::IO, | 980 BrowserThread::IO, |
1057 FROM_HERE, | 981 FROM_HERE, |
1058 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, this)); | 982 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, this)); |
1059 observer.Wait(); | 983 observer.Wait(); |
1060 } | 984 } |
OLD | NEW |