diff options
Diffstat (limited to 'chromium/components/permissions/permission_uma_util.cc')
-rw-r--r-- | chromium/components/permissions/permission_uma_util.cc | 83 |
1 files changed, 39 insertions, 44 deletions
diff --git a/chromium/components/permissions/permission_uma_util.cc b/chromium/components/permissions/permission_uma_util.cc index e58d8ef5f3b..039722c2c8d 100644 --- a/chromium/components/permissions/permission_uma_util.cc +++ b/chromium/components/permissions/permission_uma_util.cc @@ -30,19 +30,6 @@ namespace permissions { -// UMA keys need to be statically initialized so plain function would not -// work. Use macros instead. -#define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \ - permission_insecure, action) \ - base::UmaHistogramEnumeration(permission, action, PermissionAction::NUM); \ - if (secure_origin) { \ - base::UmaHistogramEnumeration(permission_secure, action, \ - PermissionAction::NUM); \ - } else { \ - base::UmaHistogramEnumeration(permission_insecure, action, \ - PermissionAction::NUM); \ - } - #define PERMISSION_BUBBLE_TYPE_UMA(metric_name, permission_bubble_type) \ base::UmaHistogramEnumeration(metric_name, permission_bubble_type, \ PermissionRequestType::NUM) @@ -128,29 +115,41 @@ void RecordEngagementMetric(const std::vector<PermissionRequest*>& requests, base::UmaHistogramPercentage(name, engagement_score); } -void RecordPermissionActionUkm(PermissionAction action, - PermissionRequestGestureType gesture_type, - ContentSettingsType permission, - int dismiss_count, - int ignore_count, - PermissionSourceUI source_ui, - PermissionPromptDisposition ui_disposition, - base::Optional<ukm::SourceId> source_id) { +void RecordPermissionActionUkm( + PermissionAction action, + PermissionRequestGestureType gesture_type, + ContentSettingsType permission, + int dismiss_count, + int ignore_count, + PermissionSourceUI source_ui, + PermissionPromptDisposition ui_disposition, + base::Optional<bool> has_three_consecutive_denies, + base::Optional<ukm::SourceId> source_id) { // Only record the permission change if the origin is in the history. if (!source_id.has_value()) return; size_t num_values = 0; - ukm::builders::Permission(source_id.value()) - .SetAction(static_cast<int64_t>(action)) + + ukm::builders::Permission builder(source_id.value()); + builder.SetAction(static_cast<int64_t>(action)) .SetGesture(static_cast<int64_t>(gesture_type)) .SetPermissionType(static_cast<int64_t>( ContentSettingTypeToHistogramValue(permission, &num_values))) .SetPriorDismissals(std::min(kPriorCountCap, dismiss_count)) .SetPriorIgnores(std::min(kPriorCountCap, ignore_count)) .SetSource(static_cast<int64_t>(source_ui)) - .SetPromptDisposition(static_cast<int64_t>(ui_disposition)) - .Record(ukm::UkmRecorder::Get()); + .SetPromptDisposition(static_cast<int64_t>(ui_disposition)); + + if (has_three_consecutive_denies.has_value()) { + int64_t satisfied_adaptive_triggers = 0; + if (has_three_consecutive_denies.value()) + satisfied_adaptive_triggers |= + static_cast<int64_t>(AdaptiveTriggers::THREE_CONSECUTIVE_DENIES); + builder.SetSatisfiedAdaptiveTriggers(satisfied_adaptive_triggers); + } + + builder.Record(ukm::UkmRecorder::Get()); } std::string GetPromptDispositionString( @@ -265,6 +264,7 @@ void PermissionUmaUtil::RecordEmbargoPromptSuppressionFromSource( case PermissionStatusSource::INSECURE_ORIGIN: case PermissionStatusSource::FEATURE_POLICY: case PermissionStatusSource::VIRTUAL_URL_DIFFERENT_ORIGIN: + case PermissionStatusSource::PORTAL: // The permission wasn't under embargo, so don't record anything. We may // embargo it later. break; @@ -489,35 +489,31 @@ void PermissionUmaUtil::RecordPermissionAction( PermissionsClient::Get()->GetUkmSourceId( browser_context, web_contents, requesting_origin, - base::BindOnce(&RecordPermissionActionUkm, action, gesture_type, - permission, dismiss_count, ignore_count, source_ui, - ui_disposition)); - - bool secure_origin = content::IsOriginSecure(requesting_origin); + base::BindOnce( + &RecordPermissionActionUkm, action, gesture_type, permission, + dismiss_count, ignore_count, source_ui, ui_disposition, + permission == ContentSettingsType::NOTIFICATIONS + ? PermissionsClient::Get() + ->HadThreeConsecutiveNotificationPermissionDenies( + browser_context) + : base::nullopt)); switch (permission) { - // Geolocation, MidiSysEx, Push, Media, Clipboard, and AR/VR permissions are - // disabled on insecure origins, so there's no need to record separate - // metrics for secure/insecure. case ContentSettingsType::GEOLOCATION: base::UmaHistogramEnumeration("Permissions.Action.Geolocation", action, PermissionAction::NUM); break; case ContentSettingsType::NOTIFICATIONS: - PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Notifications", - "Permissions.Action.SecureOrigin.Notifications", - "Permissions.Action.InsecureOrigin.Notifications", - action); + base::UmaHistogramEnumeration("Permissions.Action.Notifications", action, + PermissionAction::NUM); break; case ContentSettingsType::MIDI_SYSEX: base::UmaHistogramEnumeration("Permissions.Action.MidiSysEx", action, PermissionAction::NUM); break; case ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER: - PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.ProtectedMedia", - "Permissions.Action.SecureOrigin.ProtectedMedia", - "Permissions.Action.InsecureOrigin.ProtectedMedia", - action); + base::UmaHistogramEnumeration("Permissions.Action.ProtectedMedia", action, + PermissionAction::NUM); break; case ContentSettingsType::MEDIASTREAM_MIC: base::UmaHistogramEnumeration("Permissions.Action.AudioCapture", action, @@ -528,9 +524,8 @@ void PermissionUmaUtil::RecordPermissionAction( PermissionAction::NUM); break; case ContentSettingsType::PLUGINS: - PERMISSION_ACTION_UMA(secure_origin, "Permissions.Action.Flash", - "Permissions.Action.SecureOrigin.Flash", - "Permissions.Action.InsecureOrigin.Flash", action); + base::UmaHistogramEnumeration("Permissions.Action.Flash", action, + PermissionAction::NUM); break; case ContentSettingsType::CLIPBOARD_READ_WRITE: base::UmaHistogramEnumeration("Permissions.Action.ClipboardReadWrite", |