#include "weblayer/browser/android/permission_request_utils.h"
#include <algorithm>
#include "base/android/jni_android.h"
#include "base/android/jni_array.h"
#include "content/public/browser/web_contents.h"
#include "ui/android/window_android.h"
#include "weblayer/browser/java/jni/PermissionRequestUtils_jni.h"
namespace weblayer {
void RequestAndroidPermissions(
content::WebContents* web_contents,
const std::vector<ContentSettingsType>& content_settings_types,
PermissionsUpdatedCallback callback) {
if (!web_contents) {
std::move(callback).Run(false);
return;
}
auto* window = web_contents->GetTopLevelNativeWindow();
if (!window) {
std::move(callback).Run(false);
return;
}
std::vector<int> content_settings_ints;
for (auto type : content_settings_types)
content_settings_ints.push_back(static_cast<int>(type));
Java_PermissionRequestUtils_requestPermission(
base::android::AttachCurrentThread(), window->GetJavaObject(),
reinterpret_cast<jlong>(
new PermissionsUpdatedCallback(std::move(callback))),
base::android::ToJavaIntArray(base::android::AttachCurrentThread(),
content_settings_ints));
}
void JNI_PermissionRequestUtils_OnResult(JNIEnv* env,
jlong callback_ptr,
jboolean result) {
auto* callback = reinterpret_cast<PermissionsUpdatedCallback*>(callback_ptr);
std::move(*callback).Run(result);
delete callback;
}
}