| 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/subresource_filter/test_ruleset_publisher.h" | 43 #include "chrome/browser/subresource_filter/test_ruleset_publisher.h" |
| 43 #include "chrome/browser/ui/browser.h" | 44 #include "chrome/browser/ui/browser.h" |
| 44 #include "chrome/browser/ui/browser_navigator_params.h" | 45 #include "chrome/browser/ui/browser_navigator_params.h" |
| 45 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 46 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 46 #include "chrome/common/chrome_paths.h" | 47 #include "chrome/common/chrome_paths.h" |
| 47 #include "chrome/common/pref_names.h" | 48 #include "chrome/common/pref_names.h" |
| 48 #include "chrome/test/base/in_process_browser_test.h" | 49 #include "chrome/test/base/in_process_browser_test.h" |
| 49 #include "chrome/test/base/ui_test_utils.h" | 50 #include "chrome/test/base/ui_test_utils.h" |
| 50 #include "components/bookmarks/browser/startup_task_runner_service.h" | 51 #include "components/bookmarks/browser/startup_task_runner_service.h" |
| 51 #include "components/content_settings/core/browser/host_content_settings_map.h" | 52 #include "components/content_settings/core/browser/host_content_settings_map.h" |
| (...skipping 1720 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1772 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, | 1773 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, |
| 1773 content::Source<SafeBrowsingDatabaseManager>( | 1774 content::Source<SafeBrowsingDatabaseManager>( |
| 1774 sb_factory_->test_safe_browsing_service()->database_manager().get())); | 1775 sb_factory_->test_safe_browsing_service()->database_manager().get())); |
| 1775 BrowserThread::PostTask( | 1776 BrowserThread::PostTask( |
| 1776 BrowserThread::IO, FROM_HERE, | 1777 BrowserThread::IO, FROM_HERE, |
| 1777 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, | 1778 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, |
| 1778 base::Unretained(this))); | 1779 base::Unretained(this))); |
| 1779 observer.Wait(); | 1780 observer.Wait(); |
| 1780 } | 1781 } |
| 1781 | 1782 |
| 1782 class TestV4Store : public V4Store { | |
| 1783 public: | |
| 1784 TestV4Store(const scoped_refptr<base::SequencedTaskRunner>& task_runner, | |
| 1785 const base::FilePath& store_path) | |
| 1786 : V4Store(task_runner, store_path, 0) {} | |
| 1787 | |
| 1788 bool HasValidData() const override { return true; } | |
| 1789 | |
| 1790 void MarkPrefixAsBad(HashPrefix prefix) { | |
| 1791 hash_prefix_map_[prefix.size()] = prefix; | |
| 1792 } | |
| 1793 }; | |
| 1794 | |
| 1795 class TestV4StoreFactory : public V4StoreFactory { | |
| 1796 public: | |
| 1797 V4Store* CreateV4Store( | |
| 1798 const scoped_refptr<base::SequencedTaskRunner>& task_runner, | |
| 1799 const base::FilePath& store_path) override { | |
| 1800 V4Store* new_store = new TestV4Store(task_runner, store_path); | |
| 1801 new_store->Initialize(); | |
| 1802 return new_store; | |
| 1803 } | |
| 1804 }; | |
| 1805 | |
| 1806 class TestV4Database : public V4Database { | |
| 1807 public: | |
| 1808 TestV4Database(const scoped_refptr<base::SequencedTaskRunner>& db_task_runner, | |
| 1809 std::unique_ptr<StoreMap> store_map) | |
| 1810 : V4Database(db_task_runner, std::move(store_map)) {} | |
| 1811 | |
| 1812 void MarkPrefixAsBad(ListIdentifier list_id, HashPrefix prefix) { | |
| 1813 V4Store* base_store = store_map_->at(list_id).get(); | |
| 1814 TestV4Store* test_store = static_cast<TestV4Store*>(base_store); | |
| 1815 test_store->MarkPrefixAsBad(prefix); | |
| 1816 } | |
| 1817 }; | |
| 1818 | |
| 1819 class TestV4DatabaseFactory : public V4DatabaseFactory { | |
| 1820 public: | |
| 1821 TestV4DatabaseFactory() : v4_db_(nullptr) {} | |
| 1822 | |
| 1823 std::unique_ptr<V4Database> Create( | |
| 1824 const scoped_refptr<base::SequencedTaskRunner>& db_task_runner, | |
| 1825 std::unique_ptr<StoreMap> store_map) override { | |
| 1826 v4_db_ = new TestV4Database(db_task_runner, std::move(store_map)); | |
| 1827 return base::WrapUnique(v4_db_); | |
| 1828 } | |
| 1829 | |
| 1830 void MarkPrefixAsBad(ListIdentifier list_id, HashPrefix prefix) { | |
| 1831 v4_db_->MarkPrefixAsBad(list_id, prefix); | |
| 1832 } | |
| 1833 | |
| 1834 private: | |
| 1835 // Owned by V4LocalDatabaseManager. Each test in the V4SafeBrowsingServiceTest | |
| 1836 // class instantiates a new SafebrowsingService instance, which instantiates a | |
| 1837 // new V4LocalDatabaseManager, which instantiates a new V4Database using this | |
| 1838 // method so use-after-free isn't possible. | |
| 1839 TestV4Database* v4_db_; | |
| 1840 }; | |
| 1841 | |
| 1842 class TestV4GetHashProtocolManager : public V4GetHashProtocolManager { | |
| 1843 public: | |
| 1844 TestV4GetHashProtocolManager( | |
| 1845 net::URLRequestContextGetter* request_context_getter, | |
| 1846 const StoresToCheck& stores_to_check, | |
| 1847 const V4ProtocolConfig& config) | |
| 1848 : V4GetHashProtocolManager(request_context_getter, | |
| 1849 stores_to_check, | |
| 1850 config) {} | |
| 1851 | |
| 1852 void AddToFullHashCache(FullHashInfo fhi) { | |
| 1853 full_hash_cache_[fhi.full_hash].full_hash_infos.push_back(fhi); | |
| 1854 } | |
| 1855 }; | |
| 1856 | |
| 1857 class TestV4GetHashProtocolManagerFactory | |
| 1858 : public V4GetHashProtocolManagerFactory { | |
| 1859 public: | |
| 1860 std::unique_ptr<V4GetHashProtocolManager> CreateProtocolManager( | |
| 1861 net::URLRequestContextGetter* request_context_getter, | |
| 1862 const StoresToCheck& stores_to_check, | |
| 1863 const V4ProtocolConfig& config) override { | |
| 1864 pm_ = new TestV4GetHashProtocolManager(request_context_getter, | |
| 1865 stores_to_check, config); | |
| 1866 return base::WrapUnique(pm_); | |
| 1867 } | |
| 1868 | |
| 1869 void AddToFullHashCache(FullHashInfo fhi) { pm_->AddToFullHashCache(fhi); } | |
| 1870 | |
| 1871 private: | |
| 1872 // Owned by the SafeBrowsingService. | |
| 1873 TestV4GetHashProtocolManager* pm_; | |
| 1874 }; | |
| 1875 | |
| 1876 // Tests the safe browsing blocking page in a browser. | 1783 // Tests the safe browsing blocking page in a browser. |
| 1877 class V4SafeBrowsingServiceTest : public SafeBrowsingServiceTest { | 1784 class V4SafeBrowsingServiceTest : public SafeBrowsingServiceTest { |
| 1878 public: | 1785 public: |
| 1879 V4SafeBrowsingServiceTest() : SafeBrowsingServiceTest() {} | 1786 V4SafeBrowsingServiceTest() : SafeBrowsingServiceTest() {} |
| 1880 | 1787 |
| 1881 void SetUp() override { | 1788 void SetUp() override { |
| 1882 sb_factory_ = base::MakeUnique<TestSafeBrowsingServiceFactory>( | 1789 sb_factory_ = base::MakeUnique<TestSafeBrowsingServiceFactory>( |
| 1883 V4FeatureList::V4UsageStatus::V4_ONLY); | 1790 V4FeatureList::V4UsageStatus::V4_ONLY); |
| 1884 sb_factory_->SetTestUIManager(new FakeSafeBrowsingUIManager()); | 1791 sb_factory_->SetTestUIManager(new FakeSafeBrowsingUIManager()); |
| 1885 SafeBrowsingService::RegisterFactory(sb_factory_.get()); | 1792 SafeBrowsingService::RegisterFactory(sb_factory_.get()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1902 InProcessBrowserTest::TearDown(); | 1809 InProcessBrowserTest::TearDown(); |
| 1903 | 1810 |
| 1904 // Unregister test factories after InProcessBrowserTest::TearDown | 1811 // Unregister test factories after InProcessBrowserTest::TearDown |
| 1905 // (which destructs SafeBrowsingService). | 1812 // (which destructs SafeBrowsingService). |
| 1906 V4GetHashProtocolManager::RegisterFactory(nullptr); | 1813 V4GetHashProtocolManager::RegisterFactory(nullptr); |
| 1907 V4Database::RegisterDatabaseFactoryForTest(nullptr); | 1814 V4Database::RegisterDatabaseFactoryForTest(nullptr); |
| 1908 V4Database::RegisterStoreFactoryForTest(nullptr); | 1815 V4Database::RegisterStoreFactoryForTest(nullptr); |
| 1909 SafeBrowsingService::RegisterFactory(nullptr); | 1816 SafeBrowsingService::RegisterFactory(nullptr); |
| 1910 } | 1817 } |
| 1911 | 1818 |
| 1912 // Returns a FullHash for the basic host+path pattern for a given URL after | 1819 void MarkUrlForListIdUnexpired(const GURL& bad_url, |
| 1913 // canonicalization. | 1820 const ListIdentifier& list_id, |
| 1914 FullHash GetFullHash(const GURL& url) { | 1821 ThreatPatternType threat_pattern_type) { |
| 1915 std::string host; | 1822 FullHashInfo full_hash_info = |
| 1916 std::string path; | 1823 GetFullHashInfoWithMetadata(bad_url, list_id, threat_pattern_type); |
| 1917 V4ProtocolManagerUtil::CanonicalizeUrl(url, &host, &path, nullptr); | 1824 v4_db_factory_->MarkPrefixAsBad(list_id, full_hash_info.full_hash); |
| 1918 | 1825 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); |
| 1919 return crypto::SHA256HashString(host + path); | |
| 1920 } | |
| 1921 | |
| 1922 // Returns FullHashInfo object for the basic host+path pattern for a given URL | |
| 1923 // after canonicalization. | |
| 1924 FullHashInfo GetFullHashInfo(const GURL& url, const ListIdentifier& list_id) { | |
| 1925 return FullHashInfo(GetFullHash(url), list_id, | |
| 1926 base::Time::Now() + base::TimeDelta::FromMinutes(5)); | |
| 1927 } | |
| 1928 | |
| 1929 // Returns a FullHashInfo info for the basic host+path pattern for a given URL | |
| 1930 // after canonicalization. Also adds metadata information to the FullHashInfo | |
| 1931 // object. | |
| 1932 FullHashInfo GetFullHashInfoWithMetadata( | |
| 1933 const GURL& url, | |
| 1934 const ListIdentifier& list_id, | |
| 1935 ThreatPatternType threat_pattern_type) { | |
| 1936 FullHashInfo fhi = GetFullHashInfo(url, list_id); | |
| 1937 fhi.metadata.threat_pattern_type = threat_pattern_type; | |
| 1938 return fhi; | |
| 1939 } | 1826 } |
| 1940 | 1827 |
| 1941 // Sets up the prefix database and the full hash cache to match one of the | 1828 // Sets up the prefix database and the full hash cache to match one of the |
| 1942 // prefixes for the given URL and metadata. | 1829 // prefixes for the given URL and metadata. |
| 1943 void MarkUrlForMalwareUnexpired( | 1830 void MarkUrlForMalwareUnexpired( |
| 1944 const GURL& bad_url, | 1831 const GURL& bad_url, |
| 1945 ThreatPatternType threat_pattern_type = ThreatPatternType::NONE) { | 1832 ThreatPatternType threat_pattern_type = ThreatPatternType::NONE) { |
| 1946 FullHashInfo full_hash_info = GetFullHashInfoWithMetadata( | 1833 MarkUrlForListIdUnexpired(bad_url, GetUrlMalwareId(), threat_pattern_type); |
| 1947 bad_url, GetUrlMalwareId(), threat_pattern_type); | |
| 1948 | |
| 1949 v4_db_factory_->MarkPrefixAsBad(GetUrlMalwareId(), | |
| 1950 full_hash_info.full_hash); | |
| 1951 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); | |
| 1952 } | 1834 } |
| 1953 | 1835 |
| 1954 // Sets up the prefix database and the full hash cache to match one of the | 1836 // Sets up the prefix database and the full hash cache to match one of the |
| 1955 // prefixes for the given URL in the UwS store. | 1837 // prefixes for the given URL in the UwS store. |
| 1956 void MarkUrlForUwsUnexpired(const GURL& bad_url) { | 1838 void MarkUrlForUwsUnexpired(const GURL& bad_url) { |
| 1957 FullHashInfo full_hash_info = GetFullHashInfo(bad_url, GetUrlUwsId()); | 1839 MarkUrlForListIdUnexpired(bad_url, GetUrlUwsId(), ThreatPatternType::NONE); |
| 1958 v4_db_factory_->MarkPrefixAsBad(GetUrlUwsId(), full_hash_info.full_hash); | |
| 1959 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); | |
| 1960 } | 1840 } |
| 1961 | 1841 |
| 1962 // Sets up the prefix database and the full hash cache to match one of the | 1842 // Sets up the prefix database and the full hash cache to match one of the |
| 1963 // prefixes for the given URL in the phishing store. | 1843 // prefixes for the given URL in the phishing store. |
| 1964 void MarkUrlForPhishingUnexpired(const GURL& bad_url, | 1844 void MarkUrlForPhishingUnexpired(const GURL& bad_url, |
| 1965 ThreatPatternType threat_pattern_type) { | 1845 ThreatPatternType threat_pattern_type) { |
| 1966 FullHashInfo full_hash_info = GetFullHashInfoWithMetadata( | 1846 MarkUrlForListIdUnexpired(bad_url, GetUrlSocEngId(), threat_pattern_type); |
| 1967 bad_url, GetUrlSocEngId(), threat_pattern_type); | |
| 1968 | |
| 1969 v4_db_factory_->MarkPrefixAsBad(GetUrlSocEngId(), full_hash_info.full_hash); | |
| 1970 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); | |
| 1971 } | 1847 } |
| 1972 | 1848 |
| 1973 // Sets up the prefix database and the full hash cache to match one of the | 1849 // Sets up the prefix database and the full hash cache to match one of the |
| 1974 // prefixes for the given URL in the malware binary store. | 1850 // prefixes for the given URL in the malware binary store. |
| 1975 void MarkUrlForMalwareBinaryUnexpired(const GURL& bad_url) { | 1851 void MarkUrlForMalwareBinaryUnexpired(const GURL& bad_url) { |
| 1976 FullHashInfo full_hash_info = GetFullHashInfo(bad_url, GetUrlMalBinId()); | 1852 MarkUrlForListIdUnexpired(bad_url, GetUrlMalBinId(), |
| 1977 v4_db_factory_->MarkPrefixAsBad(GetUrlMalBinId(), full_hash_info.full_hash); | 1853 ThreatPatternType::NONE); |
| 1978 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); | |
| 1979 } | 1854 } |
| 1980 | 1855 |
| 1981 // Sets up the prefix database and the full hash cache to match one of the | 1856 // Sets up the prefix database and the full hash cache to match one of the |
| 1982 // prefixes for the given URL in the client incident store. | 1857 // prefixes for the given URL in the client incident store. |
| 1983 void MarkUrlForResourceUnexpired(const GURL& bad_url) { | 1858 void MarkUrlForResourceUnexpired(const GURL& bad_url) { |
| 1984 FullHashInfo full_hash_info = | 1859 MarkUrlForListIdUnexpired(bad_url, GetChromeUrlClientIncidentId(), |
| 1985 GetFullHashInfo(bad_url, GetChromeUrlClientIncidentId()); | 1860 ThreatPatternType::NONE); |
| 1986 v4_db_factory_->MarkPrefixAsBad(GetChromeUrlClientIncidentId(), | |
| 1987 full_hash_info.full_hash); | |
| 1988 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); | |
| 1989 } | 1861 } |
| 1990 | 1862 |
| 1991 private: | 1863 private: |
| 1992 // Owned by the V4Database. | 1864 // Owned by the V4Database. |
| 1993 TestV4DatabaseFactory* v4_db_factory_; | 1865 TestV4DatabaseFactory* v4_db_factory_; |
| 1994 // Owned by the V4GetHashProtocolManager. | 1866 // Owned by the V4GetHashProtocolManager. |
| 1995 TestV4GetHashProtocolManagerFactory* v4_get_hash_factory_; | 1867 TestV4GetHashProtocolManagerFactory* v4_get_hash_factory_; |
| 1996 // Owned by the V4Database. | 1868 // Owned by the V4Database. |
| 1997 TestV4StoreFactory* store_factory_; | 1869 TestV4StoreFactory* store_factory_; |
| 1998 | 1870 |
| (...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2615 } | 2487 } |
| 2616 | 2488 |
| 2617 INSTANTIATE_TEST_CASE_P( | 2489 INSTANTIATE_TEST_CASE_P( |
| 2618 MaybeSetMetadata, | 2490 MaybeSetMetadata, |
| 2619 V4SafeBrowsingServiceMetadataTest, | 2491 V4SafeBrowsingServiceMetadataTest, |
| 2620 testing::Values(ThreatPatternType::NONE, | 2492 testing::Values(ThreatPatternType::NONE, |
| 2621 ThreatPatternType::MALWARE_LANDING, | 2493 ThreatPatternType::MALWARE_LANDING, |
| 2622 ThreatPatternType::MALWARE_DISTRIBUTION)); | 2494 ThreatPatternType::MALWARE_DISTRIBUTION)); |
| 2623 | 2495 |
| 2624 } // namespace safe_browsing | 2496 } // namespace safe_browsing |
| OLD | NEW |