| Index: chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
|
| diff --git a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
|
| index 9616091b23a47ef0d03af674ffc4d61c01dfe10d..40f5ef41cbf6151770b33ab464209b1c20669497 100644
|
| --- a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
|
| +++ b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
|
| @@ -54,9 +54,6 @@
|
| #include "components/safe_browsing_db/metadata.pb.h"
|
| #include "components/safe_browsing_db/test_database_manager.h"
|
| #include "components/safe_browsing_db/util.h"
|
| -#include "components/safe_browsing_db/v4_database.h"
|
| -#include "components/safe_browsing_db/v4_feature_list.h"
|
| -#include "components/safe_browsing_db/v4_get_hash_protocol_manager.h"
|
| #include "components/safe_browsing_db/v4_protocol_manager_util.h"
|
| #include "components/subresource_filter/content/browser/content_subresource_filter_driver.h"
|
| #include "components/subresource_filter/content/browser/content_subresource_filter_driver_factory.h"
|
| @@ -67,7 +64,6 @@
|
| #include "content/public/browser/render_frame_host.h"
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/test/browser_test_utils.h"
|
| -#include "crypto/sha2.h"
|
| #include "net/cookies/cookie_store.h"
|
| #include "net/cookies/cookie_util.h"
|
| #include "net/test/embedded_test_server/embedded_test_server.h"
|
| @@ -458,7 +454,7 @@
|
| TestProtocolManager* GetProtocolManager() { return pm_; }
|
|
|
| private:
|
| - // Owned by the SafeBrowsingService.
|
| + // Owned by the SafebrowsingService.
|
| TestProtocolManager* pm_;
|
| };
|
|
|
| @@ -693,7 +689,7 @@
|
| ASSERT_TRUE(enabled_helper->Run());
|
| }
|
|
|
| - protected:
|
| + private:
|
| std::unique_ptr<TestSafeBrowsingServiceFactory> sb_factory_;
|
| TestSafeBrowsingDatabaseFactory db_factory_;
|
| TestSBProtocolManagerFactory pm_factory_;
|
| @@ -701,7 +697,6 @@
|
| // Owned by ContentSubresourceFilterFactory.
|
| MockSubresourceFilterDriver* driver_;
|
|
|
| - private:
|
| DISALLOW_COPY_AND_ASSIGN(SafeBrowsingServiceTest);
|
| };
|
|
|
| @@ -749,8 +744,8 @@
|
| // Add the iframe url as malware and then load the parent page.
|
| SBFullHashResult malware_full_hash;
|
| GenUrlFullHashResultWithMetadata(iframe_url, &malware_full_hash);
|
| - EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(iframe_url)))
|
| - .Times(1);
|
| + EXPECT_CALL(observer_,
|
| + OnSafeBrowsingHit(IsUnsafeResourceFor(iframe_url))).Times(1);
|
| SetupResponseForUrl(iframe_url, malware_full_hash);
|
| ui_test_utils::NavigateToURL(browser(), main_url);
|
| // All types should show the interstitial.
|
| @@ -1695,7 +1690,7 @@
|
| base::Bind(&SafeBrowsingDatabaseManagerCookieTest::HandleRequest));
|
| ASSERT_TRUE(embedded_test_server()->Start());
|
|
|
| - sb_factory_ = base::MakeUnique<TestSafeBrowsingServiceFactory>();
|
| + sb_factory_.reset(new TestSafeBrowsingServiceFactory());
|
| SetProtocolConfigURLPrefix(
|
| embedded_test_server()->GetURL("/testpath").spec(), sb_factory_.get());
|
| SafeBrowsingService::RegisterFactory(sb_factory_.get());
|
| @@ -1839,300 +1834,4 @@
|
| observer.Wait();
|
| }
|
|
|
| -class TestV4Store : public V4Store {
|
| - public:
|
| - TestV4Store(const scoped_refptr<base::SequencedTaskRunner>& task_runner,
|
| - const base::FilePath& store_path)
|
| - : V4Store(task_runner, store_path, 0) {}
|
| -
|
| - void MarkPrefixAsBad(HashPrefix prefix) {
|
| - hash_prefix_map_[prefix.size()] = prefix;
|
| - }
|
| -};
|
| -
|
| -class TestV4StoreFactory : public V4StoreFactory {
|
| - public:
|
| - V4Store* CreateV4Store(
|
| - const scoped_refptr<base::SequencedTaskRunner>& task_runner,
|
| - const base::FilePath& store_path) override {
|
| - V4Store* new_store = new TestV4Store(task_runner, store_path);
|
| - new_store->Initialize();
|
| - return new_store;
|
| - }
|
| -};
|
| -
|
| -class TestV4Database : public V4Database {
|
| - public:
|
| - TestV4Database(const scoped_refptr<base::SequencedTaskRunner>& db_task_runner,
|
| - std::unique_ptr<StoreMap> store_map)
|
| - : V4Database(db_task_runner, std::move(store_map)) {}
|
| -
|
| - void MarkPrefixAsBad(ListIdentifier list_id, HashPrefix prefix) {
|
| - V4Store* base_store = store_map_->at(list_id).get();
|
| - TestV4Store* test_store = static_cast<TestV4Store*>(base_store);
|
| - test_store->MarkPrefixAsBad(prefix);
|
| - }
|
| -};
|
| -
|
| -class TestV4DatabaseFactory : public V4DatabaseFactory {
|
| - public:
|
| - TestV4DatabaseFactory() : v4_db_(nullptr) {}
|
| -
|
| - std::unique_ptr<V4Database> Create(
|
| - const scoped_refptr<base::SequencedTaskRunner>& db_task_runner,
|
| - std::unique_ptr<StoreMap> store_map) override {
|
| - v4_db_ = new TestV4Database(db_task_runner, std::move(store_map));
|
| - return base::WrapUnique(v4_db_);
|
| - }
|
| -
|
| - void MarkPrefixAsBad(ListIdentifier list_id, HashPrefix prefix) {
|
| - v4_db_->MarkPrefixAsBad(list_id, prefix);
|
| - }
|
| -
|
| - private:
|
| - // Owned by V4LocalDatabaseManager. Each test in the V4SafeBrowsingServiceTest
|
| - // class instantiates a new SafebrowsingService instance, which instantiates a
|
| - // new V4LocalDatabaseManager, which instantiates a new V4Database using this
|
| - // method so use-after-free isn't possible.
|
| - TestV4Database* v4_db_;
|
| -};
|
| -
|
| -class TestV4GetHashProtocolManager : public V4GetHashProtocolManager {
|
| - public:
|
| - TestV4GetHashProtocolManager(
|
| - net::URLRequestContextGetter* request_context_getter,
|
| - const StoresToCheck& stores_to_check,
|
| - const V4ProtocolConfig& config)
|
| - : V4GetHashProtocolManager(request_context_getter,
|
| - stores_to_check,
|
| - config) {}
|
| -
|
| - void AddToFullHashCache(FullHashInfo fhi) {
|
| - full_hash_cache_[fhi.full_hash].full_hash_infos.push_back(fhi);
|
| - }
|
| -};
|
| -
|
| -class TestV4GetHashProtocolManagerFactory
|
| - : public V4GetHashProtocolManagerFactory {
|
| - public:
|
| - std::unique_ptr<V4GetHashProtocolManager> CreateProtocolManager(
|
| - net::URLRequestContextGetter* request_context_getter,
|
| - const StoresToCheck& stores_to_check,
|
| - const V4ProtocolConfig& config) override {
|
| - pm_ = new TestV4GetHashProtocolManager(request_context_getter,
|
| - stores_to_check, config);
|
| - return base::WrapUnique(pm_);
|
| - }
|
| -
|
| - void AddToFullHashCache(FullHashInfo fhi) { pm_->AddToFullHashCache(fhi); }
|
| -
|
| - private:
|
| - // Owned by the SafeBrowsingService.
|
| - TestV4GetHashProtocolManager* pm_;
|
| -};
|
| -
|
| -// Tests the safe browsing blocking page in a browser.
|
| -class V4SafeBrowsingServiceTest : public SafeBrowsingServiceTest {
|
| - public:
|
| - V4SafeBrowsingServiceTest() : SafeBrowsingServiceTest() {}
|
| -
|
| - void SetUp() override {
|
| - sb_factory_ = base::MakeUnique<TestSafeBrowsingServiceFactory>(
|
| - V4FeatureList::V4UsageStatus::V4_ONLY);
|
| - sb_factory_->SetTestUIManager(new FakeSafeBrowsingUIManager());
|
| - SafeBrowsingService::RegisterFactory(sb_factory_.get());
|
| -
|
| - v4_db_factory_ = new TestV4DatabaseFactory();
|
| - V4Database::RegisterFactory(base::WrapUnique(v4_db_factory_));
|
| -
|
| - v4_get_hash_factory_ = new TestV4GetHashProtocolManagerFactory();
|
| - V4GetHashProtocolManager::RegisterFactory(
|
| - base::WrapUnique(v4_get_hash_factory_));
|
| - InProcessBrowserTest::SetUp();
|
| - }
|
| -
|
| - void TearDown() override {
|
| - InProcessBrowserTest::TearDown();
|
| -
|
| - // Unregister test factories after InProcessBrowserTest::TearDown
|
| - // (which destructs SafeBrowsingService).
|
| - V4GetHashProtocolManager::RegisterFactory(nullptr);
|
| - V4Database::RegisterFactory(nullptr);
|
| - SafeBrowsingService::RegisterFactory(nullptr);
|
| - }
|
| -
|
| - // Returns a FullHashInfo info for the basic host+path pattern for a given URL
|
| - // after canonicalization.
|
| - FullHashInfo GetFullHashInfo(const GURL& url, const ListIdentifier& list_id) {
|
| - std::string host;
|
| - std::string path;
|
| - V4ProtocolManagerUtil::CanonicalizeUrl(url, &host, &path, nullptr);
|
| -
|
| - return FullHashInfo(crypto::SHA256HashString(host + path), list_id,
|
| - base::Time::Now() + base::TimeDelta::FromMinutes(5));
|
| - }
|
| -
|
| - // Returns a FullHashInfo info for the basic host+path pattern for a given URL
|
| - // after canonicalization. Also adds metadata information to the FullHashInfo
|
| - // object.
|
| - FullHashInfo GetFullHashInfoWithMetadata(
|
| - const GURL& url,
|
| - const ListIdentifier& list_id,
|
| - ThreatPatternType threat_pattern_type) {
|
| - FullHashInfo fhi = GetFullHashInfo(url, list_id);
|
| - fhi.metadata.threat_pattern_type = threat_pattern_type;
|
| - return fhi;
|
| - }
|
| -
|
| - // Sets up the prefix database and the full hash cache to match one of the
|
| - // prefixes for the given URL and metadata.
|
| - void MarkUrlForMalwareUnexpired(const GURL& bad_url,
|
| - ThreatPatternType threat_pattern_type) {
|
| - FullHashInfo full_hash_info = GetFullHashInfoWithMetadata(
|
| - bad_url, GetUrlMalwareId(), threat_pattern_type);
|
| -
|
| - v4_db_factory_->MarkPrefixAsBad(GetUrlMalwareId(),
|
| - full_hash_info.full_hash);
|
| - v4_get_hash_factory_->AddToFullHashCache(full_hash_info);
|
| - }
|
| -
|
| - // Sets up the prefix database and the full hash cache to match one of the
|
| - // prefixes for the given URL.
|
| - void MarkUrlForUwsUnexpired(const GURL& bad_url) {
|
| - FullHashInfo full_hash_info = GetFullHashInfo(bad_url, GetUrlUwsId());
|
| - v4_db_factory_->MarkPrefixAsBad(GetUrlUwsId(), full_hash_info.full_hash);
|
| - v4_get_hash_factory_->AddToFullHashCache(full_hash_info);
|
| - }
|
| -
|
| - private:
|
| - // Owned by the V4Database.
|
| - TestV4DatabaseFactory* v4_db_factory_;
|
| - // Owned by the V4GetHashProtocolManager.
|
| - TestV4GetHashProtocolManagerFactory* v4_get_hash_factory_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(V4SafeBrowsingServiceTest);
|
| -};
|
| -
|
| -// Ensures that if an image is marked as UwS, the main page doesn't show an
|
| -// interstitial.
|
| -IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, UnwantedImgIgnored) {
|
| - GURL main_url = embedded_test_server()->GetURL(kMalwarePage);
|
| - GURL img_url = embedded_test_server()->GetURL(kMalwareImg);
|
| -
|
| - // Add the img url as coming from a site serving UwS and then load the parent
|
| - // page.
|
| - MarkUrlForUwsUnexpired(img_url);
|
| -
|
| - ui_test_utils::NavigateToURL(browser(), main_url);
|
| -
|
| - EXPECT_FALSE(ShowingInterstitialPage());
|
| - EXPECT_FALSE(got_hit_report());
|
| -}
|
| -
|
| -// TODO(vakh): Add test for UnwantedMainFrame.
|
| -
|
| -class V4SafeBrowsingServiceMetadataTest
|
| - : public V4SafeBrowsingServiceTest,
|
| - public ::testing::WithParamInterface<ThreatPatternType> {
|
| - public:
|
| - V4SafeBrowsingServiceMetadataTest() {}
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(V4SafeBrowsingServiceMetadataTest);
|
| -};
|
| -
|
| -// Irrespective of the threat_type classification, if the main frame URL is
|
| -// marked as Malware, an interstitial should be shown.
|
| -IN_PROC_BROWSER_TEST_P(V4SafeBrowsingServiceMetadataTest, MalwareMainFrame) {
|
| - GURL url = embedded_test_server()->GetURL(kEmptyPage);
|
| - MarkUrlForMalwareUnexpired(url, GetParam());
|
| -
|
| - EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(url))).Times(1);
|
| -
|
| - ui_test_utils::NavigateToURL(browser(), url);
|
| - // All types should show the interstitial.
|
| - EXPECT_TRUE(ShowingInterstitialPage());
|
| -
|
| - EXPECT_TRUE(got_hit_report());
|
| - EXPECT_EQ(url, hit_report().malicious_url);
|
| - EXPECT_EQ(url, hit_report().page_url);
|
| - EXPECT_EQ(GURL(), hit_report().referrer_url);
|
| - EXPECT_FALSE(hit_report().is_subresource);
|
| -}
|
| -
|
| -// Irrespective of the threat_type classification, if the iframe URL is marked
|
| -// as Malware, an interstitial should be shown.
|
| -IN_PROC_BROWSER_TEST_P(V4SafeBrowsingServiceMetadataTest, MalwareIFrame) {
|
| - GURL main_url = embedded_test_server()->GetURL(kMalwarePage);
|
| - GURL iframe_url = embedded_test_server()->GetURL(kMalwareIFrame);
|
| -
|
| - // Add the iframe url as malware and then load the parent page.
|
| - MarkUrlForMalwareUnexpired(iframe_url, GetParam());
|
| -
|
| - EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(iframe_url)))
|
| - .Times(1);
|
| -
|
| - ui_test_utils::NavigateToURL(browser(), main_url);
|
| - // All types should show the interstitial.
|
| - EXPECT_TRUE(ShowingInterstitialPage());
|
| -
|
| - EXPECT_TRUE(got_hit_report());
|
| - EXPECT_EQ(iframe_url, hit_report().malicious_url);
|
| - EXPECT_EQ(main_url, hit_report().page_url);
|
| - EXPECT_EQ(GURL(), hit_report().referrer_url);
|
| - EXPECT_TRUE(hit_report().is_subresource);
|
| -}
|
| -
|
| -// Depending on the threat_type classification, if an embedded resource is
|
| -// marked as Malware, an interstitial may be shown.
|
| -IN_PROC_BROWSER_TEST_P(V4SafeBrowsingServiceMetadataTest, MalwareImg) {
|
| - GURL main_url = embedded_test_server()->GetURL(kMalwarePage);
|
| - GURL img_url = embedded_test_server()->GetURL(kMalwareImg);
|
| -
|
| - // Add the img url as malware and then load the parent page.
|
| - MarkUrlForMalwareUnexpired(img_url, GetParam());
|
| -
|
| - switch (GetParam()) {
|
| - case ThreatPatternType::NONE: // Falls through.
|
| - case ThreatPatternType::MALWARE_DISTRIBUTION:
|
| - EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(img_url)))
|
| - .Times(1);
|
| - break;
|
| - case ThreatPatternType::MALWARE_LANDING:
|
| - // No interstitial shown, so no notifications expected.
|
| - break;
|
| - default:
|
| - break;
|
| - }
|
| -
|
| - ui_test_utils::NavigateToURL(browser(), main_url);
|
| -
|
| - // Subresource which is tagged as a landing page should not show an
|
| - // interstitial, the other types should.
|
| - switch (GetParam()) {
|
| - case ThreatPatternType::NONE: // Falls through.
|
| - case ThreatPatternType::MALWARE_DISTRIBUTION:
|
| - EXPECT_TRUE(ShowingInterstitialPage());
|
| - EXPECT_TRUE(got_hit_report());
|
| - EXPECT_EQ(img_url, hit_report().malicious_url);
|
| - EXPECT_EQ(main_url, hit_report().page_url);
|
| - EXPECT_EQ(GURL(), hit_report().referrer_url);
|
| - EXPECT_TRUE(hit_report().is_subresource);
|
| - break;
|
| - case ThreatPatternType::MALWARE_LANDING:
|
| - EXPECT_FALSE(ShowingInterstitialPage());
|
| - EXPECT_FALSE(got_hit_report());
|
| - break;
|
| - default:
|
| - break;
|
| - }
|
| -}
|
| -
|
| -INSTANTIATE_TEST_CASE_P(
|
| - MaybeSetMetadata,
|
| - V4SafeBrowsingServiceMetadataTest,
|
| - testing::Values(ThreatPatternType::NONE,
|
| - ThreatPatternType::MALWARE_LANDING,
|
| - ThreatPatternType::MALWARE_DISTRIBUTION));
|
| -
|
| } // namespace safe_browsing
|
|
|