| 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 |