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 "chrome/browser/safe_browsing/safe_browsing_service.h" | 9 #include "chrome/browser/safe_browsing/safe_browsing_service.h" |
10 | 10 |
(...skipping 21 matching lines...) Expand all Loading... |
32 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 32 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
33 #include "chrome/browser/prerender/prerender_manager.h" | 33 #include "chrome/browser/prerender/prerender_manager.h" |
34 #include "chrome/browser/profiles/profile.h" | 34 #include "chrome/browser/profiles/profile.h" |
35 #include "chrome/browser/profiles/profile_manager.h" | 35 #include "chrome/browser/profiles/profile_manager.h" |
36 #include "chrome/browser/safe_browsing/client_side_detection_service.h" | 36 #include "chrome/browser/safe_browsing/client_side_detection_service.h" |
37 #include "chrome/browser/safe_browsing/local_database_manager.h" | 37 #include "chrome/browser/safe_browsing/local_database_manager.h" |
38 #include "chrome/browser/safe_browsing/protocol_manager.h" | 38 #include "chrome/browser/safe_browsing/protocol_manager.h" |
39 #include "chrome/browser/safe_browsing/safe_browsing_database.h" | 39 #include "chrome/browser/safe_browsing/safe_browsing_database.h" |
40 #include "chrome/browser/safe_browsing/test_safe_browsing_service.h" | 40 #include "chrome/browser/safe_browsing/test_safe_browsing_service.h" |
41 #include "chrome/browser/safe_browsing/ui_manager.h" | 41 #include "chrome/browser/safe_browsing/ui_manager.h" |
| 42 #include "chrome/browser/safe_browsing/v4_test_utils.h" |
42 #include "chrome/browser/ui/browser.h" | 43 #include "chrome/browser/ui/browser.h" |
43 #include "chrome/browser/ui/browser_navigator_params.h" | 44 #include "chrome/browser/ui/browser_navigator_params.h" |
44 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 45 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
45 #include "chrome/common/chrome_paths.h" | 46 #include "chrome/common/chrome_paths.h" |
46 #include "chrome/common/pref_names.h" | 47 #include "chrome/common/pref_names.h" |
47 #include "chrome/test/base/in_process_browser_test.h" | 48 #include "chrome/test/base/in_process_browser_test.h" |
48 #include "chrome/test/base/ui_test_utils.h" | 49 #include "chrome/test/base/ui_test_utils.h" |
49 #include "components/bookmarks/browser/startup_task_runner_service.h" | 50 #include "components/bookmarks/browser/startup_task_runner_service.h" |
50 #include "components/content_settings/core/browser/host_content_settings_map.h" | 51 #include "components/content_settings/core/browser/host_content_settings_map.h" |
51 #include "components/prefs/pref_service.h" | 52 #include "components/prefs/pref_service.h" |
(...skipping 1752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1804 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, | 1805 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, |
1805 content::Source<SafeBrowsingDatabaseManager>( | 1806 content::Source<SafeBrowsingDatabaseManager>( |
1806 sb_factory_->test_safe_browsing_service()->database_manager().get())); | 1807 sb_factory_->test_safe_browsing_service()->database_manager().get())); |
1807 BrowserThread::PostTask( | 1808 BrowserThread::PostTask( |
1808 BrowserThread::IO, FROM_HERE, | 1809 BrowserThread::IO, FROM_HERE, |
1809 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, | 1810 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, |
1810 base::Unretained(this))); | 1811 base::Unretained(this))); |
1811 observer.Wait(); | 1812 observer.Wait(); |
1812 } | 1813 } |
1813 | 1814 |
1814 class TestV4Store : public V4Store { | |
1815 public: | |
1816 TestV4Store(const scoped_refptr<base::SequencedTaskRunner>& task_runner, | |
1817 const base::FilePath& store_path) | |
1818 : V4Store(task_runner, store_path, 0) {} | |
1819 | |
1820 bool HasValidData() const override { return true; } | |
1821 | |
1822 void MarkPrefixAsBad(HashPrefix prefix) { | |
1823 hash_prefix_map_[prefix.size()] = prefix; | |
1824 } | |
1825 }; | |
1826 | |
1827 class TestV4StoreFactory : public V4StoreFactory { | |
1828 public: | |
1829 V4Store* CreateV4Store( | |
1830 const scoped_refptr<base::SequencedTaskRunner>& task_runner, | |
1831 const base::FilePath& store_path) override { | |
1832 V4Store* new_store = new TestV4Store(task_runner, store_path); | |
1833 new_store->Initialize(); | |
1834 return new_store; | |
1835 } | |
1836 }; | |
1837 | |
1838 class TestV4Database : public V4Database { | |
1839 public: | |
1840 TestV4Database(const scoped_refptr<base::SequencedTaskRunner>& db_task_runner, | |
1841 std::unique_ptr<StoreMap> store_map) | |
1842 : V4Database(db_task_runner, std::move(store_map)) {} | |
1843 | |
1844 void MarkPrefixAsBad(ListIdentifier list_id, HashPrefix prefix) { | |
1845 V4Store* base_store = store_map_->at(list_id).get(); | |
1846 TestV4Store* test_store = static_cast<TestV4Store*>(base_store); | |
1847 test_store->MarkPrefixAsBad(prefix); | |
1848 } | |
1849 }; | |
1850 | |
1851 class TestV4DatabaseFactory : public V4DatabaseFactory { | |
1852 public: | |
1853 TestV4DatabaseFactory() : v4_db_(nullptr) {} | |
1854 | |
1855 std::unique_ptr<V4Database> Create( | |
1856 const scoped_refptr<base::SequencedTaskRunner>& db_task_runner, | |
1857 std::unique_ptr<StoreMap> store_map) override { | |
1858 v4_db_ = new TestV4Database(db_task_runner, std::move(store_map)); | |
1859 return base::WrapUnique(v4_db_); | |
1860 } | |
1861 | |
1862 void MarkPrefixAsBad(ListIdentifier list_id, HashPrefix prefix) { | |
1863 v4_db_->MarkPrefixAsBad(list_id, prefix); | |
1864 } | |
1865 | |
1866 private: | |
1867 // Owned by V4LocalDatabaseManager. Each test in the V4SafeBrowsingServiceTest | |
1868 // class instantiates a new SafebrowsingService instance, which instantiates a | |
1869 // new V4LocalDatabaseManager, which instantiates a new V4Database using this | |
1870 // method so use-after-free isn't possible. | |
1871 TestV4Database* v4_db_; | |
1872 }; | |
1873 | |
1874 class TestV4GetHashProtocolManager : public V4GetHashProtocolManager { | |
1875 public: | |
1876 TestV4GetHashProtocolManager( | |
1877 net::URLRequestContextGetter* request_context_getter, | |
1878 const StoresToCheck& stores_to_check, | |
1879 const V4ProtocolConfig& config) | |
1880 : V4GetHashProtocolManager(request_context_getter, | |
1881 stores_to_check, | |
1882 config) {} | |
1883 | |
1884 void AddToFullHashCache(FullHashInfo fhi) { | |
1885 full_hash_cache_[fhi.full_hash].full_hash_infos.push_back(fhi); | |
1886 } | |
1887 }; | |
1888 | |
1889 class TestV4GetHashProtocolManagerFactory | |
1890 : public V4GetHashProtocolManagerFactory { | |
1891 public: | |
1892 std::unique_ptr<V4GetHashProtocolManager> CreateProtocolManager( | |
1893 net::URLRequestContextGetter* request_context_getter, | |
1894 const StoresToCheck& stores_to_check, | |
1895 const V4ProtocolConfig& config) override { | |
1896 pm_ = new TestV4GetHashProtocolManager(request_context_getter, | |
1897 stores_to_check, config); | |
1898 return base::WrapUnique(pm_); | |
1899 } | |
1900 | |
1901 void AddToFullHashCache(FullHashInfo fhi) { pm_->AddToFullHashCache(fhi); } | |
1902 | |
1903 private: | |
1904 // Owned by the SafeBrowsingService. | |
1905 TestV4GetHashProtocolManager* pm_; | |
1906 }; | |
1907 | |
1908 // Tests the safe browsing blocking page in a browser. | 1815 // Tests the safe browsing blocking page in a browser. |
1909 class V4SafeBrowsingServiceTest : public SafeBrowsingServiceTest { | 1816 class V4SafeBrowsingServiceTest : public SafeBrowsingServiceTest { |
1910 public: | 1817 public: |
1911 V4SafeBrowsingServiceTest() : SafeBrowsingServiceTest() {} | 1818 V4SafeBrowsingServiceTest() : SafeBrowsingServiceTest() {} |
1912 | 1819 |
1913 void SetUp() override { | 1820 void SetUp() override { |
1914 sb_factory_ = base::MakeUnique<TestSafeBrowsingServiceFactory>( | 1821 sb_factory_ = base::MakeUnique<TestSafeBrowsingServiceFactory>( |
1915 V4FeatureList::V4UsageStatus::V4_ONLY); | 1822 V4FeatureList::V4UsageStatus::V4_ONLY); |
1916 sb_factory_->SetTestUIManager(new FakeSafeBrowsingUIManager()); | 1823 sb_factory_->SetTestUIManager(new FakeSafeBrowsingUIManager()); |
1917 SafeBrowsingService::RegisterFactory(sb_factory_.get()); | 1824 SafeBrowsingService::RegisterFactory(sb_factory_.get()); |
(...skipping 16 matching lines...) Expand all Loading... |
1934 InProcessBrowserTest::TearDown(); | 1841 InProcessBrowserTest::TearDown(); |
1935 | 1842 |
1936 // Unregister test factories after InProcessBrowserTest::TearDown | 1843 // Unregister test factories after InProcessBrowserTest::TearDown |
1937 // (which destructs SafeBrowsingService). | 1844 // (which destructs SafeBrowsingService). |
1938 V4GetHashProtocolManager::RegisterFactory(nullptr); | 1845 V4GetHashProtocolManager::RegisterFactory(nullptr); |
1939 V4Database::RegisterDatabaseFactoryForTest(nullptr); | 1846 V4Database::RegisterDatabaseFactoryForTest(nullptr); |
1940 V4Database::RegisterStoreFactoryForTest(nullptr); | 1847 V4Database::RegisterStoreFactoryForTest(nullptr); |
1941 SafeBrowsingService::RegisterFactory(nullptr); | 1848 SafeBrowsingService::RegisterFactory(nullptr); |
1942 } | 1849 } |
1943 | 1850 |
1944 // Returns a FullHash for the basic host+path pattern for a given URL after | 1851 void MarkUrlForListIdUnexpired(const GURL& bad_url, |
1945 // canonicalization. | 1852 const ListIdentifier& list_id, |
1946 FullHash GetFullHash(const GURL& url) { | 1853 ThreatPatternType threat_pattern_type) { |
1947 std::string host; | 1854 FullHashInfo full_hash_info = |
1948 std::string path; | 1855 GetFullHashInfoWithMetadata(bad_url, list_id, threat_pattern_type); |
1949 V4ProtocolManagerUtil::CanonicalizeUrl(url, &host, &path, nullptr); | 1856 v4_db_factory_->MarkPrefixAsBad(list_id, full_hash_info.full_hash); |
1950 | 1857 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); |
1951 return crypto::SHA256HashString(host + path); | |
1952 } | |
1953 | |
1954 // Returns FullHashInfo object for the basic host+path pattern for a given URL | |
1955 // after canonicalization. | |
1956 FullHashInfo GetFullHashInfo(const GURL& url, const ListIdentifier& list_id) { | |
1957 return FullHashInfo(GetFullHash(url), list_id, | |
1958 base::Time::Now() + base::TimeDelta::FromMinutes(5)); | |
1959 } | |
1960 | |
1961 // Returns a FullHashInfo info for the basic host+path pattern for a given URL | |
1962 // after canonicalization. Also adds metadata information to the FullHashInfo | |
1963 // object. | |
1964 FullHashInfo GetFullHashInfoWithMetadata( | |
1965 const GURL& url, | |
1966 const ListIdentifier& list_id, | |
1967 ThreatPatternType threat_pattern_type) { | |
1968 FullHashInfo fhi = GetFullHashInfo(url, list_id); | |
1969 fhi.metadata.threat_pattern_type = threat_pattern_type; | |
1970 return fhi; | |
1971 } | 1858 } |
1972 | 1859 |
1973 // Sets up the prefix database and the full hash cache to match one of the | 1860 // Sets up the prefix database and the full hash cache to match one of the |
1974 // prefixes for the given URL and metadata. | 1861 // prefixes for the given URL and metadata. |
1975 void MarkUrlForMalwareUnexpired( | 1862 void MarkUrlForMalwareUnexpired( |
1976 const GURL& bad_url, | 1863 const GURL& bad_url, |
1977 ThreatPatternType threat_pattern_type = ThreatPatternType::NONE) { | 1864 ThreatPatternType threat_pattern_type = ThreatPatternType::NONE) { |
1978 FullHashInfo full_hash_info = GetFullHashInfoWithMetadata( | 1865 MarkUrlForListIdUnexpired(bad_url, GetUrlMalwareId(), threat_pattern_type); |
1979 bad_url, GetUrlMalwareId(), threat_pattern_type); | |
1980 | |
1981 v4_db_factory_->MarkPrefixAsBad(GetUrlMalwareId(), | |
1982 full_hash_info.full_hash); | |
1983 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); | |
1984 } | 1866 } |
1985 | 1867 |
1986 // Sets up the prefix database and the full hash cache to match one of the | 1868 // Sets up the prefix database and the full hash cache to match one of the |
1987 // prefixes for the given URL in the UwS store. | 1869 // prefixes for the given URL in the UwS store. |
1988 void MarkUrlForUwsUnexpired(const GURL& bad_url) { | 1870 void MarkUrlForUwsUnexpired(const GURL& bad_url) { |
1989 FullHashInfo full_hash_info = GetFullHashInfo(bad_url, GetUrlUwsId()); | 1871 MarkUrlForListIdUnexpired(bad_url, GetUrlUwsId(), ThreatPatternType::NONE); |
1990 v4_db_factory_->MarkPrefixAsBad(GetUrlUwsId(), full_hash_info.full_hash); | |
1991 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); | |
1992 } | 1872 } |
1993 | 1873 |
1994 // Sets up the prefix database and the full hash cache to match one of the | 1874 // Sets up the prefix database and the full hash cache to match one of the |
1995 // prefixes for the given URL in the phishing store. | 1875 // prefixes for the given URL in the phishing store. |
1996 void MarkUrlForPhishingUnexpired(const GURL& bad_url, | 1876 void MarkUrlForPhishingUnexpired(const GURL& bad_url, |
1997 ThreatPatternType threat_pattern_type) { | 1877 ThreatPatternType threat_pattern_type) { |
1998 FullHashInfo full_hash_info = GetFullHashInfoWithMetadata( | 1878 MarkUrlForListIdUnexpired(bad_url, GetUrlSocEngId(), threat_pattern_type); |
1999 bad_url, GetUrlSocEngId(), threat_pattern_type); | |
2000 | |
2001 v4_db_factory_->MarkPrefixAsBad(GetUrlSocEngId(), full_hash_info.full_hash); | |
2002 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); | |
2003 } | 1879 } |
2004 | 1880 |
2005 // Sets up the prefix database and the full hash cache to match one of the | 1881 // Sets up the prefix database and the full hash cache to match one of the |
2006 // prefixes for the given URL in the malware binary store. | 1882 // prefixes for the given URL in the malware binary store. |
2007 void MarkUrlForMalwareBinaryUnexpired(const GURL& bad_url) { | 1883 void MarkUrlForMalwareBinaryUnexpired(const GURL& bad_url) { |
2008 FullHashInfo full_hash_info = GetFullHashInfo(bad_url, GetUrlMalBinId()); | 1884 MarkUrlForListIdUnexpired(bad_url, GetUrlMalBinId(), |
2009 v4_db_factory_->MarkPrefixAsBad(GetUrlMalBinId(), full_hash_info.full_hash); | 1885 ThreatPatternType::NONE); |
2010 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); | |
2011 } | 1886 } |
2012 | 1887 |
2013 // Sets up the prefix database and the full hash cache to match one of the | 1888 // Sets up the prefix database and the full hash cache to match one of the |
2014 // prefixes for the given URL in the client incident store. | 1889 // prefixes for the given URL in the client incident store. |
2015 void MarkUrlForResourceUnexpired(const GURL& bad_url) { | 1890 void MarkUrlForResourceUnexpired(const GURL& bad_url) { |
2016 FullHashInfo full_hash_info = | 1891 MarkUrlForListIdUnexpired(bad_url, GetChromeUrlClientIncidentId(), |
2017 GetFullHashInfo(bad_url, GetChromeUrlClientIncidentId()); | 1892 ThreatPatternType::NONE); |
2018 v4_db_factory_->MarkPrefixAsBad(GetChromeUrlClientIncidentId(), | |
2019 full_hash_info.full_hash); | |
2020 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); | |
2021 } | 1893 } |
2022 | 1894 |
2023 private: | 1895 private: |
2024 // Owned by the V4Database. | 1896 // Owned by the V4Database. |
2025 TestV4DatabaseFactory* v4_db_factory_; | 1897 TestV4DatabaseFactory* v4_db_factory_; |
2026 // Owned by the V4GetHashProtocolManager. | 1898 // Owned by the V4GetHashProtocolManager. |
2027 TestV4GetHashProtocolManagerFactory* v4_get_hash_factory_; | 1899 TestV4GetHashProtocolManagerFactory* v4_get_hash_factory_; |
2028 // Owned by the V4Database. | 1900 // Owned by the V4Database. |
2029 TestV4StoreFactory* store_factory_; | 1901 TestV4StoreFactory* store_factory_; |
2030 | 1902 |
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2657 } | 2529 } |
2658 | 2530 |
2659 INSTANTIATE_TEST_CASE_P( | 2531 INSTANTIATE_TEST_CASE_P( |
2660 MaybeSetMetadata, | 2532 MaybeSetMetadata, |
2661 V4SafeBrowsingServiceMetadataTest, | 2533 V4SafeBrowsingServiceMetadataTest, |
2662 testing::Values(ThreatPatternType::NONE, | 2534 testing::Values(ThreatPatternType::NONE, |
2663 ThreatPatternType::MALWARE_LANDING, | 2535 ThreatPatternType::MALWARE_LANDING, |
2664 ThreatPatternType::MALWARE_DISTRIBUTION)); | 2536 ThreatPatternType::MALWARE_DISTRIBUTION)); |
2665 | 2537 |
2666 } // namespace safe_browsing | 2538 } // namespace safe_browsing |
OLD | NEW |