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 97834772a53a020cf6ae1aa3ad7c76d6e52b7bb1..db566a204832f2cf2a3c090b53978fdd6583eb1e 100644 |
--- a/chrome/browser/permissions/permission_decision_auto_blocker.cc |
+++ b/chrome/browser/permissions/permission_decision_auto_blocker.cc |
@@ -113,6 +113,18 @@ int GetActionCount(const GURL& url, |
return current_count; |
} |
+bool PreviouslyEmbargoed(Profile* profile, |
dominickn
2017/01/27 06:05:47
Call this WasPreviouslyEmbargoed. Add a comment sa
meredithl
2017/01/29 23:48:29
Done.
|
+ const GURL& url, |
+ content::PermissionType permission, |
+ const char* key) { |
+ HostContentSettingsMap* map = |
+ HostContentSettingsMapFactory::GetForProfile(profile); |
+ std::unique_ptr<base::DictionaryValue> dict = GetOriginDict(map, url); |
+ base::DictionaryValue* permission_dict = GetOrCreatePermissionDict( |
+ dict.get(), PermissionUtil::GetPermissionString(permission)); |
+ return permission_dict->HasKey(key); |
+} |
+ |
} // namespace |
// PermissionDecisionAutoBlocker::Factory -------------------------------------- |
@@ -227,9 +239,18 @@ bool PermissionDecisionAutoBlocker::RecordDismissAndEmbargo( |
if (base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften) && |
current_dismissal_count >= g_prompt_dismissals_before_block) { |
+ if (PreviouslyEmbargoed(profile_, url, permission, |
+ kPermissionDismissalEmbargoKey)) { |
+ PermissionUmaUtil::RecordRepeatedEmbargo( |
+ PermissionEmbargoReason::REPEATED_DISMISSALS); |
+ } |
+ |
PlaceUnderEmbargo(permission, url, kPermissionDismissalEmbargoKey); |
+ PermissionUmaUtil::RecordPermissionEmbargoReason( |
+ PermissionEmbargoReason::REPEATED_DISMISSALS); |
return true; |
} |
+ |
dominickn
2017/01/27 06:05:47
Nit: probably don't need this extra newline
meredithl
2017/01/29 23:48:29
Done.
|
return false; |
} |
@@ -341,12 +362,22 @@ void PermissionDecisionAutoBlocker::CheckSafeBrowsingResult( |
base::Callback<void(bool)> callback, |
bool should_be_embargoed) { |
if (should_be_embargoed) { |
- // Requesting site is blacklisted for this permission, update the content |
- // setting to place it under embargo. |
+ if (PreviouslyEmbargoed(profile_, request_origin, permission, |
+ kPermissionBlacklistEmbargoKey)) { |
+ PermissionUmaUtil::RecordRepeatedEmbargo( |
+ PermissionEmbargoReason::PERMISSIONS_BLACKLISTING); |
+ } |
+ |
PlaceUnderEmbargo(permission, request_origin, |
kPermissionBlacklistEmbargoKey); |
+ PermissionUmaUtil::RecordPermissionEmbargoReason( |
+ PermissionEmbargoReason::PERMISSIONS_BLACKLISTING); |
+ } else { |
+ PermissionUmaUtil::RecordPermissionEmbargoReason( |
dominickn
2017/01/27 06:05:47
Will this double count since you're calling Record
meredithl
2017/01/29 23:48:29
Hmm, I believe so. Imo that should have been picke
dominickn
2017/01/30 00:06:20
You don't actually have any test which checks the
meredithl
2017/01/30 00:34:33
I do a check of the histograms in Permission Conte
dominickn
2017/01/30 00:42:36
Right, but those tests don't have a safe browsing
meredithl
2017/01/30 02:04:47
Okay, I've added an extra test in PDAB to check th
|
+ PermissionEmbargoReason::NOT_EMBARGOED); |
} |
- callback.Run(should_be_embargoed /* permission blocked */); |
+ |
+ callback.Run(should_be_embargoed); |
} |
// static |