// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/permissions/ui_bundled/permission_metrics_util.h"
#import "base/metrics/histogram_functions.h"
#import "base/metrics/user_metrics.h"
#import "base/metrics/user_metrics_action.h"
#import "components/content_settings/core/browser/content_settings_uma_util.h"
#import "components/content_settings/core/common/content_settings_types.h"
#import "components/page_info/core/page_info_action.h"
#import "ios/chrome/browser/permissions/ui_bundled/permission_info.h"
#import "ios/chrome/browser/permissions/ui_bundled/permissions_constants.h"
#import "ios/web/public/permissions/permissions.h"
// Histogram names.
const char kModalPermissionEventsHistogram[] = "IOS.Permission.Modal.Events";
const char kPageInfoPermissionEventsHistogram[] =
"IOS.Permission.PageInfo.Events";
const char kPermissionEventUserActionHistogram[] = "IOS.Permission.Toggled";
const char kOriginInfoPermissionChangedAllowedHistogram[] =
"WebsiteSettings.OriginInfo.PermissionChanged.Allowed";
const char kPageInfoPermissionChangedUserActionHistogram[] =
"PageInfo.Permission.Changed";
void RecordPermissionEventFromOrigin(PermissionInfo* permissionInfo,
PermissionEventOrigin permissionOrigin) {
PermissionEvent event;
ContentSettingsType type;
switch (permissionInfo.permission) {
case web::PermissionCamera:
event = permissionInfo.state == web::PermissionStateAllowed
? PermissionEvent::cameraPermissionEnabled
: PermissionEvent::cameraPermissionDisabled;
type = ContentSettingsType::MEDIASTREAM_CAMERA;
break;
case web::PermissionMicrophone:
event = permissionInfo.state == web::PermissionStateAllowed
? PermissionEvent::microphonePermissionEnabled
: PermissionEvent::microphonePermissionDisabled;
type = ContentSettingsType::MEDIASTREAM_MIC;
break;
}
switch (permissionOrigin) {
case PermissionEventOrigin::PermissionEventOriginModalInfobar:
base::UmaHistogramEnumeration(kModalPermissionEventsHistogram, event);
break;
case PermissionEventOrigin::PermissionEventOriginPageInfo:
base::UmaHistogramEnumeration(kPageInfoPermissionEventsHistogram, event);
base::UmaHistogramEnumeration(page_info::kWebsiteSettingsActionHistogram,
page_info::PAGE_INFO_CHANGED_PERMISSION);
base::RecordAction(base::UserMetricsAction(
kPageInfoPermissionChangedUserActionHistogram));
content_settings_uma_util::RecordContentSettingsHistogram(
kOriginInfoPermissionChangedHistogram, type);
content_settings_uma_util::RecordContentSettingsHistogram(
permissionInfo.state == web::PermissionStateAllowed
? kOriginInfoPermissionChangedAllowedHistogram
: kOriginInfoPermissionChangedBlockedHistogram,
type);
break;
}
}
void RecordPermissionToogled() {
base::RecordAction(
base::UserMetricsAction(kPermissionEventUserActionHistogram));
}