| Index: chrome/browser/permissions/permission_decision_auto_blocker.cc
|
| diff --git a/chrome/browser/permissions/permission_decision_auto_blocker.cc b/chrome/browser/permissions/permission_decision_auto_blocker.cc
|
| index a41d4ba59e1b39117fbbc976e00d49bc2ba6dabd..9afa6853b778144935ec1eb873674fd4f1a49f8c 100644
|
| --- a/chrome/browser/permissions/permission_decision_auto_blocker.cc
|
| +++ b/chrome/browser/permissions/permission_decision_auto_blocker.cc
|
| @@ -304,6 +304,41 @@ int PermissionDecisionAutoBlocker::RecordIgnore(
|
| profile_);
|
| }
|
|
|
| +void PermissionDecisionAutoBlocker::RemoveEmbargoByUrl(
|
| + const GURL& url,
|
| + ContentSettingsType permission) {
|
| + if (!PermissionUtil::IsPermission(permission))
|
| + return;
|
| +
|
| + // Don't proceed if |permission| was not under embargo for |url|.
|
| + PermissionResult result = GetEmbargoResult(url, permission);
|
| + if (result.source != PermissionStatusSource::MULTIPLE_DISMISSALS &&
|
| + result.source != PermissionStatusSource::SAFE_BROWSING_BLACKLIST) {
|
| + return;
|
| + }
|
| +
|
| + HostContentSettingsMap* map =
|
| + HostContentSettingsMapFactory::GetForProfile(profile_);
|
| + std::unique_ptr<base::DictionaryValue> dict = GetOriginDict(map, url);
|
| + base::DictionaryValue* permission_dict = GetOrCreatePermissionDict(
|
| + dict.get(), PermissionUtil::GetPermissionString(permission));
|
| +
|
| + // Deleting non-existent entries will return a false value. Since it should be
|
| + // impossible for a permission to have been embargoed for two different
|
| + // reasons at the same time, check that exactly one deletion was successful.
|
| + const bool dismissal_key_deleted =
|
| + permission_dict->RemoveWithoutPathExpansion(
|
| + kPermissionDismissalEmbargoKey, nullptr);
|
| + const bool blacklist_key_deleted =
|
| + permission_dict->RemoveWithoutPathExpansion(
|
| + kPermissionBlacklistEmbargoKey, nullptr);
|
| + DCHECK(dismissal_key_deleted != blacklist_key_deleted);
|
| +
|
| + map->SetWebsiteSettingDefaultScope(
|
| + url, GURL(), CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA,
|
| + std::string(), std::move(dict));
|
| +}
|
| +
|
| void PermissionDecisionAutoBlocker::RemoveCountsByUrl(
|
| base::Callback<bool(const GURL& url)> filter) {
|
| HostContentSettingsMap* map =
|
|
|