// Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include #include #include "base/android/jni_string.h" #include "base/base_export.h" #include "base/files/file_path.h" #include "third_party/jni_zero/jni_zero.h" namespace jni_zero { template <> BASE_EXPORT std::string FromJniType( JNIEnv* env, const JavaRef& input) { return base::android::ConvertJavaStringToUTF8(env, input); } template <> BASE_EXPORT ScopedJavaLocalRef ToJniType( JNIEnv* env, const std::string& input) { return base::android::ConvertUTF8ToJavaString(env, input); } template <> BASE_EXPORT ScopedJavaLocalRef ToJniType( JNIEnv* env, const char* const& input) { return base::android::ConvertUTF8ToJavaString(env, input); } template <> BASE_EXPORT std::u16string FromJniType( JNIEnv* env, const JavaRef& input) { return base::android::ConvertJavaStringToUTF16(env, input); } template <> BASE_EXPORT ScopedJavaLocalRef ToJniType( JNIEnv* env, const std::u16string& input) { return base::android::ConvertUTF16ToJavaString(env, input); } template <> BASE_EXPORT ScopedJavaLocalRef ToJniType( JNIEnv* env, const std::u16string_view& input) { return base::android::ConvertUTF16ToJavaString(env, input); } template <> BASE_EXPORT base::FilePath FromJniType( JNIEnv* env, const JavaRef& input) { return base::FilePath(base::android::ConvertJavaStringToUTF8(env, input)); } template <> BASE_EXPORT ScopedJavaLocalRef ToJniType( JNIEnv* env, const base::FilePath& input) { return base::android::ConvertUTF8ToJavaString(env, input.value()); } // Specialized conversions for std::optional> since jstring // is a nullable type but std::basic_string is not. template <> BASE_EXPORT std::optional FromJniType, jstring>( JNIEnv* env, const JavaRef& j_string) { if (!j_string) { return std::nullopt; } return std::optional( FromJniType(env, j_string)); } template <> BASE_EXPORT std::optional FromJniType, jstring>( JNIEnv* env, const JavaRef& j_string) { if (!j_string) { return std::nullopt; } return std::optional( FromJniType(env, j_string)); } } // namespace jni_zero