Index: chrome/browser/android/preferences/important_sites_util_unittest.cc |
diff --git a/chrome/browser/android/preferences/important_sites_util_unittest.cc b/chrome/browser/android/preferences/important_sites_util_unittest.cc |
deleted file mode 100644 |
index 09120d041c8b41b202eee3ae5635e4caf3c6cd02..0000000000000000000000000000000000000000 |
--- a/chrome/browser/android/preferences/important_sites_util_unittest.cc |
+++ /dev/null |
@@ -1,383 +0,0 @@ |
-// Copyright 2016 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 "chrome/browser/android/preferences/important_sites_util.h" |
- |
-#include <memory> |
-#include <utility> |
- |
-#include "base/files/scoped_temp_dir.h" |
-#include "base/macros.h" |
-#include "base/metrics/histogram_macros.h" |
-#include "base/metrics/sample_vector.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/test/histogram_tester.h" |
-#include "chrome/browser/bookmarks/bookmark_model_factory.h" |
-#include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
-#include "chrome/browser/engagement/site_engagement_score.h" |
-#include "chrome/browser/engagement/site_engagement_service.h" |
-#include "chrome/browser/history/history_service_factory.h" |
-#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
-#include "chrome/test/base/testing_profile.h" |
-#include "components/bookmarks/browser/bookmark_model.h" |
-#include "components/bookmarks/test/bookmark_test_helpers.h" |
-#include "components/content_settings/core/browser/host_content_settings_map.h" |
-#include "components/content_settings/core/common/content_settings.h" |
-#include "components/content_settings/core/common/content_settings_pattern.h" |
-#include "components/history/core/browser/history_database_params.h" |
-#include "components/history/core/browser/history_service.h" |
-#include "components/history/core/test/test_history_database.h" |
-#include "components/keyed_service/core/keyed_service.h" |
-#include "content/public/browser/web_contents.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace { |
-using BookmarkModel = bookmarks::BookmarkModel; |
-using ImportantDomainInfo = ImportantSitesUtil::ImportantDomainInfo; |
- |
-const size_t kNumImportantSites = 5; |
-base::FilePath g_temp_history_dir; |
- |
-std::unique_ptr<KeyedService> BuildTestHistoryService( |
- content::BrowserContext* context) { |
- std::unique_ptr<history::HistoryService> service( |
- new history::HistoryService()); |
- service->Init(history::TestHistoryDatabaseParamsForPath(g_temp_history_dir)); |
- return std::move(service); |
-} |
- |
-// We only need to reproduce the values that we are testing. The values here |
-// need to match the values in important_sites_util. |
-enum ImportantReasonForTesting { |
- ENGAGEMENT = 0, |
- BOOKMARKS = 2, |
- NOTIFICATIONS = 4 |
-}; |
- |
-// We only need to reproduce the values that we are testing. The values here |
-// need to match the values in important_sites_util. |
-enum CrossedReasonForTesting { |
- CROSSED_NOTIFICATIONS_AND_ENGAGEMENT = 3, |
- CROSSED_REASON_UNKNOWN = 7, |
-}; |
- |
-} // namespace |
- |
-class ImportantSitesUtilTest : public ChromeRenderViewHostTestHarness { |
- public: |
- void SetUp() override { |
- ChromeRenderViewHostTestHarness::SetUp(); |
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
- g_temp_history_dir = temp_dir_.GetPath(); |
- HistoryServiceFactory::GetInstance()->SetTestingFactory( |
- profile(), &BuildTestHistoryService); |
- SiteEngagementScore::SetParamValuesForTesting(); |
- } |
- |
- void AddContentSetting(ContentSettingsType type, |
- ContentSetting setting, |
- const GURL& origin) { |
- HostContentSettingsMapFactory::GetForProfile(profile()) |
- ->SetContentSettingCustomScope( |
- ContentSettingsPattern::FromURLNoWildcard(origin), |
- ContentSettingsPattern::Wildcard(), type, |
- content_settings::ResourceIdentifier(), setting); |
- EXPECT_EQ(setting, |
- HostContentSettingsMapFactory::GetForProfile(profile()) |
- ->GetContentSetting(origin, GURL(), type, |
- content_settings::ResourceIdentifier())); |
- } |
- |
- void AddBookmark(const GURL& origin) { |
- if (!model_) { |
- profile()->CreateBookmarkModel(true); |
- model_ = BookmarkModelFactory::GetForBrowserContext(profile()); |
- bookmarks::test::WaitForBookmarkModelToLoad(model_); |
- } |
- |
- model_->AddURL(model_->bookmark_bar_node(), 0, |
- base::ASCIIToUTF16(origin.spec()), origin); |
- } |
- |
- void ExpectImportantResultsEq( |
- const std::vector<std::string>& domains, |
- const std::vector<GURL>& expected_sorted_origins, |
- const std::vector<ImportantDomainInfo>& important_sites) { |
- ASSERT_EQ(domains.size(), important_sites.size()); |
- ASSERT_EQ(expected_sorted_origins.size(), important_sites.size()); |
- for (size_t i = 0; i < important_sites.size(); i++) { |
- EXPECT_EQ(domains[i], important_sites[i].registerable_domain); |
- EXPECT_EQ(expected_sorted_origins[i], important_sites[i].example_origin); |
- } |
- } |
- |
- private: |
- base::ScopedTempDir temp_dir_; |
- BookmarkModel* model_ = nullptr; |
-}; |
- |
-TEST_F(ImportantSitesUtilTest, TestNoImportantSites) { |
- EXPECT_TRUE(ImportantSitesUtil::GetImportantRegisterableDomains( |
- profile(), kNumImportantSites) |
- .empty()); |
-} |
- |
-TEST_F(ImportantSitesUtilTest, SourceOrdering) { |
- SiteEngagementService* service = SiteEngagementService::Get(profile()); |
- ASSERT_TRUE(service); |
- |
- GURL url1("http://www.google.com/"); |
- GURL url2("https://www.google.com/"); |
- GURL url3("https://drive.google.com/"); |
- GURL url4("https://www.chrome.com/"); |
- GURL url5("https://www.example.com/"); |
- GURL url6("https://youtube.com/"); |
- GURL url7("https://foo.bar/"); |
- |
- service->ResetScoreForURL(url1, 5); |
- service->ResetScoreForURL(url2, 2); // Below medium engagement (5). |
- service->ResetScoreForURL(url3, 7); |
- service->ResetScoreForURL(url4, 8); |
- service->ResetScoreForURL(url5, 9); |
- service->ResetScoreForURL(url6, 1); // Below the medium engagement (5). |
- service->ResetScoreForURL(url7, 11); |
- |
- // Here we should have: |
- // 1: removed domains below minimum engagement, |
- // 2: combined the google.com entries, and |
- // 3: sorted by the score. |
- std::vector<ImportantDomainInfo> important_sites = |
- ImportantSitesUtil::GetImportantRegisterableDomains(profile(), |
- kNumImportantSites); |
- std::vector<std::string> expected_sorted_domains = { |
- "foo.bar", "example.com", "chrome.com", "google.com"}; |
- std::vector<GURL> expected_sorted_origins = {url7, url5, url4, url3}; |
- ExpectImportantResultsEq(expected_sorted_domains, expected_sorted_origins, |
- important_sites); |
- |
- // Test that notifications get moved to the front. |
- AddContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW, |
- url6); |
- // BLOCK'ed sites don't count. We want to make sure we only bump sites that |
- // were granted the permsion. |
- AddContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_BLOCK, |
- url1); |
- |
- // Same as above, but the site with notifications should be at the front. |
- important_sites = ImportantSitesUtil::GetImportantRegisterableDomains( |
- profile(), kNumImportantSites); |
- expected_sorted_domains = {"youtube.com", "foo.bar", "example.com", |
- "chrome.com", "google.com"}; |
- expected_sorted_origins = {url6, url7, url5, url4, url3}; |
- ExpectImportantResultsEq(expected_sorted_domains, expected_sorted_origins, |
- important_sites); |
- |
- // Test that bookmarks move above engagements and below notifications. |
- AddBookmark(url1); |
- important_sites = ImportantSitesUtil::GetImportantRegisterableDomains( |
- profile(), kNumImportantSites); |
- expected_sorted_domains = {"youtube.com", "google.com", "foo.bar", |
- "example.com", "chrome.com"}; |
- expected_sorted_origins = {url6, url3, url7, url5, url4}; |
- ExpectImportantResultsEq(expected_sorted_domains, expected_sorted_origins, |
- important_sites); |
-} |
- |
-TEST_F(ImportantSitesUtilTest, TooManyBookmarks) { |
- SiteEngagementService* service = SiteEngagementService::Get(profile()); |
- ASSERT_TRUE(service); |
- |
- GURL url1("http://www.google.com/"); |
- GURL url2("https://www.google.com/"); |
- GURL url3("https://drive.google.com/"); |
- GURL url4("https://www.chrome.com/"); |
- GURL url5("https://www.example.com/"); |
- GURL url6("https://youtube.com/"); |
- GURL url7("https://foo.bar/"); |
- |
- // Add some as bookmarks. |
- AddBookmark(url1); |
- AddBookmark(url2); |
- AddBookmark(url3); |
- AddBookmark(url4); |
- AddBookmark(url5); |
- |
- // We have just below our limit, so all sites are important (the first three |
- // origins collapse, so we end up with 3). |
- std::vector<ImportantDomainInfo> important_sites = |
- ImportantSitesUtil::GetImportantRegisterableDomains(profile(), |
- kNumImportantSites); |
- EXPECT_EQ(3u, important_sites.size()); |
- |
- // Add the rest, which should put us over the limit. |
- AddBookmark(url6); |
- AddBookmark(url7); |
- // Too many bookmarks! Nothing shows up now. |
- important_sites = ImportantSitesUtil::GetImportantRegisterableDomains( |
- profile(), kNumImportantSites); |
- EXPECT_EQ(0u, important_sites.size()); |
- |
- // If we add some site engagement, these should show up in order (even though |
- // the engagement is too low for a signal by itself). |
- service->ResetScoreForURL(url1, 2); |
- service->ResetScoreForURL(url4, 3); |
- service->ResetScoreForURL(url7, 0); |
- |
- important_sites = ImportantSitesUtil::GetImportantRegisterableDomains( |
- profile(), kNumImportantSites); |
- ASSERT_EQ(2u, important_sites.size()); |
- std::vector<std::string> expected_sorted_domains = {"google.com", |
- "chrome.com"}; |
- std::vector<GURL> expected_sorted_origins = {url1, url4}; |
- ExpectImportantResultsEq(expected_sorted_domains, expected_sorted_origins, |
- important_sites); |
-} |
- |
-TEST_F(ImportantSitesUtilTest, Blacklisting) { |
- SiteEngagementService* service = SiteEngagementService::Get(profile()); |
- ASSERT_TRUE(service); |
- |
- GURL url1("http://www.google.com/"); |
- |
- // Set a bunch of positive signals. |
- service->ResetScoreForURL(url1, 5); |
- AddBookmark(url1); |
- AddContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW, |
- url1); |
- |
- // Important fetch 1. |
- std::vector<ImportantDomainInfo> important_sites = |
- ImportantSitesUtil::GetImportantRegisterableDomains(profile(), |
- kNumImportantSites); |
- std::vector<std::string> expected_sorted_domains = {"google.com"}; |
- std::vector<GURL> expected_sorted_origins = {url1}; |
- ExpectImportantResultsEq(expected_sorted_domains, expected_sorted_origins, |
- important_sites); |
- ASSERT_EQ(1u, important_sites.size()); |
- // Record ignore twice. |
- ImportantSitesUtil::RecordBlacklistedAndIgnoredImportantSites( |
- profile(), {}, {}, {"google.com"}, {important_sites[0].reason_bitfield}); |
- ImportantSitesUtil::RecordBlacklistedAndIgnoredImportantSites( |
- profile(), {}, {}, {"google.com"}, {important_sites[0].reason_bitfield}); |
- |
- // Important fetch 2. |
- important_sites = ImportantSitesUtil::GetImportantRegisterableDomains( |
- profile(), kNumImportantSites); |
- ExpectImportantResultsEq(expected_sorted_domains, expected_sorted_origins, |
- important_sites); |
- // We shouldn't blacklist after first two times. |
- ASSERT_EQ(1u, important_sites.size()); |
- |
- // Record ignore 3rd time. |
- ImportantSitesUtil::RecordBlacklistedAndIgnoredImportantSites( |
- profile(), {}, {}, {"google.com"}, {important_sites[0].reason_bitfield}); |
- |
- // Important fetch 3. We should be blacklisted now. |
- important_sites = ImportantSitesUtil::GetImportantRegisterableDomains( |
- profile(), kNumImportantSites); |
- ASSERT_EQ(0u, important_sites.size()); |
-} |
- |
-TEST_F(ImportantSitesUtilTest, BlacklistingReset) { |
- SiteEngagementService* service = SiteEngagementService::Get(profile()); |
- ASSERT_TRUE(service); |
- |
- GURL url1("http://www.google.com/"); |
- |
- // Set a bunch of positive signals. |
- service->ResetScoreForURL(url1, 5); |
- AddBookmark(url1); |
- AddContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW, |
- url1); |
- |
- std::vector<ImportantDomainInfo> important_sites = |
- ImportantSitesUtil::GetImportantRegisterableDomains(profile(), |
- kNumImportantSites); |
- |
- // Record ignored twice. |
- ASSERT_EQ(1u, important_sites.size()); |
- ImportantSitesUtil::RecordBlacklistedAndIgnoredImportantSites( |
- profile(), {}, {}, {"google.com"}, {important_sites[0].reason_bitfield}); |
- ImportantSitesUtil::RecordBlacklistedAndIgnoredImportantSites( |
- profile(), {}, {}, {"google.com"}, {important_sites[0].reason_bitfield}); |
- |
- // Important fetch, we should still be there. |
- important_sites = ImportantSitesUtil::GetImportantRegisterableDomains( |
- profile(), kNumImportantSites); |
- std::vector<std::string> expected_sorted_domains = {"google.com"}; |
- std::vector<GURL> expected_sorted_origins = {url1}; |
- ASSERT_EQ(1u, important_sites.size()); |
- ExpectImportantResultsEq(expected_sorted_domains, expected_sorted_origins, |
- important_sites); |
- |
- // Record NOT ignored. |
- ImportantSitesUtil::RecordBlacklistedAndIgnoredImportantSites( |
- profile(), {"google.com"}, {important_sites[0].reason_bitfield}, {}, {}); |
- |
- // Record ignored twice again. |
- ImportantSitesUtil::RecordBlacklistedAndIgnoredImportantSites( |
- profile(), {}, {}, {"google.com"}, {important_sites[0].reason_bitfield}); |
- ImportantSitesUtil::RecordBlacklistedAndIgnoredImportantSites( |
- profile(), {}, {}, {"google.com"}, {important_sites[0].reason_bitfield}); |
- |
- // Important fetch, we should still be there. |
- important_sites = ImportantSitesUtil::GetImportantRegisterableDomains( |
- profile(), kNumImportantSites); |
- ExpectImportantResultsEq(expected_sorted_domains, expected_sorted_origins, |
- important_sites); |
- |
- // Record ignored 3rd time in a row. |
- ImportantSitesUtil::RecordBlacklistedAndIgnoredImportantSites( |
- profile(), {}, {}, {"google.com"}, {important_sites[0].reason_bitfield}); |
- |
- // Blacklisted now. |
- important_sites = ImportantSitesUtil::GetImportantRegisterableDomains( |
- profile(), kNumImportantSites); |
- EXPECT_EQ(0u, important_sites.size()); |
-} |
- |
-TEST_F(ImportantSitesUtilTest, Metrics) { |
- SiteEngagementService* service = SiteEngagementService::Get(profile()); |
- ASSERT_TRUE(service); |
- base::HistogramTester histogram_tester; |
- |
- GURL url1("http://www.google.com/"); |
- service->ResetScoreForURL(url1, 5); |
- AddContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW, |
- url1); |
- |
- GURL url2("http://www.youtube.com/"); |
- AddBookmark(url2); |
- |
- GURL url3("http://www.bad.com/"); |
- AddBookmark(url3); |
- |
- std::vector<ImportantDomainInfo> important_sites = |
- ImportantSitesUtil::GetImportantRegisterableDomains(profile(), |
- kNumImportantSites); |
- |
- ImportantSitesUtil::RecordBlacklistedAndIgnoredImportantSites( |
- profile(), {"google.com", "youtube.com"}, |
- {important_sites[0].reason_bitfield, important_sites[1].reason_bitfield}, |
- {"bad.com"}, {important_sites[2].reason_bitfield}); |
- |
- EXPECT_THAT(histogram_tester.GetAllSamples( |
- "Storage.ImportantSites.CBDChosenReason"), |
- testing::ElementsAre( |
- base::Bucket(ENGAGEMENT, 1), |
- base::Bucket(BOOKMARKS, 1), |
- base::Bucket(NOTIFICATIONS, 1))); |
- |
- EXPECT_THAT( |
- histogram_tester.GetAllSamples("Storage.ImportantSites.CBDIgnoredReason"), |
- testing::ElementsAre(base::Bucket(BOOKMARKS, 1))); |
- |
- // Bookmarks are "unknown", as they were added after the crossed reasons. |
- EXPECT_THAT(histogram_tester.GetAllSamples( |
- "Storage.BlacklistedImportantSites.Reason"), |
- testing::ElementsAre( |
- base::Bucket(CROSSED_NOTIFICATIONS_AND_ENGAGEMENT, 1), |
- base::Bucket(CROSSED_REASON_UNKNOWN, 1))); |
-} |