Index: chrome/browser/permissions/permission_util.cc |
diff --git a/chrome/browser/permissions/permission_util.cc b/chrome/browser/permissions/permission_util.cc |
index d4369c4609207aa11728227c4ac19e1b48e2f388..9cc8f04f717838250deacf84e8ffd4a31aa3cf8f 100644 |
--- a/chrome/browser/permissions/permission_util.cc |
+++ b/chrome/browser/permissions/permission_util.cc |
@@ -5,6 +5,9 @@ |
#include "chrome/browser/permissions/permission_util.h" |
#include "base/logging.h" |
+#include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
+#include "chrome/browser/permissions/permission_uma_util.h" |
+#include "components/content_settings/core/browser/host_content_settings_map.h" |
#include "content/public/browser/permission_type.h" |
using content::PermissionType; |
@@ -69,3 +72,30 @@ bool PermissionUtil::GetPermissionType(ContentSettingsType type, |
} |
return true; |
} |
+ |
+void PermissionUtil::SetContentSettingAndRecordRevocation( |
+ Profile* profile, |
+ const GURL& primary_url, |
+ const GURL& secondary_url, |
+ ContentSettingsType content_type, |
+ std::string resource_identifier, |
+ ContentSetting setting) { |
+ HostContentSettingsMap* map = |
+ HostContentSettingsMapFactory::GetForProfile(profile); |
+ ContentSetting previous_value = map->GetContentSetting( |
+ primary_url, secondary_url, content_type, resource_identifier); |
+ |
+ map->SetContentSettingDefaultScope(primary_url, secondary_url, content_type, |
+ resource_identifier, setting); |
+ |
+ ContentSetting final_value = map->GetContentSetting( |
+ primary_url, secondary_url, content_type, resource_identifier); |
+ |
+ if (previous_value == CONTENT_SETTING_ALLOW && |
+ final_value != CONTENT_SETTING_ALLOW) { |
+ PermissionType permission_type; |
+ if (PermissionUtil::GetPermissionType(content_type, &permission_type)) { |
+ PermissionUmaUtil::PermissionRevoked(permission_type, primary_url); |
+ } |
+ } |
+} |