Index: chrome/browser/subresource_filter/chrome_subresource_filter_client.cc |
diff --git a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc b/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc |
index 8326fc3d2f978c81e58371fdfb12e94ae5ed1348..2d56f9d52a43532d927bab80b7aed48e313144b1 100644 |
--- a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc |
+++ b/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc |
@@ -4,27 +4,28 @@ |
#include "chrome/browser/subresource_filter/chrome_subresource_filter_client.h" |
-#include <string> |
- |
#include "base/metrics/histogram_macros.h" |
#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
#include "chrome/browser/content_settings/tab_specific_content_settings.h" |
#include "chrome/browser/infobars/infobar_service.h" |
#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/subresource_filter/subresource_filter_content_settings_manager.h" |
+#include "chrome/browser/subresource_filter/subresource_filter_profile_context.h" |
#include "chrome/browser/subresource_filter/subresource_filter_profile_context_factory.h" |
#include "chrome/browser/ui/android/content_settings/subresource_filter_infobar_delegate.h" |
-#include "components/content_settings/core/browser/host_content_settings_map.h" |
-#include "components/content_settings/core/common/content_settings_types.h" |
#include "components/subresource_filter/content/browser/content_ruleset_service.h" |
+#include "components/subresource_filter/core/common/activation_level.h" |
+#include "components/subresource_filter/core/common/activation_state.h" |
#include "content/public/browser/navigation_handle.h" |
ChromeSubresourceFilterClient::ChromeSubresourceFilterClient( |
content::WebContents* web_contents) |
: web_contents_(web_contents), did_show_ui_for_navigation_(false) { |
DCHECK(web_contents); |
- SubresourceFilterProfileContextFactory::EnsureForProfile( |
- Profile::FromBrowserContext(web_contents_->GetBrowserContext())); |
+ SubresourceFilterProfileContext* context = |
+ SubresourceFilterProfileContextFactory::GetForProfile( |
+ Profile::FromBrowserContext(web_contents_->GetBrowserContext())); |
+ settings_manager_ = context->settings_manager(); |
} |
ChromeSubresourceFilterClient::~ChromeSubresourceFilterClient() {} |
@@ -33,21 +34,28 @@ void ChromeSubresourceFilterClient::ToggleNotificationVisibility( |
bool visibility) { |
if (did_show_ui_for_navigation_ && visibility) |
return; |
- |
- did_show_ui_for_navigation_ = visibility; |
- TabSpecificContentSettings* content_settings = |
- TabSpecificContentSettings::FromWebContents(web_contents_); |
+ did_show_ui_for_navigation_ = false; |
// |visibility| is false when a new navigation starts. |
if (visibility) { |
- content_settings->OnContentBlocked( |
- CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER); |
- LogAction(kActionUIShown); |
+ const GURL& top_level_url = web_contents_->GetLastCommittedURL(); |
+ if (!settings_manager_->ShouldShowUIForSite(top_level_url)) { |
+ LogAction(kActionUISuppressed); |
+ return; |
+ } |
#if defined(OS_ANDROID) |
InfoBarService* infobar_service = |
InfoBarService::FromWebContents(web_contents_); |
SubresourceFilterInfobarDelegate::Create(infobar_service); |
#endif |
+ TabSpecificContentSettings* content_settings = |
+ TabSpecificContentSettings::FromWebContents(web_contents_); |
+ content_settings->OnContentBlocked( |
+ CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER); |
+ |
+ LogAction(kActionUIShown); |
+ did_show_ui_for_navigation_ = true; |
+ settings_manager_->OnDidShowUI(top_level_url); |
} else { |
LogAction(kActionNavigationStarted); |
} |
@@ -58,22 +66,15 @@ bool ChromeSubresourceFilterClient::ShouldSuppressActivation( |
const GURL& url(navigation_handle->GetURL()); |
return navigation_handle->IsInMainFrame() && |
(whitelisted_hosts_.find(url.host()) != whitelisted_hosts_.end() || |
- GetContentSettingForUrl(url) == CONTENT_SETTING_BLOCK); |
+ settings_manager_->GetSitePermission(url) == CONTENT_SETTING_BLOCK); |
} |
void ChromeSubresourceFilterClient::WhitelistByContentSettings( |
- const GURL& url) { |
- // Whitelist via content settings. |
- Profile* profile = |
- Profile::FromBrowserContext(web_contents_->GetBrowserContext()); |
- DCHECK(profile); |
- HostContentSettingsMap* settings_map = |
- HostContentSettingsMapFactory::GetForProfile(profile); |
- settings_map->SetContentSettingDefaultScope( |
- url, url, ContentSettingsType::CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER, |
- std::string(), CONTENT_SETTING_BLOCK); |
- |
- LogAction(kActionContentSettingsBlockedFromUI); |
+ const GURL& top_level_url) { |
+ // Whitelist via content settings. SetContentSettings has logic to ignore |
+ // metrics for these calls, so also log the generic blocked metrics. |
+ settings_manager_->SetSitePermission(top_level_url, CONTENT_SETTING_BLOCK, |
+ true /* from_ui */); |
} |
void ChromeSubresourceFilterClient::WhitelistInCurrentWebContents( |
@@ -88,18 +89,6 @@ void ChromeSubresourceFilterClient::LogAction(SubresourceFilterAction action) { |
kActionLastEntry); |
} |
-ContentSetting ChromeSubresourceFilterClient::GetContentSettingForUrl( |
- const GURL& url) { |
- Profile* profile = |
- Profile::FromBrowserContext(web_contents_->GetBrowserContext()); |
- DCHECK(profile); |
- HostContentSettingsMap* settings_map = |
- HostContentSettingsMapFactory::GetForProfile(profile); |
- return settings_map->GetContentSetting( |
- url, url, ContentSettingsType::CONTENT_SETTINGS_TYPE_SUBRESOURCE_FILTER, |
- std::string()); |
-} |
- |
subresource_filter::VerifiedRulesetDealer::Handle* |
ChromeSubresourceFilterClient::GetRulesetDealer() { |
subresource_filter::ContentRulesetService* ruleset_service = |