Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Unified Diff: chrome/browser/subresource_filter/chrome_subresource_filter_client.cc

Issue 2795053002: [subresource_filter] Implement the "Smart" UI on Android (Closed)
Patch Set: rebase on #463637 Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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*

Powered by Google App Engine
This is Rietveld 408576698