blob: 28d216095fdfed582a939e16e81482babd2f3309 [file] [log] [blame]
// 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.
#include "components/permissions/android/android_permission_util.h"
#include "base/android/jni_array.h"
#include "components/permissions/android/jni_headers/AndroidPermissionRequester_jni.h"
#include "components/permissions/android/jni_headers/PermissionUtil_jni.h"
#include "components/permissions/permission_uma_util.h"
#include "content/public/browser/web_contents.h"
#include "ui/android/window_android.h"
namespace permissions {
void AppendRequiredAndroidPermissionsForContentSetting(
ContentSettingsType content_settings_type,
std::vector<std::string>* out) {
JNIEnv* env = base::android::AttachCurrentThread();
base::android::AppendJavaStringArrayToStringVector(
env,
Java_PermissionUtil_getRequiredAndroidPermissionsForContentSetting(
env, static_cast<int>(content_settings_type)),
out);
}
void AppendOptionalAndroidPermissionsForContentSetting(
ContentSettingsType content_settings_type,
std::vector<std::string>* out) {
JNIEnv* env = base::android::AttachCurrentThread();
base::android::AppendJavaStringArrayToStringVector(
env,
Java_PermissionUtil_getOptionalAndroidPermissionsForContentSetting(
env, static_cast<int>(content_settings_type)),
out);
}
bool HasRequiredAndroidPermissionsForContentSetting(
ui::WindowAndroid* window_android,
ContentSettingsType content_settings_type) {
JNIEnv* env = base::android::AttachCurrentThread();
return Java_AndroidPermissionRequester_hasRequiredAndroidPermissionsForContentSetting(
env, window_android->GetJavaObject(),
static_cast<int>(content_settings_type));
}
PermissionRepromptState ShouldRepromptUserForPermissions(
content::WebContents* web_contents,
const std::vector<ContentSettingsType>& content_settings_types) {
if (!web_contents)
return PermissionRepromptState::kCannotShow;
auto* window_android = web_contents->GetNativeView()->GetWindowAndroid();
if (!window_android)
return PermissionRepromptState::kCannotShow;
for (ContentSettingsType content_settings_type : content_settings_types) {
if (!HasRequiredAndroidPermissionsForContentSetting(
window_android, content_settings_type)) {
PermissionUmaUtil::RecordMissingPermissionInfobarShouldShow(
true, content_settings_types);
return PermissionRepromptState::kShow;
}
}
permissions::PermissionUmaUtil::RecordMissingPermissionInfobarShouldShow(
false, content_settings_types);
return PermissionRepromptState::kNoNeed;
}
bool DoesAppLevelSettingsAllowSiteNotifications() {
JNIEnv* env = base::android::AttachCurrentThread();
return Java_PermissionUtil_doesAppLevelSettingsAllowSiteNotifications(env);
}
bool AreAppLevelNotificationsEnabled() {
JNIEnv* env = base::android::AttachCurrentThread();
return Java_PermissionUtil_areAppLevelNotificationsEnabled(env);
}
} // namespace permissions