Commit 76628bff authored by Colin Blundell's avatar Colin Blundell Committed by Commit Bot

[Subresource Filter] Prep ContentSettingsManager for history dep removal

WebLayer does not use //components/history and does not want to take a
dep on the (large) component, as every dep that WebLayer adds has an
impact on WebView. SubresourceFilterContentSettingsManager, however,
currently depends on //components/history for its optional observance of
the user's deletion of URLs from history.

This CL prepares for abstraction of that dependency by having
SubresourceFilterContentSettingsManager::OnURLsDeleted() operate on
new public APIs of ContentSettingsManager for deleting site metadata. A
followup CL will then do the following:
- Add the ability for SubresourceFilterProfileContext to store opaque
  embedder data (via a simple
  SubresourceFilterProfileContext::EmbedderData interface)
- Move the history observance to a new SubresourceFilterHistoryObserver
  class that is an EmbedderData and takes in a
  SubresourceFilterContentSettingsManager instance to call into
- Have SubresourceFilterProfileContextFactory create
  SubresourceFilterHistoryObserver to be stored by
  SubresourceFilterProfileContext instances

In this way, WebLayer will be able to use
SubresourceFilterProfileContext, AdsInterventionManager, and
SubresourceFilterContentSettingsManager without taking on the
//components/history dep.

Bug: 1116095
Change-Id: Icf20e19722ce4b728645b157d513194cbfefec6b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2464264Reviewed-by: default avatarEric Robinson <ericrobinson@chromium.org>
Commit-Queue: Colin Blundell <blundell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#816463}
parent 7f9fe85a
...@@ -212,7 +212,7 @@ void SubresourceFilterContentSettingsManager::OnURLsDeleted( ...@@ -212,7 +212,7 @@ void SubresourceFilterContentSettingsManager::OnURLsDeleted(
history::HistoryService* history_service, history::HistoryService* history_service,
const history::DeletionInfo& deletion_info) { const history::DeletionInfo& deletion_info) {
if (deletion_info.IsAllHistory()) { if (deletion_info.IsAllHistory()) {
settings_map_->ClearSettingsForOneType(ContentSettingsType::ADS_DATA); ClearMetadataForAllSites();
return; return;
} }
...@@ -220,7 +220,7 @@ void SubresourceFilterContentSettingsManager::OnURLsDeleted( ...@@ -220,7 +220,7 @@ void SubresourceFilterContentSettingsManager::OnURLsDeleted(
const GURL& origin = entry.first; const GURL& origin = entry.first;
int remaining_urls = entry.second.first; int remaining_urls = entry.second.first;
if (!origin.is_empty() && remaining_urls == 0) if (!origin.is_empty() && remaining_urls == 0)
SetSiteMetadata(origin, nullptr); ClearSiteMetadata(origin);
} }
} }
...@@ -242,3 +242,12 @@ bool SubresourceFilterContentSettingsManager::GetSiteActivationFromMetadata( ...@@ -242,3 +242,12 @@ bool SubresourceFilterContentSettingsManager::GetSiteActivationFromMetadata(
// kActivatedKey. // kActivatedKey.
return !site_activation_status || *site_activation_status; return !site_activation_status || *site_activation_status;
} }
void SubresourceFilterContentSettingsManager::ClearSiteMetadata(
const GURL& url) {
SetSiteMetadata(url, nullptr);
}
void SubresourceFilterContentSettingsManager::ClearMetadataForAllSites() {
settings_map_->ClearSettingsForOneType(ContentSettingsType::ADS_DATA);
}
...@@ -115,6 +115,12 @@ class SubresourceFilterContentSettingsManager ...@@ -115,6 +115,12 @@ class SubresourceFilterContentSettingsManager
// class comment for information on the metadata data model. // class comment for information on the metadata data model.
bool GetSiteActivationFromMetadata(const GURL& url); bool GetSiteActivationFromMetadata(const GURL& url);
// Clears metadata for |url|.
void ClearSiteMetadata(const GURL& url);
// Clears metadata for all sites.
void ClearMetadataForAllSites();
void set_clock_for_testing(std::unique_ptr<base::Clock> tick_clock) { void set_clock_for_testing(std::unique_ptr<base::Clock> tick_clock) {
clock_ = std::move(tick_clock); clock_ = std::move(tick_clock);
} }
......
...@@ -303,6 +303,62 @@ TEST_F(SubresourceFilterContentSettingsManagerTest, ...@@ -303,6 +303,62 @@ TEST_F(SubresourceFilterContentSettingsManagerTest,
EXPECT_FALSE(settings_manager()->GetSiteMetadata(url)); EXPECT_FALSE(settings_manager()->GetSiteMetadata(url));
} }
// Tests that ClearSiteMetadata(origin) will result in clearing metadata for all
// sites whose origin is |origin|, but will not clear metadata for sites with
// different origins.
TEST_F(SubresourceFilterContentSettingsManagerTest, ClearSiteMetadata) {
GURL initial_url("https://example.test/1");
GURL same_origin_url("https://example.test/2");
GURL different_origin_url("https://second_example.test/");
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(initial_url));
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(same_origin_url));
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(different_origin_url));
settings_manager()->OnDidShowUI(initial_url);
EXPECT_FALSE(settings_manager()->ShouldShowUIForSite(initial_url));
EXPECT_FALSE(settings_manager()->ShouldShowUIForSite(same_origin_url));
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(different_origin_url));
settings_manager()->OnDidShowUI(different_origin_url);
EXPECT_FALSE(settings_manager()->ShouldShowUIForSite(initial_url));
EXPECT_FALSE(settings_manager()->ShouldShowUIForSite(same_origin_url));
EXPECT_FALSE(settings_manager()->ShouldShowUIForSite(different_origin_url));
settings_manager()->ClearSiteMetadata(initial_url);
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(initial_url));
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(same_origin_url));
EXPECT_FALSE(settings_manager()->ShouldShowUIForSite(different_origin_url));
settings_manager()->ClearSiteMetadata(different_origin_url);
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(initial_url));
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(same_origin_url));
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(different_origin_url));
}
// Tests that ClearMetadataForAllSites() does indeed clear metadata for all
// sites.
TEST_F(SubresourceFilterContentSettingsManagerTest, ClearMetadataForAllSites) {
GURL initial_url("https://example.test/1");
GURL same_origin_url("https://example.test/2");
GURL different_origin_url("https://second_example.test/");
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(initial_url));
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(same_origin_url));
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(different_origin_url));
settings_manager()->OnDidShowUI(initial_url);
settings_manager()->OnDidShowUI(different_origin_url);
EXPECT_FALSE(settings_manager()->ShouldShowUIForSite(initial_url));
EXPECT_FALSE(settings_manager()->ShouldShowUIForSite(same_origin_url));
EXPECT_FALSE(settings_manager()->ShouldShowUIForSite(different_origin_url));
settings_manager()->ClearMetadataForAllSites();
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(initial_url));
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(same_origin_url));
EXPECT_TRUE(settings_manager()->ShouldShowUIForSite(different_origin_url));
}
TEST_F(SubresourceFilterContentSettingsManagerHistoryTest, TEST_F(SubresourceFilterContentSettingsManagerHistoryTest,
HistoryUrlDeleted_ClearsWebsiteSetting) { HistoryUrlDeleted_ClearsWebsiteSetting) {
// Simulate a history already populated with a URL. // Simulate a history already populated with a URL.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment