| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_PERMISSIONS_ANDROID_ANDROID_PERMISSION_UTIL_H_ |
| #define COMPONENTS_PERMISSIONS_ANDROID_ANDROID_PERMISSION_UTIL_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "components/content_settings/core/common/content_settings_types.h" |
| |
| namespace content { |
| class WebContents; |
| } |
| |
| namespace ui { |
| class WindowAndroid; |
| } |
| |
| namespace permissions { |
| |
| // Appends to `out` the required Android permissions associated with |
| // `content_settings_type`. |
| void AppendRequiredAndroidPermissionsForContentSetting( |
| ContentSettingsType content_settings_type, |
| std::vector<std::string>* out); |
| |
| // Appends to `out` the optional Android permissions associated with |
| // `content_settings_type`. |
| void AppendOptionalAndroidPermissionsForContentSetting( |
| ContentSettingsType content_settings_type, |
| std::vector<std::string>* out); |
| |
| // Returns whether the required Android permission for `content_settings_type` |
| // are granted. |
| bool HasRequiredAndroidPermissionsForContentSetting( |
| ui::WindowAndroid* window_android, |
| ContentSettingsType content_settings_type); |
| |
| // The states that indicate if the user should/can be re-nudged to accept |
| // permissions. In Chrome this correlates to the PermissionUpdateInfoBar. |
| enum class PermissionRepromptState { |
| // No need to show the infobar as the permissions have been already granted. |
| kNoNeed = 0, |
| // Show the the permission infobar. |
| kShow, |
| // Can't show the permission infobar due to an internal state issue like |
| // the WebContents or the AndroidWindow are not available. |
| kCannotShow, |
| }; |
| |
| PermissionRepromptState ShouldRepromptUserForPermissions( |
| content::WebContents* web_contents, |
| const std::vector<ContentSettingsType>& content_settings_types); |
| |
| // Filters the given |content_setting_types| to keep only types which are |
| // missing required Android permissions. |
| std::vector<ContentSettingsType> |
| GetContentSettingsWithMissingRequiredAndroidPermissions( |
| const std::vector<ContentSettingsType>& content_settings_types, |
| content::WebContents* web_contents); |
| |
| // Appends to `out_required_permissions` the required Android permissions, and |
| // `out_optional_permissions` the optional Android permission, associated with |
| // each content setting type in given list. |
| void AppendRequiredAndOptionalAndroidPermissionsForContentSettings( |
| const std::vector<ContentSettingsType>& content_settings_types, |
| std::vector<std::string>& out_required_permissions, |
| std::vector<std::string>& out_optional_permissions); |
| |
| // Called to check whether Chrome settings and permissions allow requesting site |
| // level notification permission. |
| bool DoesAppLevelSettingsAllowSiteNotifications(); |
| |
| // Checks if Chrome needs Location permission for using Bluetooth. |
| bool NeedsLocationPermissionForBluetooth(content::WebContents* web_contents); |
| |
| // Checks if Chrome needs Nearby Devices permission for using Bluetooth. |
| bool NeedsNearbyDevicesPermissionForBluetooth( |
| content::WebContents* web_contents); |
| |
| // Checks if Chrome needs Location Services to be turned on before using |
| // Bluetooth. |
| bool NeedsLocationServicesForBluetooth(); |
| |
| // Checks if Chrome can request system permissions for using Bluetooth. |
| bool CanRequestSystemPermissionsForBluetooth( |
| content::WebContents* web_contents); |
| |
| // Checks if Chrome has system permission for `content_settings_type` |
| bool HasSystemPermission(ContentSettingsType type, |
| content::WebContents* web_contents); |
| |
| // Checks if Chrome can request system permissions for `content_settings_type` |
| bool CanRequestSystemPermission(ContentSettingsType type, |
| content::WebContents* web_contents); |
| |
| // Request the needed system permissions for using Bluetooth. |
| void RequestSystemPermissionsForBluetooth(content::WebContents* web_contents); |
| |
| // Starts an activity for showing the Location Services setting page. |
| void RequestLocationServices(content::WebContents* web_contents); |
| |
| } // namespace permissions |
| |
| #endif // COMPONENTS_PERMISSIONS_ANDROID_ANDROID_PERMISSION_UTIL_H_ |