Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(865)

Side by Side Diff: chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc

Issue 2683813002: Part 3: Browser tests for calling client methods Check*Url with PVer4 (Closed)
Patch Set: Added comments for clarity Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | components/safe_browsing_db/v4_database.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 using content::InterstitialPage; 91 using content::InterstitialPage;
92 using content::WebContents; 92 using content::WebContents;
93 using ::testing::_; 93 using ::testing::_;
94 using ::testing::Mock; 94 using ::testing::Mock;
95 using ::testing::StrictMock; 95 using ::testing::StrictMock;
96 96
97 namespace safe_browsing { 97 namespace safe_browsing {
98 98
99 namespace { 99 namespace {
100 100
101 const char kBlacklistResource[] = "/blacklisted/script.js";
101 const char kEmptyPage[] = "/empty.html"; 102 const char kEmptyPage[] = "/empty.html";
103 const char kMaliciousResource[] = "/malware/script.js";
102 const char kMalwareFile[] = "/downloads/dangerous/dangerous.exe"; 104 const char kMalwareFile[] = "/downloads/dangerous/dangerous.exe";
103 const char kMalwarePage[] = "/safe_browsing/malware.html"; 105 const char kMalwarePage[] = "/safe_browsing/malware.html";
104 const char kMalwareDelayedLoadsPage[] = 106 const char kMalwareDelayedLoadsPage[] =
105 "/safe_browsing/malware_delayed_loads.html"; 107 "/safe_browsing/malware_delayed_loads.html";
106 const char kMalwareIFrame[] = "/safe_browsing/malware_iframe.html"; 108 const char kMalwareIFrame[] = "/safe_browsing/malware_iframe.html";
107 const char kMalwareImg[] = "/safe_browsing/malware_image.png"; 109 const char kMalwareImg[] = "/safe_browsing/malware_image.png";
108 const char kNeverCompletesPath[] = "/never_completes"; 110 const char kNeverCompletesPath[] = "/never_completes";
109 const char kPrefetchMalwarePage[] = "/safe_browsing/prefetch_malware.html"; 111 const char kPrefetchMalwarePage[] = "/safe_browsing/prefetch_malware.html";
110 112
111 class MockSubresourceFilterDriver 113 class MockSubresourceFilterDriver
(...skipping 1320 matching lines...) Expand 10 before | Expand all | Expand 10 after
1432 GenUrlFullHashResult(badbin_url, BINURL, &full_hash_result); 1434 GenUrlFullHashResult(badbin_url, BINURL, &full_hash_result);
1433 SetupResponseForUrl(badbin_url, full_hash_result); 1435 SetupResponseForUrl(badbin_url, full_hash_result);
1434 1436
1435 client->CheckDownloadUrl(badbin_urls); 1437 client->CheckDownloadUrl(badbin_urls);
1436 1438
1437 // Now, the badbin_url is not safe since it is added to download database. 1439 // Now, the badbin_url is not safe since it is added to download database.
1438 EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_URL, client->GetThreatType()); 1440 EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_URL, client->GetThreatType());
1439 } 1441 }
1440 1442
1441 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckResourceUrl) { 1443 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckResourceUrl) {
1442 const char* kBlacklistResource = "/blacklisted/script.js";
1443 GURL blacklist_resource = embedded_test_server()->GetURL(kBlacklistResource); 1444 GURL blacklist_resource = embedded_test_server()->GetURL(kBlacklistResource);
1444 std::string blacklist_resource_hash; 1445 std::string blacklist_resource_hash;
1445 const char* kMaliciousResource = "/malware/script.js";
1446 GURL malware_resource = embedded_test_server()->GetURL(kMaliciousResource); 1446 GURL malware_resource = embedded_test_server()->GetURL(kMaliciousResource);
1447 std::string malware_resource_hash; 1447 std::string malware_resource_hash;
1448 1448
1449 { 1449 {
1450 SBFullHashResult full_hash; 1450 SBFullHashResult full_hash;
1451 GenUrlFullHashResult(blacklist_resource, RESOURCEBLACKLIST, &full_hash); 1451 GenUrlFullHashResult(blacklist_resource, RESOURCEBLACKLIST, &full_hash);
1452 SetupResponseForUrl(blacklist_resource, full_hash); 1452 SetupResponseForUrl(blacklist_resource, full_hash);
1453 blacklist_resource_hash = std::string(full_hash.hash.full_hash, 1453 blacklist_resource_hash = std::string(full_hash.hash.full_hash,
1454 full_hash.hash.full_hash + 32); 1454 full_hash.hash.full_hash + 32);
1455 } 1455 }
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
1810 base::Unretained(this))); 1810 base::Unretained(this)));
1811 observer.Wait(); 1811 observer.Wait();
1812 } 1812 }
1813 1813
1814 class TestV4Store : public V4Store { 1814 class TestV4Store : public V4Store {
1815 public: 1815 public:
1816 TestV4Store(const scoped_refptr<base::SequencedTaskRunner>& task_runner, 1816 TestV4Store(const scoped_refptr<base::SequencedTaskRunner>& task_runner,
1817 const base::FilePath& store_path) 1817 const base::FilePath& store_path)
1818 : V4Store(task_runner, store_path, 0) {} 1818 : V4Store(task_runner, store_path, 0) {}
1819 1819
1820 bool HasValidData() const override { return true; }
1821
1820 void MarkPrefixAsBad(HashPrefix prefix) { 1822 void MarkPrefixAsBad(HashPrefix prefix) {
1821 hash_prefix_map_[prefix.size()] = prefix; 1823 hash_prefix_map_[prefix.size()] = prefix;
1822 } 1824 }
1823 }; 1825 };
1824 1826
1825 class TestV4StoreFactory : public V4StoreFactory { 1827 class TestV4StoreFactory : public V4StoreFactory {
1826 public: 1828 public:
1827 V4Store* CreateV4Store( 1829 V4Store* CreateV4Store(
1828 const scoped_refptr<base::SequencedTaskRunner>& task_runner, 1830 const scoped_refptr<base::SequencedTaskRunner>& task_runner,
1829 const base::FilePath& store_path) override { 1831 const base::FilePath& store_path) override {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1907 class V4SafeBrowsingServiceTest : public SafeBrowsingServiceTest { 1909 class V4SafeBrowsingServiceTest : public SafeBrowsingServiceTest {
1908 public: 1910 public:
1909 V4SafeBrowsingServiceTest() : SafeBrowsingServiceTest() {} 1911 V4SafeBrowsingServiceTest() : SafeBrowsingServiceTest() {}
1910 1912
1911 void SetUp() override { 1913 void SetUp() override {
1912 sb_factory_ = base::MakeUnique<TestSafeBrowsingServiceFactory>( 1914 sb_factory_ = base::MakeUnique<TestSafeBrowsingServiceFactory>(
1913 V4FeatureList::V4UsageStatus::V4_ONLY); 1915 V4FeatureList::V4UsageStatus::V4_ONLY);
1914 sb_factory_->SetTestUIManager(new FakeSafeBrowsingUIManager()); 1916 sb_factory_->SetTestUIManager(new FakeSafeBrowsingUIManager());
1915 SafeBrowsingService::RegisterFactory(sb_factory_.get()); 1917 SafeBrowsingService::RegisterFactory(sb_factory_.get());
1916 1918
1919 store_factory_ = new TestV4StoreFactory();
1920 V4Database::RegisterStoreFactoryForTest(base::WrapUnique(store_factory_));
1921
1917 v4_db_factory_ = new TestV4DatabaseFactory(); 1922 v4_db_factory_ = new TestV4DatabaseFactory();
1918 V4Database::RegisterDatabaseFactoryForTest( 1923 V4Database::RegisterDatabaseFactoryForTest(
1919 base::WrapUnique(v4_db_factory_)); 1924 base::WrapUnique(v4_db_factory_));
1920 1925
1921 v4_get_hash_factory_ = new TestV4GetHashProtocolManagerFactory(); 1926 v4_get_hash_factory_ = new TestV4GetHashProtocolManagerFactory();
1922 V4GetHashProtocolManager::RegisterFactory( 1927 V4GetHashProtocolManager::RegisterFactory(
1923 base::WrapUnique(v4_get_hash_factory_)); 1928 base::WrapUnique(v4_get_hash_factory_));
1929
1924 InProcessBrowserTest::SetUp(); 1930 InProcessBrowserTest::SetUp();
1925 } 1931 }
1926 1932
1927 void TearDown() override { 1933 void TearDown() override {
1928 InProcessBrowserTest::TearDown(); 1934 InProcessBrowserTest::TearDown();
1929 1935
1930 // Unregister test factories after InProcessBrowserTest::TearDown 1936 // Unregister test factories after InProcessBrowserTest::TearDown
1931 // (which destructs SafeBrowsingService). 1937 // (which destructs SafeBrowsingService).
1932 V4GetHashProtocolManager::RegisterFactory(nullptr); 1938 V4GetHashProtocolManager::RegisterFactory(nullptr);
1933 V4Database::RegisterDatabaseFactoryForTest(nullptr); 1939 V4Database::RegisterDatabaseFactoryForTest(nullptr);
1940 V4Database::RegisterStoreFactoryForTest(nullptr);
1934 SafeBrowsingService::RegisterFactory(nullptr); 1941 SafeBrowsingService::RegisterFactory(nullptr);
1935 } 1942 }
1936 1943
1937 // Returns a FullHashInfo info for the basic host+path pattern for a given URL 1944 // Returns a FullHash for the basic host+path pattern for a given URL after
1938 // after canonicalization. 1945 // canonicalization.
1939 FullHashInfo GetFullHashInfo(const GURL& url, const ListIdentifier& list_id) { 1946 FullHash GetFullHash(const GURL& url) {
1940 std::string host; 1947 std::string host;
1941 std::string path; 1948 std::string path;
1942 V4ProtocolManagerUtil::CanonicalizeUrl(url, &host, &path, nullptr); 1949 V4ProtocolManagerUtil::CanonicalizeUrl(url, &host, &path, nullptr);
1943 1950
1944 return FullHashInfo(crypto::SHA256HashString(host + path), list_id, 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,
1945 base::Time::Now() + base::TimeDelta::FromMinutes(5)); 1958 base::Time::Now() + base::TimeDelta::FromMinutes(5));
1946 } 1959 }
1947 1960
1948 // Returns a FullHashInfo info for the basic host+path pattern for a given URL 1961 // Returns a FullHashInfo info for the basic host+path pattern for a given URL
1949 // after canonicalization. Also adds metadata information to the FullHashInfo 1962 // after canonicalization. Also adds metadata information to the FullHashInfo
1950 // object. 1963 // object.
1951 FullHashInfo GetFullHashInfoWithMetadata( 1964 FullHashInfo GetFullHashInfoWithMetadata(
1952 const GURL& url, 1965 const GURL& url,
1953 const ListIdentifier& list_id, 1966 const ListIdentifier& list_id,
1954 ThreatPatternType threat_pattern_type) { 1967 ThreatPatternType threat_pattern_type) {
1955 FullHashInfo fhi = GetFullHashInfo(url, list_id); 1968 FullHashInfo fhi = GetFullHashInfo(url, list_id);
1956 fhi.metadata.threat_pattern_type = threat_pattern_type; 1969 fhi.metadata.threat_pattern_type = threat_pattern_type;
1957 return fhi; 1970 return fhi;
1958 } 1971 }
1959 1972
1960 // Sets up the prefix database and the full hash cache to match one of the 1973 // Sets up the prefix database and the full hash cache to match one of the
1961 // prefixes for the given URL and metadata. 1974 // prefixes for the given URL and metadata.
1962 void MarkUrlForMalwareUnexpired( 1975 void MarkUrlForMalwareUnexpired(
1963 const GURL& bad_url, 1976 const GURL& bad_url,
1964 ThreatPatternType threat_pattern_type = ThreatPatternType::NONE) { 1977 ThreatPatternType threat_pattern_type = ThreatPatternType::NONE) {
1965 FullHashInfo full_hash_info = GetFullHashInfoWithMetadata( 1978 FullHashInfo full_hash_info = GetFullHashInfoWithMetadata(
1966 bad_url, GetUrlMalwareId(), threat_pattern_type); 1979 bad_url, GetUrlMalwareId(), threat_pattern_type);
1967 1980
1968 v4_db_factory_->MarkPrefixAsBad(GetUrlMalwareId(), 1981 v4_db_factory_->MarkPrefixAsBad(GetUrlMalwareId(),
1969 full_hash_info.full_hash); 1982 full_hash_info.full_hash);
1970 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); 1983 v4_get_hash_factory_->AddToFullHashCache(full_hash_info);
1971 } 1984 }
1972 1985
1973 // Sets up the prefix database and the full hash cache to match one of the 1986 // Sets up the prefix database and the full hash cache to match one of the
1974 // prefixes for the given URL. 1987 // prefixes for the given URL in the UwS store.
1975 void MarkUrlForUwsUnexpired(const GURL& bad_url) { 1988 void MarkUrlForUwsUnexpired(const GURL& bad_url) {
1976 FullHashInfo full_hash_info = GetFullHashInfo(bad_url, GetUrlUwsId()); 1989 FullHashInfo full_hash_info = GetFullHashInfo(bad_url, GetUrlUwsId());
1977 v4_db_factory_->MarkPrefixAsBad(GetUrlUwsId(), full_hash_info.full_hash); 1990 v4_db_factory_->MarkPrefixAsBad(GetUrlUwsId(), full_hash_info.full_hash);
1978 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); 1991 v4_get_hash_factory_->AddToFullHashCache(full_hash_info);
1979 } 1992 }
1980 1993
1994 // 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.
1981 void MarkUrlForPhishingUnexpired(const GURL& bad_url, 1996 void MarkUrlForPhishingUnexpired(const GURL& bad_url,
1982 ThreatPatternType threat_pattern_type) { 1997 ThreatPatternType threat_pattern_type) {
1983 FullHashInfo full_hash_info = GetFullHashInfoWithMetadata( 1998 FullHashInfo full_hash_info = GetFullHashInfoWithMetadata(
1984 bad_url, GetUrlSocEngId(), threat_pattern_type); 1999 bad_url, GetUrlSocEngId(), threat_pattern_type);
1985 2000
1986 v4_db_factory_->MarkPrefixAsBad(GetUrlSocEngId(), full_hash_info.full_hash); 2001 v4_db_factory_->MarkPrefixAsBad(GetUrlSocEngId(), full_hash_info.full_hash);
1987 v4_get_hash_factory_->AddToFullHashCache(full_hash_info); 2002 v4_get_hash_factory_->AddToFullHashCache(full_hash_info);
1988 } 2003 }
1989 2004
2005 // 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.
2007 void MarkUrlForMalwareBinaryUnexpired(const GURL& bad_url) {
2008 FullHashInfo full_hash_info = GetFullHashInfo(bad_url, GetUrlMalBinId());
2009 v4_db_factory_->MarkPrefixAsBad(GetUrlMalBinId(), full_hash_info.full_hash);
2010 v4_get_hash_factory_->AddToFullHashCache(full_hash_info);
2011 }
2012
2013 // 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.
2015 void MarkUrlForResourceUnexpired(const GURL& bad_url) {
2016 FullHashInfo full_hash_info =
2017 GetFullHashInfo(bad_url, GetChromeUrlClientIncidentId());
2018 v4_db_factory_->MarkPrefixAsBad(GetChromeUrlClientIncidentId(),
2019 full_hash_info.full_hash);
2020 v4_get_hash_factory_->AddToFullHashCache(full_hash_info);
2021 }
2022
1990 private: 2023 private:
1991 // Owned by the V4Database. 2024 // Owned by the V4Database.
1992 TestV4DatabaseFactory* v4_db_factory_; 2025 TestV4DatabaseFactory* v4_db_factory_;
1993 // Owned by the V4GetHashProtocolManager. 2026 // Owned by the V4GetHashProtocolManager.
1994 TestV4GetHashProtocolManagerFactory* v4_get_hash_factory_; 2027 TestV4GetHashProtocolManagerFactory* v4_get_hash_factory_;
2028 // Owned by the V4Database.
2029 TestV4StoreFactory* store_factory_;
Nathan Parker 2017/02/14 00:03:49 This isn't really owned... more of "leaked," ya? N
vakh (use Gerrit instead) 2017/02/14 00:07:19 Sort of, yes. From the perspective of this code, i
1995 2030
1996 DISALLOW_COPY_AND_ASSIGN(V4SafeBrowsingServiceTest); 2031 DISALLOW_COPY_AND_ASSIGN(V4SafeBrowsingServiceTest);
1997 }; 2032 };
1998 2033
1999 // Ensures that if an image is marked as UwS, the main page doesn't show an 2034 // Ensures that if an image is marked as UwS, the main page doesn't show an
2000 // interstitial. 2035 // interstitial.
2001 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, UnwantedImgIgnored) { 2036 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, UnwantedImgIgnored) {
2002 GURL main_url = embedded_test_server()->GetURL(kMalwarePage); 2037 GURL main_url = embedded_test_server()->GetURL(kMalwarePage);
2003 GURL img_url = embedded_test_server()->GetURL(kMalwareImg); 2038 GURL img_url = embedded_test_server()->GetURL(kMalwareImg);
2004 2039
2005 // Add the img url as coming from a site serving UwS and then load the parent 2040 // Add the img url as coming from a site serving UwS and then load the parent
2006 // page. 2041 // page.
2007 MarkUrlForUwsUnexpired(img_url); 2042 MarkUrlForUwsUnexpired(img_url);
2008 2043
2009 ui_test_utils::NavigateToURL(browser(), main_url); 2044 ui_test_utils::NavigateToURL(browser(), main_url);
2010 2045
2011 EXPECT_FALSE(ShowingInterstitialPage()); 2046 EXPECT_FALSE(ShowingInterstitialPage());
2012 EXPECT_FALSE(got_hit_report()); 2047 EXPECT_FALSE(got_hit_report());
2013 } 2048 }
2014 2049
2050 // Proceeding through an interstitial should cause it to get whitelisted for
2051 // that user.
2015 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, MalwareWithWhitelist) { 2052 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, MalwareWithWhitelist) {
2016 GURL url = embedded_test_server()->GetURL(kEmptyPage); 2053 GURL url = embedded_test_server()->GetURL(kEmptyPage);
2017 2054
2018 // After adding the url to safebrowsing database and getfullhash result, 2055 // After adding the URL to SafeBrowsing database and full hash cache, we
2019 // we should see the interstitial page. 2056 // should see the interstitial page.
2020 MarkUrlForMalwareUnexpired(url); 2057 MarkUrlForMalwareUnexpired(url);
2021 EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(url))).Times(1); 2058 EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(url))).Times(1);
2022 2059
2023 ui_test_utils::NavigateToURL(browser(), url); 2060 ui_test_utils::NavigateToURL(browser(), url);
2024 Mock::VerifyAndClearExpectations(&observer_); 2061 Mock::VerifyAndClearExpectations(&observer_);
2025 // There should be an InterstitialPage. 2062 // There should be an InterstitialPage.
2026 WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); 2063 WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents();
2027 InterstitialPage* interstitial_page = contents->GetInterstitialPage(); 2064 InterstitialPage* interstitial_page = contents->GetInterstitialPage();
2028 ASSERT_TRUE(interstitial_page); 2065 ASSERT_TRUE(interstitial_page);
2029 // Proceed through it. 2066 // Proceed through it.
2030 content::WindowedNotificationObserver load_stop_observer( 2067 content::WindowedNotificationObserver load_stop_observer(
2031 content::NOTIFICATION_LOAD_STOP, 2068 content::NOTIFICATION_LOAD_STOP,
2032 content::Source<content::NavigationController>( 2069 content::Source<content::NavigationController>(
2033 &contents->GetController())); 2070 &contents->GetController()));
2034 interstitial_page->Proceed(); 2071 interstitial_page->Proceed();
2035 load_stop_observer.Wait(); 2072 load_stop_observer.Wait();
2036 EXPECT_FALSE(ShowingInterstitialPage()); 2073 EXPECT_FALSE(ShowingInterstitialPage());
2037 2074
2038 // Navigate to kEmptyPage again -- should hit the whitelist this time. 2075 // Navigate to kEmptyPage again -- should hit the whitelist this time.
2039 EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(url))).Times(0); 2076 EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(url))).Times(0);
2040 ui_test_utils::NavigateToURL(browser(), url); 2077 ui_test_utils::NavigateToURL(browser(), url);
2041 EXPECT_FALSE(ShowingInterstitialPage()); 2078 EXPECT_FALSE(ShowingInterstitialPage());
2042 } 2079 }
2043 2080
2044 // This test confirms that prefetches don't themselves get the 2081 // This test confirms that prefetches don't themselves get the interstitial
2045 // interstitial treatment. 2082 // treatment.
2046 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, Prefetch) { 2083 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, Prefetch) {
2047 GURL url = embedded_test_server()->GetURL(kPrefetchMalwarePage); 2084 GURL url = embedded_test_server()->GetURL(kPrefetchMalwarePage);
2048 GURL malware_url = embedded_test_server()->GetURL(kMalwarePage); 2085 GURL malware_url = embedded_test_server()->GetURL(kMalwarePage);
2049 2086
2050 // Even though we have added this URI to the SafeBrowsing database and 2087 // Even though we have added this URI to the SafeBrowsing database and
2051 // full hash result, we should not see the interstitial page since the 2088 // full hash result, we should not see the interstitial page since the
2052 // only malware was a prefetch target. 2089 // only malware was a prefetch target.
2053 MarkUrlForMalwareUnexpired(malware_url); 2090 MarkUrlForMalwareUnexpired(malware_url);
2054 2091
2055 ui_test_utils::NavigateToURL(browser(), url); 2092 ui_test_utils::NavigateToURL(browser(), url);
2056 EXPECT_FALSE(ShowingInterstitialPage()); 2093 EXPECT_FALSE(ShowingInterstitialPage());
2057 EXPECT_FALSE(got_hit_report()); 2094 EXPECT_FALSE(got_hit_report());
2058 Mock::VerifyAndClear(&observer_); 2095 Mock::VerifyAndClear(&observer_);
2059 2096
2060 // However, when we navigate to the malware page, we should still get 2097 // However, when we navigate to the malware page, we should still get
2061 // the interstitial. 2098 // the interstitial.
2062 EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(malware_url))) 2099 EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(malware_url)))
2063 .Times(1); 2100 .Times(1);
2064 ui_test_utils::NavigateToURL(browser(), malware_url); 2101 ui_test_utils::NavigateToURL(browser(), malware_url);
2065 EXPECT_TRUE(ShowingInterstitialPage()); 2102 EXPECT_TRUE(ShowingInterstitialPage());
2066 EXPECT_TRUE(got_hit_report()); 2103 EXPECT_TRUE(got_hit_report());
2067 Mock::VerifyAndClear(&observer_); 2104 Mock::VerifyAndClear(&observer_);
2068 } 2105 }
2069 2106
2107 // Ensure that the referrer information is preserved in the hit report.
2070 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, MainFrameHitWithReferrer) { 2108 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, MainFrameHitWithReferrer) {
2071 GURL first_url = embedded_test_server()->GetURL(kEmptyPage); 2109 GURL first_url = embedded_test_server()->GetURL(kEmptyPage);
2072 GURL bad_url = embedded_test_server()->GetURL(kMalwarePage); 2110 GURL bad_url = embedded_test_server()->GetURL(kMalwarePage);
2073 2111
2074 MarkUrlForMalwareUnexpired(bad_url); 2112 MarkUrlForMalwareUnexpired(bad_url);
2075 2113
2076 // Navigate to first, safe page. 2114 // Navigate to first, safe page.
2077 ui_test_utils::NavigateToURL(browser(), first_url); 2115 ui_test_utils::NavigateToURL(browser(), first_url);
2078 EXPECT_FALSE(ShowingInterstitialPage()); 2116 EXPECT_FALSE(ShowingInterstitialPage());
2079 EXPECT_FALSE(got_hit_report()); 2117 EXPECT_FALSE(got_hit_report());
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
2355 2393
2356 // Proceed through it. 2394 // Proceed through it.
2357 InterstitialPage* interstitial_page = new_tab_contents->GetInterstitialPage(); 2395 InterstitialPage* interstitial_page = new_tab_contents->GetInterstitialPage();
2358 ASSERT_TRUE(interstitial_page); 2396 ASSERT_TRUE(interstitial_page);
2359 interstitial_page->Proceed(); 2397 interstitial_page->Proceed();
2360 2398
2361 content::WaitForInterstitialDetach(new_tab_contents); 2399 content::WaitForInterstitialDetach(new_tab_contents);
2362 EXPECT_FALSE(ShowingInterstitialPage()); 2400 EXPECT_FALSE(ShowingInterstitialPage());
2363 } 2401 }
2364 2402
2403 ///////////////////////////////////////////////////////////////////////////////
2404 // START: These tests use SafeBrowsingService::Client to directly interact with
2405 // SafeBrowsingService.
2406 ///////////////////////////////////////////////////////////////////////////////
2407 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, CheckDownloadUrl) {
2408 GURL badbin_url = embedded_test_server()->GetURL(kMalwareFile);
Nathan Parker 2017/02/14 00:03:49 What in these tests points it at Pver4 impl?
vakh (use Gerrit instead) 2017/02/14 00:07:19 void SetUp() override { sb_factory_ = base::Ma
2409 std::vector<GURL> badbin_urls(1, badbin_url);
2410
2411 scoped_refptr<TestSBClient> client(new TestSBClient);
2412 client->CheckDownloadUrl(badbin_urls);
2413
2414 // Since badbin_url is not in database, it is considered to be safe.
2415 EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType());
2416
2417 MarkUrlForMalwareBinaryUnexpired(badbin_url);
2418
2419 client->CheckDownloadUrl(badbin_urls);
2420
2421 // Now, the badbin_url is not safe since it is added to download database.
2422 EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_URL, client->GetThreatType());
2423 }
2424
2425 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, CheckUnwantedSoftwareUrl) {
2426 const GURL bad_url = embedded_test_server()->GetURL(kMalwareFile);
2427 {
2428 scoped_refptr<TestSBClient> client(new TestSBClient);
2429
2430 // Since bad_url is not in database, it is considered to be
2431 // safe.
2432 client->CheckBrowseUrl(bad_url);
2433 EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType());
2434
2435 MarkUrlForUwsUnexpired(bad_url);
2436
2437 // Now, the bad_url is not safe since it is added to download
2438 // database.
2439 client->CheckBrowseUrl(bad_url);
2440 EXPECT_EQ(SB_THREAT_TYPE_URL_UNWANTED, client->GetThreatType());
2441 }
2442
2443 // The unwantedness should survive across multiple clients.
2444 {
2445 scoped_refptr<TestSBClient> client(new TestSBClient);
2446 client->CheckBrowseUrl(bad_url);
2447 EXPECT_EQ(SB_THREAT_TYPE_URL_UNWANTED, client->GetThreatType());
2448 }
2449
2450 // An unwanted URL also marked as malware should be flagged as malware.
2451 {
2452 scoped_refptr<TestSBClient> client(new TestSBClient);
2453
2454 MarkUrlForMalwareUnexpired(bad_url);
2455
2456 client->CheckBrowseUrl(bad_url);
2457 EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, client->GetThreatType());
2458 }
2459 }
2460
2461 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, CheckBrowseUrl) {
2462 const GURL bad_url = embedded_test_server()->GetURL(kMalwareFile);
2463 {
2464 scoped_refptr<TestSBClient> client(new TestSBClient);
2465
2466 // Since bad_url is not in database, it is considered to be
2467 // safe.
2468 client->CheckBrowseUrl(bad_url);
2469 EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType());
2470
2471 MarkUrlForMalwareUnexpired(bad_url);
2472
2473 // Now, the bad_url is not safe since it is added to download
2474 // database.
2475 client->CheckBrowseUrl(bad_url);
2476 EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, client->GetThreatType());
2477 }
2478
2479 // The unwantedness should survive across multiple clients.
2480 {
2481 scoped_refptr<TestSBClient> client(new TestSBClient);
2482 client->CheckBrowseUrl(bad_url);
2483 EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, client->GetThreatType());
2484 }
2485
2486 // Adding the unwanted state to an existing malware URL should have no impact
2487 // (i.e. a malware hit should still prevail).
2488 {
2489 scoped_refptr<TestSBClient> client(new TestSBClient);
2490
2491 MarkUrlForUwsUnexpired(bad_url);
2492
2493 client->CheckBrowseUrl(bad_url);
2494 EXPECT_EQ(SB_THREAT_TYPE_URL_MALWARE, client->GetThreatType());
2495 }
2496 }
2497
2498 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, CheckDownloadUrlRedirects) {
2499 GURL original_url = embedded_test_server()->GetURL(kEmptyPage);
2500 GURL badbin_url = embedded_test_server()->GetURL(kMalwareFile);
2501 GURL final_url = embedded_test_server()->GetURL(kEmptyPage);
2502 std::vector<GURL> badbin_urls;
2503 badbin_urls.push_back(original_url);
2504 badbin_urls.push_back(badbin_url);
2505 badbin_urls.push_back(final_url);
2506
2507 scoped_refptr<TestSBClient> client(new TestSBClient);
2508 client->CheckDownloadUrl(badbin_urls);
2509
2510 // Since badbin_url is not in database, it is considered to be safe.
2511 EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType());
2512
2513 MarkUrlForMalwareBinaryUnexpired(badbin_url);
2514
2515 client->CheckDownloadUrl(badbin_urls);
2516
2517 // Now, the badbin_url is not safe since it is added to download database.
2518 EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_URL, client->GetThreatType());
2519 }
2520
2521 #if defined(GOOGLE_CHROME_BUILD)
2522 // This test is only enabled when GOOGLE_CHROME_BUILD is true because the store
2523 // that this test uses is only populated on GOOGLE_CHROME_BUILD builds.
2524 IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, CheckResourceUrl) {
2525 GURL blacklist_url = embedded_test_server()->GetURL(kBlacklistResource);
2526 GURL malware_url = embedded_test_server()->GetURL(kMaliciousResource);
2527 std::string blacklist_url_hash, malware_url_hash;
2528
2529 scoped_refptr<TestSBClient> client(new TestSBClient);
2530 {
2531 MarkUrlForResourceUnexpired(blacklist_url);
2532 blacklist_url_hash = GetFullHash(blacklist_url);
2533
2534 client->CheckResourceUrl(blacklist_url);
2535 EXPECT_EQ(SB_THREAT_TYPE_BLACKLISTED_RESOURCE, client->GetThreatType());
2536 EXPECT_EQ(blacklist_url_hash, client->GetThreatHash());
2537 }
2538 {
2539 MarkUrlForMalwareUnexpired(malware_url);
2540 MarkUrlForResourceUnexpired(malware_url);
2541 malware_url_hash = GetFullHash(malware_url);
2542
2543 // Since we're checking a resource url, we should receive result that it's
2544 // a blacklisted resource, not a malware.
2545 client = new TestSBClient;
2546 client->CheckResourceUrl(malware_url);
2547 EXPECT_EQ(SB_THREAT_TYPE_BLACKLISTED_RESOURCE, client->GetThreatType());
2548 EXPECT_EQ(malware_url_hash, client->GetThreatHash());
2549 }
2550
2551 client->CheckResourceUrl(embedded_test_server()->GetURL(kEmptyPage));
2552 EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType());
2553 }
2554 #endif
2555 ///////////////////////////////////////////////////////////////////////////////
2556 // END: These tests use SafeBrowsingService::Client to directly interact with
2557 // SafeBrowsingService.
2558 ///////////////////////////////////////////////////////////////////////////////
2559
2365 // TODO(vakh): Add test for UnwantedMainFrame. 2560 // TODO(vakh): Add test for UnwantedMainFrame.
2366 2561
2367 class V4SafeBrowsingServiceMetadataTest 2562 class V4SafeBrowsingServiceMetadataTest
2368 : public V4SafeBrowsingServiceTest, 2563 : public V4SafeBrowsingServiceTest,
2369 public ::testing::WithParamInterface<ThreatPatternType> { 2564 public ::testing::WithParamInterface<ThreatPatternType> {
2370 public: 2565 public:
2371 V4SafeBrowsingServiceMetadataTest() {} 2566 V4SafeBrowsingServiceMetadataTest() {}
2372 2567
2373 private: 2568 private:
2374 DISALLOW_COPY_AND_ASSIGN(V4SafeBrowsingServiceMetadataTest); 2569 DISALLOW_COPY_AND_ASSIGN(V4SafeBrowsingServiceMetadataTest);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
2462 } 2657 }
2463 2658
2464 INSTANTIATE_TEST_CASE_P( 2659 INSTANTIATE_TEST_CASE_P(
2465 MaybeSetMetadata, 2660 MaybeSetMetadata,
2466 V4SafeBrowsingServiceMetadataTest, 2661 V4SafeBrowsingServiceMetadataTest,
2467 testing::Values(ThreatPatternType::NONE, 2662 testing::Values(ThreatPatternType::NONE,
2468 ThreatPatternType::MALWARE_LANDING, 2663 ThreatPatternType::MALWARE_LANDING,
2469 ThreatPatternType::MALWARE_DISTRIBUTION)); 2664 ThreatPatternType::MALWARE_DISTRIBUTION));
2470 2665
2471 } // namespace safe_browsing 2666 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « no previous file | components/safe_browsing_db/v4_database.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698