Commit c522f68d authored by Clark DuVall's avatar Clark DuVall Committed by Commit Bot

Move getAndroidPermissionsForContentSetting() to PermissionUtil

This will be needed by code in //components/permissions, and seems to
make more sense in PermissionUtil than WebsitePreferenceBridge.

Bug: 1025609
Change-Id: I86d229dc1fcf15d2dab9e0fe0bebc7bfb7ced5e4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2079546
Commit-Queue: Clark DuVall <cduvall@chromium.org>
Reviewed-by: default avatarNatalie Chouinard <chouinard@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarBalazs Engedy <engedy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#745548}
parent f635948b
...@@ -1502,12 +1502,6 @@ if (is_android) { ...@@ -1502,12 +1502,6 @@ if (is_android) {
[ "../components/content_settings/core/common/content_settings.h" ] [ "../components/content_settings/core/common/content_settings.h" ]
} }
java_cpp_enum("content_settings_type_javagen") {
sources = [
"../components/content_settings/core/common/content_settings_types.h",
]
}
java_cpp_enum("cookie_controls_mode_javagen") { java_cpp_enum("cookie_controls_mode_javagen") {
sources = sources =
[ "../components/content_settings/core/browser/cookie_settings.h" ] [ "../components/content_settings/core/browser/cookie_settings.h" ]
......
...@@ -409,7 +409,6 @@ android_library("chrome_java") { ...@@ -409,7 +409,6 @@ android_library("chrome_java") {
":vr_build_config", ":vr_build_config",
"//chrome:assist_ranker_prediction_enum_javagen", "//chrome:assist_ranker_prediction_enum_javagen",
"//chrome:content_setting_javagen", "//chrome:content_setting_javagen",
"//chrome:content_settings_type_javagen",
"//chrome:cookie_controls_mode_javagen", "//chrome:cookie_controls_mode_javagen",
"//chrome:download_enum_javagen", "//chrome:download_enum_javagen",
"//chrome:instant_apps_reasons_enum_javagen", "//chrome:instant_apps_reasons_enum_javagen",
......
...@@ -38,6 +38,7 @@ include_rules = [ ...@@ -38,6 +38,7 @@ include_rules = [
"+components/omnibox/browser/android/java", "+components/omnibox/browser/android/java",
"+components/paint_preview/browser/android/java/src/org/chromium/components/paintpreview", "+components/paint_preview/browser/android/java/src/org/chromium/components/paintpreview",
"+components/payments/content/android/java/src/org/chromium/components/payments", "+components/payments/content/android/java/src/org/chromium/components/payments",
"+components/permissions/android/java/src/org/chromium/components/permissions",
"+components/search_engines/android/java/src/org/chromium/components/search_engines", "+components/search_engines/android/java/src/org/chromium/components/search_engines",
"+components/sync/android/java/src/org/chromium/components/sync", "+components/sync/android/java/src/org/chromium/components/sync",
......
...@@ -27,6 +27,7 @@ import org.chromium.components.content_settings.ContentSettingsType; ...@@ -27,6 +27,7 @@ import org.chromium.components.content_settings.ContentSettingsType;
import org.chromium.components.location.LocationUtils; import org.chromium.components.location.LocationUtils;
import org.chromium.components.page_info.PageInfoView; import org.chromium.components.page_info.PageInfoView;
import org.chromium.components.page_info.SystemSettingsActivityRequiredListener; import org.chromium.components.page_info.SystemSettingsActivityRequiredListener;
import org.chromium.components.permissions.PermissionUtil;
import org.chromium.ui.base.AndroidPermissionDelegate; import org.chromium.ui.base.AndroidPermissionDelegate;
import org.chromium.ui.base.PermissionCallback; import org.chromium.ui.base.PermissionCallback;
...@@ -111,8 +112,8 @@ class PermissionParamsListBuilder { ...@@ -111,8 +112,8 @@ class PermissionParamsListBuilder {
} else if (!hasAndroidPermission(permission.type)) { } else if (!hasAndroidPermission(permission.type)) {
permissionParams.warningTextResource = permissionParams.warningTextResource =
R.string.page_info_android_permission_blocked; R.string.page_info_android_permission_blocked;
androidPermissions = WebsitePreferenceBridge.getAndroidPermissionsForContentSetting( androidPermissions =
permission.type); PermissionUtil.getAndroidPermissionsForContentSetting(permission.type);
} }
if (permissionParams.warningTextResource != 0) { if (permissionParams.warningTextResource != 0) {
...@@ -179,7 +180,7 @@ class PermissionParamsListBuilder { ...@@ -179,7 +180,7 @@ class PermissionParamsListBuilder {
private boolean hasAndroidPermission(int contentSettingType) { private boolean hasAndroidPermission(int contentSettingType) {
String[] androidPermissions = String[] androidPermissions =
WebsitePreferenceBridge.getAndroidPermissionsForContentSetting(contentSettingType); PermissionUtil.getAndroidPermissionsForContentSetting(contentSettingType);
if (androidPermissions == null) return true; if (androidPermissions == null) return true;
for (int i = 0; i < androidPermissions.length; i++) { for (int i = 0; i < androidPermissions.length; i++) {
if (!mPermissionDelegate.hasPermission(androidPermissions[i])) { if (!mPermissionDelegate.hasPermission(androidPermissions[i])) {
......
...@@ -14,9 +14,9 @@ import androidx.annotation.StringRes; ...@@ -14,9 +14,9 @@ import androidx.annotation.StringRes;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.metrics.WebApkUma; import org.chromium.chrome.browser.metrics.WebApkUma;
import org.chromium.chrome.browser.settings.website.WebsitePreferenceBridge;
import org.chromium.chrome.browser.webapps.WebApkActivity; import org.chromium.chrome.browser.webapps.WebApkActivity;
import org.chromium.components.content_settings.ContentSettingsType; import org.chromium.components.content_settings.ContentSettingsType;
import org.chromium.components.permissions.PermissionUtil;
import org.chromium.ui.base.PermissionCallback; import org.chromium.ui.base.PermissionCallback;
import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.modaldialog.DialogDismissalCause; import org.chromium.ui.modaldialog.DialogDismissalCause;
...@@ -49,8 +49,8 @@ public class AndroidPermissionRequester { ...@@ -49,8 +49,8 @@ public class AndroidPermissionRequester {
WindowAndroid windowAndroid, int[] contentSettingsTypes) { WindowAndroid windowAndroid, int[] contentSettingsTypes) {
SparseArray<String[]> permissionsToRequest = new SparseArray<>(); SparseArray<String[]> permissionsToRequest = new SparseArray<>();
for (int i = 0; i < contentSettingsTypes.length; i++) { for (int i = 0; i < contentSettingsTypes.length; i++) {
String[] permissions = WebsitePreferenceBridge.getAndroidPermissionsForContentSetting( String[] permissions =
contentSettingsTypes[i]); PermissionUtil.getAndroidPermissionsForContentSetting(contentSettingsTypes[i]);
if (permissions == null) continue; if (permissions == null) continue;
List<String> missingPermissions = new ArrayList<>(); List<String> missingPermissions = new ArrayList<>();
for (int j = 0; j < permissions.length; j++) { for (int j = 0; j < permissions.length; j++) {
......
...@@ -14,7 +14,6 @@ import org.chromium.components.content_settings.ContentSettingsType; ...@@ -14,7 +14,6 @@ import org.chromium.components.content_settings.ContentSettingsType;
import org.chromium.components.location.LocationUtils; import org.chromium.components.location.LocationUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -24,18 +23,6 @@ import java.util.List; ...@@ -24,18 +23,6 @@ import java.util.List;
public class WebsitePreferenceBridge { public class WebsitePreferenceBridge {
public static final String SITE_WILDCARD = "*"; public static final String SITE_WILDCARD = "*";
/** The android permissions associated with requesting location. */
private static final String[] LOCATION_PERMISSIONS = {
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION};
/** The android permissions associated with requesting access to the camera. */
private static final String[] CAMERA_PERMISSIONS = {android.Manifest.permission.CAMERA};
/** The android permissions associated with requesting access to the microphone. */
private static final String[] MICROPHONE_PERMISSIONS = {
android.Manifest.permission.RECORD_AUDIO};
/** Signifies there are no permissions associated. */
private static final String[] EMPTY_PERMISSIONS = {};
/** /**
* Interface for an object that listens to storage info is cleared callback. * Interface for an object that listens to storage info is cleared callback.
*/ */
...@@ -255,28 +242,6 @@ public class WebsitePreferenceBridge { ...@@ -255,28 +242,6 @@ public class WebsitePreferenceBridge {
return WebsitePreferenceBridgeJni.get().getAdBlockingActivated(origin); return WebsitePreferenceBridgeJni.get().getAdBlockingActivated(origin);
} }
/**
* Return the list of android permission strings for a given {@link ContentSettingsType}. If
* there is no permissions associated with the content setting, then an empty array is returned.
*
* @param contentSettingType The content setting to get the android permission for.
* @return The android permissions for the given content setting.
*/
@CalledByNative
public static String[] getAndroidPermissionsForContentSetting(int contentSettingType) {
switch (contentSettingType) {
case ContentSettingsType.GEOLOCATION:
return Arrays.copyOf(LOCATION_PERMISSIONS, LOCATION_PERMISSIONS.length);
case ContentSettingsType.MEDIASTREAM_MIC:
return Arrays.copyOf(MICROPHONE_PERMISSIONS, MICROPHONE_PERMISSIONS.length);
case ContentSettingsType.MEDIASTREAM_CAMERA:
case ContentSettingsType.AR:
return Arrays.copyOf(CAMERA_PERMISSIONS, CAMERA_PERMISSIONS.length);
default:
return EMPTY_PERMISSIONS;
}
}
@CalledByNative @CalledByNative
private static void addContentSettingExceptionToList(ArrayList<ContentSettingException> list, private static void addContentSettingExceptionToList(ArrayList<ContentSettingException> list,
int contentSettingsType, String primaryPattern, String secondaryPattern, int contentSettingsType, String primaryPattern, String secondaryPattern,
......
...@@ -2628,7 +2628,6 @@ jumbo_static_library("browser") { ...@@ -2628,7 +2628,6 @@ jumbo_static_library("browser") {
"android/preferences/prefs.h", "android/preferences/prefs.h",
"android/preferences/privacy_preferences_manager.cc", "android/preferences/privacy_preferences_manager.cc",
"android/preferences/website_preference_bridge.cc", "android/preferences/website_preference_bridge.cc",
"android/preferences/website_preference_bridge.h",
"android/profile_key_startup_accessor.cc", "android/profile_key_startup_accessor.cc",
"android/profile_key_startup_accessor.h", "android/profile_key_startup_accessor.h",
"android/profile_key_util.cc", "android/profile_key_util.cc",
......
...@@ -2,8 +2,6 @@ ...@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/android/preferences/website_preference_bridge.h"
#include <algorithm> #include <algorithm>
#include <string> #include <string>
#include <vector> #include <vector>
...@@ -1390,15 +1388,3 @@ static void JNI_WebsitePreferenceBridge_SetQuietNotificationsUiEnabled( ...@@ -1390,15 +1388,3 @@ static void JNI_WebsitePreferenceBridge_SetQuietNotificationsUiEnabled(
ProfileAndroid::FromProfileAndroid(jprofile)); ProfileAndroid::FromProfileAndroid(jprofile));
} }
} }
// static
void WebsitePreferenceBridge::GetAndroidPermissionsForContentSetting(
ContentSettingsType content_settings_type,
std::vector<std::string>* out) {
JNIEnv* env = AttachCurrentThread();
base::android::AppendJavaStringArrayToStringVector(
env,
Java_WebsitePreferenceBridge_getAndroidPermissionsForContentSetting(
env, static_cast<int>(content_settings_type)),
out);
}
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ANDROID_PREFERENCES_WEBSITE_PREFERENCE_BRIDGE_H_
#define CHROME_BROWSER_ANDROID_PREFERENCES_WEBSITE_PREFERENCE_BRIDGE_H_
#include <string>
#include <vector>
#include "components/content_settings/core/common/content_settings.h"
class WebsitePreferenceBridge {
public:
// Populate the list of corresponding Android permissions associated with the
// ContentSettingsType specified.
static void GetAndroidPermissionsForContentSetting(
ContentSettingsType content_type,
std::vector<std::string>* out);
};
#endif // CHROME_BROWSER_ANDROID_PREFERENCES_WEBSITE_PREFERENCE_BRIDGE_H_
...@@ -38,7 +38,6 @@ ...@@ -38,7 +38,6 @@
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
#include "chrome/browser/android/android_theme_resources.h" #include "chrome/browser/android/android_theme_resources.h"
#include "chrome/browser/android/preferences/website_preference_bridge.h"
#include "chrome/browser/permissions/permission_dialog_delegate.h" #include "chrome/browser/permissions/permission_dialog_delegate.h"
#include "chrome/browser/permissions/permission_update_infobar_delegate_android.h" #include "chrome/browser/permissions/permission_update_infobar_delegate_android.h"
#include "ui/android/window_android.h" #include "ui/android/window_android.h"
...@@ -572,7 +571,7 @@ bool MediaStreamDevicesController::IsUserAcceptAllowed( ...@@ -572,7 +571,7 @@ bool MediaStreamDevicesController::IsUserAcceptAllowed(
return false; return false;
std::vector<std::string> android_permissions; std::vector<std::string> android_permissions;
WebsitePreferenceBridge::GetAndroidPermissionsForContentSetting( permissions::PermissionUtil::GetAndroidPermissionsForContentSetting(
content_type, &android_permissions); content_type, &android_permissions);
for (const auto& android_permission : android_permissions) { for (const auto& android_permission : android_permissions) {
if (!window_android->HasPermission(android_permission) && if (!window_android->HasPermission(android_permission) &&
......
...@@ -10,12 +10,12 @@ ...@@ -10,12 +10,12 @@
#include "base/android/jni_array.h" #include "base/android/jni_array.h"
#include "chrome/android/chrome_jni_headers/PermissionUpdateInfoBarDelegate_jni.h" #include "chrome/android/chrome_jni_headers/PermissionUpdateInfoBarDelegate_jni.h"
#include "chrome/browser/android/android_theme_resources.h" #include "chrome/browser/android/android_theme_resources.h"
#include "chrome/browser/android/preferences/website_preference_bridge.h"
#include "chrome/browser/infobars/infobar_service.h" #include "chrome/browser/infobars/infobar_service.h"
#include "chrome/grit/chromium_strings.h" #include "chrome/grit/chromium_strings.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "components/infobars/core/infobar.h" #include "components/infobars/core/infobar.h"
#include "components/permissions/permission_uma_util.h" #include "components/permissions/permission_uma_util.h"
#include "components/permissions/permission_util.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "ui/android/window_android.h" #include "ui/android/window_android.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
...@@ -39,7 +39,7 @@ infobars::InfoBar* PermissionUpdateInfoBarDelegate::Create( ...@@ -39,7 +39,7 @@ infobars::InfoBar* PermissionUpdateInfoBarDelegate::Create(
for (ContentSettingsType content_settings_type : content_settings_types) { for (ContentSettingsType content_settings_type : content_settings_types) {
int previous_size = permissions.size(); int previous_size = permissions.size();
WebsitePreferenceBridge::GetAndroidPermissionsForContentSetting( permissions::PermissionUtil::GetAndroidPermissionsForContentSetting(
content_settings_type, &permissions); content_settings_type, &permissions);
bool has_all_permissions = true; bool has_all_permissions = true;
...@@ -105,7 +105,7 @@ PermissionUpdateInfoBarDelegate::ShouldShowPermissionInfoBar( ...@@ -105,7 +105,7 @@ PermissionUpdateInfoBarDelegate::ShouldShowPermissionInfoBar(
for (ContentSettingsType content_settings_type : content_settings_types) { for (ContentSettingsType content_settings_type : content_settings_types) {
std::vector<std::string> android_permissions; std::vector<std::string> android_permissions;
WebsitePreferenceBridge::GetAndroidPermissionsForContentSetting( permissions::PermissionUtil::GetAndroidPermissionsForContentSetting(
content_settings_type, &android_permissions); content_settings_type, &android_permissions);
for (const auto& android_permission : android_permissions) { for (const auto& android_permission : android_permissions) {
......
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
import("//build/config/jumbo.gni") import("//build/config/jumbo.gni")
import("//mojo/public/tools/bindings/mojom.gni") import("//mojo/public/tools/bindings/mojom.gni")
if (is_android) {
import("//build/config/android/rules.gni")
}
jumbo_static_library("common") { jumbo_static_library("common") {
sources = [ sources = [
...@@ -75,3 +78,9 @@ component("features") { ...@@ -75,3 +78,9 @@ component("features") {
deps = [ "//base" ] deps = [ "//base" ]
} }
if (is_android) {
java_cpp_enum("content_settings_type_javagen") {
sources = [ "content_settings_types.h" ]
}
}
...@@ -5,8 +5,10 @@ ...@@ -5,8 +5,10 @@
import("//build/config/android/rules.gni") import("//build/config/android/rules.gni")
generate_jni("jni") { generate_jni("jni") {
sources = sources = [
[ "java/src/org/chromium/components/permissions/PermissionUmaUtil.java" ] "java/src/org/chromium/components/permissions/PermissionUmaUtil.java",
"java/src/org/chromium/components/permissions/PermissionUtil.java",
]
} }
android_resources("java_resources") { android_resources("java_resources") {
...@@ -15,7 +17,12 @@ android_resources("java_resources") { ...@@ -15,7 +17,12 @@ android_resources("java_resources") {
} }
android_library("java") { android_library("java") {
sources = sources = [
[ "java/src/org/chromium/components/permissions/PermissionUmaUtil.java" ] "java/src/org/chromium/components/permissions/PermissionUmaUtil.java",
"java/src/org/chromium/components/permissions/PermissionUtil.java",
]
deps = [ "//base:base_java" ] deps = [ "//base:base_java" ]
srcjar_deps = [
"//components/content_settings/core/common:content_settings_type_javagen",
]
} }
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.components.permissions;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.components.content_settings.ContentSettingsType;
import java.util.Arrays;
/**
* A utility class for permissions.
*/
public class PermissionUtil {
/** The android permissions associated with requesting location. */
private static final String[] LOCATION_PERMISSIONS = {
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION};
/** The android permissions associated with requesting access to the camera. */
private static final String[] CAMERA_PERMISSIONS = {android.Manifest.permission.CAMERA};
/** The android permissions associated with requesting access to the microphone. */
private static final String[] MICROPHONE_PERMISSIONS = {
android.Manifest.permission.RECORD_AUDIO};
/** Signifies there are no permissions associated. */
private static final String[] EMPTY_PERMISSIONS = {};
private PermissionUtil() {}
/**
* Return the list of android permission strings for a given {@link ContentSettingsType}. If
* there is no permissions associated with the content setting, then an empty array is returned.
*
* @param contentSettingType The content setting to get the android permission for.
* @return The android permissions for the given content setting.
*/
@CalledByNative
public static String[] getAndroidPermissionsForContentSetting(int contentSettingType) {
switch (contentSettingType) {
case ContentSettingsType.GEOLOCATION:
return Arrays.copyOf(LOCATION_PERMISSIONS, LOCATION_PERMISSIONS.length);
case ContentSettingsType.MEDIASTREAM_MIC:
return Arrays.copyOf(MICROPHONE_PERMISSIONS, MICROPHONE_PERMISSIONS.length);
case ContentSettingsType.MEDIASTREAM_CAMERA:
case ContentSettingsType.AR:
return Arrays.copyOf(CAMERA_PERMISSIONS, CAMERA_PERMISSIONS.length);
default:
return EMPTY_PERMISSIONS;
}
}
}
...@@ -8,6 +8,11 @@ ...@@ -8,6 +8,11 @@
#include "build/build_config.h" #include "build/build_config.h"
#include "content/public/browser/permission_type.h" #include "content/public/browser/permission_type.h"
#if defined(OS_ANDROID)
#include "base/android/jni_array.h"
#include "components/permissions/android/jni/PermissionUtil_jni.h"
#endif
using content::PermissionType; using content::PermissionType;
namespace permissions { namespace permissions {
...@@ -198,4 +203,18 @@ bool PermissionUtil::IsPermission(ContentSettingsType type) { ...@@ -198,4 +203,18 @@ bool PermissionUtil::IsPermission(ContentSettingsType type) {
} }
} }
#if defined(OS_ANDROID)
// static
void PermissionUtil::GetAndroidPermissionsForContentSetting(
ContentSettingsType content_settings_type,
std::vector<std::string>* out) {
JNIEnv* env = base::android::AttachCurrentThread();
base::android::AppendJavaStringArrayToStringVector(
env,
Java_PermissionUtil_getAndroidPermissionsForContentSetting(
env, static_cast<int>(content_settings_type)),
out);
}
#endif
} // namespace permissions } // namespace permissions
...@@ -6,8 +6,10 @@ ...@@ -6,8 +6,10 @@
#define COMPONENTS_PERMISSIONS_PERMISSION_UTIL_H_ #define COMPONENTS_PERMISSIONS_PERMISSION_UTIL_H_
#include <string> #include <string>
#include <vector>
#include "base/macros.h" #include "base/macros.h"
#include "build/build_config.h"
#include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings.h"
#include "components/content_settings/core/common/content_settings_types.h" #include "components/content_settings/core/common/content_settings_types.h"
#include "components/permissions/permission_request.h" #include "components/permissions/permission_request.h"
...@@ -56,6 +58,14 @@ class PermissionUtil { ...@@ -56,6 +58,14 @@ class PermissionUtil {
// PermissionManager. // PermissionManager.
static bool IsPermission(ContentSettingsType type); static bool IsPermission(ContentSettingsType type);
#if defined(OS_ANDROID)
// Populate the list of corresponding Android permissions associated with the
// ContentSettingsType specified.
static void GetAndroidPermissionsForContentSetting(
ContentSettingsType content_type,
std::vector<std::string>* out);
#endif
private: private:
DISALLOW_IMPLICIT_CONSTRUCTORS(PermissionUtil); DISALLOW_IMPLICIT_CONSTRUCTORS(PermissionUtil);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment