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 02b40dbbb4661b71b3982f6173eed4d10a333e8f..db67f021678e77628e0465198ad6c02b1ab73889 100644 |
--- a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc |
+++ b/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc |
@@ -4,27 +4,25 @@ |
#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_content_settings_manager_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" |
ChromeSubresourceFilterClient::ChromeSubresourceFilterClient( |
content::WebContents* web_contents) |
: web_contents_(web_contents), shown_for_navigation_(false) { |
DCHECK(web_contents); |
- // Ensure the content settings manager is initialized. |
- SubresourceFilterContentSettingsManagerFactory::EnsureForProfile( |
- Profile::FromBrowserContext(web_contents_->GetBrowserContext())); |
+ settings_manager_ = |
engedy
2017/04/12 14:02:50
nit: Can we put this on the initializer list? We w
Charlie Harrison
2017/04/12 17:53:44
Done.
|
+ SubresourceFilterContentSettingsManagerFactory::EnsureForProfile( |
+ Profile::FromBrowserContext(web_contents_->GetBrowserContext())); |
} |
ChromeSubresourceFilterClient::~ChromeSubresourceFilterClient() {} |
@@ -33,21 +31,25 @@ void ChromeSubresourceFilterClient::ToggleNotificationVisibility( |
bool visibility) { |
if (shown_for_navigation_ && visibility) |
return; |
- |
- shown_for_navigation_ = visibility; |
- TabSpecificContentSettings* content_settings = |
- TabSpecificContentSettings::FromWebContents(web_contents_); |
+ shown_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& url = web_contents_->GetLastCommittedURL(); |
+ if (!settings_manager_->ShouldShowUIForSite(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); |
+ OnDidShowUI(url); |
} else { |
LogAction(kActionNavigationStarted); |
} |
@@ -55,40 +57,38 @@ void ChromeSubresourceFilterClient::ToggleNotificationVisibility( |
bool ChromeSubresourceFilterClient::IsWhitelistedByContentSettings( |
const GURL& url) { |
- return GetContentSettingForUrl(url) == CONTENT_SETTING_BLOCK; |
+ return settings_manager_->GetContentSetting(url) == CONTENT_SETTING_BLOCK; |
} |
void ChromeSubresourceFilterClient::WhitelistByContentSettings( |
const GURL& url) { |
engedy
2017/04/12 14:02:50
nit: Do you think it would add some clarity to s/u
Charlie Harrison
2017/04/12 17:53:44
Done.
|
// 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); |
- |
+ settings_manager_->SetContentSetting(url, CONTENT_SETTING_BLOCK, |
+ true /* log_metrics */); |
LogAction(kActionContentSettingsBlockedFromUI); |
} |
+void ChromeSubresourceFilterClient::OnActivationComputed( |
+ const GURL& url, |
+ const subresource_filter::ActivationState& state) { |
+ // Clear the content setting when the site does not trigger activation. |
+ if (state.activation_level == subresource_filter::ActivationLevel::DISABLED && |
engedy
2017/04/12 14:02:50
Should we also remove the content setting if this
Charlie Harrison
2017/04/12 17:53:44
Sure. Done.
|
+ settings_manager_->GetContentSetting(url) == CONTENT_SETTING_ALLOW) { |
+ settings_manager_->ClearContentSetting(url); |
+ } |
+} |
+ |
// static |
void ChromeSubresourceFilterClient::LogAction(SubresourceFilterAction action) { |
UMA_HISTOGRAM_ENUMERATION("SubresourceFilter.Actions", 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()); |
+void ChromeSubresourceFilterClient::OnDidShowUI(const GURL& url) { |
engedy
2017/04/12 14:02:50
This is now three lines and called from a single c
Charlie Harrison
2017/04/12 17:53:44
Done.
|
+ LogAction(kActionUIShown); |
+ shown_for_navigation_ = true; |
+ |
+ settings_manager_->OnDidShowUI(url); |
} |
subresource_filter::VerifiedRulesetDealer::Handle* |