chromium/ios/web/public/permissions/permissions.h

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_WEB_PUBLIC_PERMISSIONS_PERMISSIONS_H_
#define IOS_WEB_PUBLIC_PERMISSIONS_PERMISSIONS_H_

#import <Foundation/Foundation.h>

namespace web {

// Enum based on `WKPermissionDecision` to specify the possible permission
// decisions for device resource access.
typedef NS_ENUM(NSInteger, PermissionDecision) {
  PermissionDecisionShowDefaultPrompt,
  PermissionDecisionGrant,
  PermissionDecisionDeny,
};

// Callback that processes user's permission for a web state to asks the user
// the decision to access certain permissions on the device.
using WebStatePermissionDecisionHandler = void (^)(PermissionDecision decision);

// Enum specifying different data or device hardwares that the app/site needs
// access permissions to.
typedef NS_ENUM(NSUInteger, Permission) {
  PermissionCamera = 0,
  PermissionMicrophone,
};

// Enum specifying whether a subject of permission is accessible and allowed.
typedef NS_ENUM(NSUInteger, PermissionState) {
  // The device has not granted the site access to the requested permission.
  // When this is the state of a given permission, the app is unable to change
  // it to ALLOWED or BLOCKED.
  PermissionStateNotAccessible = 0,
  // The site has access to the requested permission, but the user has disabled
  // or blocked the subject of permission so it cannot be used.
  PermissionStateBlocked,
  // The site has access to the requested permission and is able to use it when
  // needed.
  PermissionStateAllowed,
};

}  // namespace web

#endif  // IOS_WEB_PUBLIC_PERMISSIONS_PERMISSIONS_H_