// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/safe_browsing/database_manager.h" #include "chrome/browser/safe_browsing/safe_browsing_service.h" #include "content/public/test/test_browser_thread_bundle.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" #include "url/gurl.h" using content::TestBrowserThreadBundle; class SafeBrowsingDatabaseManagerTest : public PlatformTest { public: bool RunSBHashTest(const safe_browsing_util::ListType list_type, const std::vector& expected_threats, const std::string& result_list); private: TestBrowserThreadBundle thread_bundle_; }; bool SafeBrowsingDatabaseManagerTest::RunSBHashTest( const safe_browsing_util::ListType list_type, const std::vector& expected_threats, const std::string& result_list) { scoped_refptr sb_service_( SafeBrowsingService::CreateSafeBrowsingService()); scoped_refptr db_manager_( new SafeBrowsingDatabaseManager(sb_service_)); const SBFullHash same_full_hash = {}; SafeBrowsingDatabaseManager::SafeBrowsingCheck* check = new SafeBrowsingDatabaseManager::SafeBrowsingCheck( std::vector(), std::vector(1, same_full_hash), NULL, list_type, expected_threats); db_manager_->checks_.insert(check); const SBFullHashResult full_hash_result = { same_full_hash, safe_browsing_util::GetListId(result_list) }; std::vector fake_results(1, full_hash_result); bool result = db_manager_->HandleOneCheck(check, fake_results); db_manager_->checks_.erase(check); delete check; return result; } TEST_F(SafeBrowsingDatabaseManagerTest, CheckCorrespondsListType) { std::vector malware_threat(1, SB_THREAT_TYPE_BINARY_MALWARE_URL); EXPECT_FALSE(RunSBHashTest(safe_browsing_util::BINURL, malware_threat, safe_browsing_util::kMalwareList)); EXPECT_TRUE(RunSBHashTest(safe_browsing_util::BINURL, malware_threat, safe_browsing_util::kBinUrlList)); // Check for multiple threats std::vector multiple_threats; multiple_threats.push_back(SB_THREAT_TYPE_URL_MALWARE); multiple_threats.push_back(SB_THREAT_TYPE_URL_PHISHING); EXPECT_FALSE(RunSBHashTest(safe_browsing_util::MALWARE, multiple_threats, safe_browsing_util::kBinUrlList)); EXPECT_TRUE(RunSBHashTest(safe_browsing_util::MALWARE, multiple_threats, safe_browsing_util::kMalwareList)); } TEST_F(SafeBrowsingDatabaseManagerTest, GetUrlThreatType) { std::vector full_hashes; const GURL kMalwareUrl("http://www.malware.com/page.html"); const GURL kPhishingUrl("http://www.phishing.com/page.html"); const GURL kSafeUrl("http://www.safe.com/page.html"); const SBFullHash kMalwareHostHash = SBFullHashForString("malware.com/"); const SBFullHash kPhishingHostHash = SBFullHashForString("phishing.com/"); const SBFullHash kSafeHostHash = SBFullHashForString("www.safe.com/"); { SBFullHashResult full_hash; full_hash.hash = kMalwareHostHash; full_hash.list_id = static_cast(safe_browsing_util::MALWARE); full_hashes.push_back(full_hash); } { SBFullHashResult full_hash; full_hash.hash = kPhishingHostHash; full_hash.list_id = static_cast(safe_browsing_util::PHISH); full_hashes.push_back(full_hash); } EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, SafeBrowsingDatabaseManager::GetHashThreatType( kMalwareHostHash, full_hashes)); EXPECT_EQ(SB_THREAT_TYPE_URL_PHISHING, SafeBrowsingDatabaseManager::GetHashThreatType( kPhishingHostHash, full_hashes)); EXPECT_EQ(SB_THREAT_TYPE_SAFE, SafeBrowsingDatabaseManager::GetHashThreatType( kSafeHostHash, full_hashes)); EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, SafeBrowsingDatabaseManager::GetUrlThreatType( kMalwareUrl, full_hashes)); EXPECT_EQ(SB_THREAT_TYPE_URL_PHISHING, SafeBrowsingDatabaseManager::GetUrlThreatType( kPhishingUrl, full_hashes)); EXPECT_EQ(SB_THREAT_TYPE_SAFE, SafeBrowsingDatabaseManager::GetUrlThreatType( kSafeUrl, full_hashes)); }