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

Unified Diff: components/content_settings/core/browser/host_content_settings_map.cc

Issue 1803973002: Content Settings: Add RevocationObserver to measure when permissions are revoked (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add test Created 4 years, 9 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: components/content_settings/core/browser/host_content_settings_map.cc
diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc
index d1151eab85af2a51fa622b979cda1d05674ff2a3..a3cd4f9fc69dd6fb2590f962dbe0ed0dc1fdbe42 100644
--- a/components/content_settings/core/browser/host_content_settings_map.cc
+++ b/components/content_settings/core/browser/host_content_settings_map.cc
@@ -453,6 +453,9 @@ void HostContentSettingsMap::SetContentSettingDefaultScope(
content_type);
DCHECK(info);
+ ContentSetting previous_value = GetContentSetting(
+ primary_url, secondary_url, content_type, resource_identifier);
+
content_settings::PatternPair patterns =
GetPatternsFromScopingType(info->website_settings_info()->scoping_type(),
primary_url, secondary_url);
@@ -463,6 +466,20 @@ void HostContentSettingsMap::SetContentSettingDefaultScope(
SetContentSetting(primary_pattern, secondary_pattern, content_type,
resource_identifier, setting);
+
+ ContentSetting final_value = GetContentSetting(
+ primary_url, secondary_url, content_type, resource_identifier);
+
+ bool final_value_not_allowed =
raymes 2016/03/17 02:05:43 Can you just check whether it's not ALLOW?
tsergeant 2016/03/17 06:25:40 Doing that would not trigger in the case where the
tsergeant 2016/03/21 03:38:37 As discussed, I've simplified this logic without c
+ final_value == CONTENT_SETTING_BLOCK ||
+ (final_value == CONTENT_SETTING_ASK &&
+ GetDefaultContentSetting(content_type, nullptr) !=
+ CONTENT_SETTING_ALLOW);
+
+ if (previous_value == CONTENT_SETTING_ALLOW && final_value_not_allowed) {
+ NotifyRevocation(primary_url, secondary_url, content_type,
+ resource_identifier);
+ }
}
ContentSetting HostContentSettingsMap::GetContentSettingAndMaybeUpdateLastUsage(
@@ -531,6 +548,16 @@ void HostContentSettingsMap::RemoveObserver(
observers_.RemoveObserver(observer);
}
+void HostContentSettingsMap::AddRevocationObserver(
+ content_settings::RevocationObserver* observer) {
+ revocation_observers_.AddObserver(observer);
+}
+
+void HostContentSettingsMap::RemoveRevocationObserver(
+ content_settings::RevocationObserver* observer) {
+ revocation_observers_.RemoveObserver(observer);
+}
+
void HostContentSettingsMap::FlushLossyWebsiteSettings() {
prefs_->SchedulePendingLossyWrites();
}
@@ -747,6 +774,19 @@ scoped_ptr<base::Value> HostContentSettingsMap::GetWebsiteSettingInternal(
return scoped_ptr<base::Value>();
}
+void HostContentSettingsMap::NotifyRevocation(
+ const GURL& primary_url,
+ const GURL& secondary_url,
+ ContentSettingsType content_type,
+ const std::string& resource_identifier) {
+ FOR_EACH_OBSERVER(content_settings::RevocationObserver,
+ revocation_observers_,
+ OnContentSettingRevoked(primary_url,
+ secondary_url,
+ content_type,
+ resource_identifier));
raymes 2016/03/17 02:05:43 nit: perhaps just inline this for now?
tsergeant 2016/03/17 06:25:40 Done.
+}
+
// static
scoped_ptr<base::Value>
HostContentSettingsMap::GetContentSettingValueAndPatterns(

Powered by Google App Engine
This is Rietveld 408576698