1 // Copyright 2024 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef BASE_ANDROID_TOKEN_ANDROID_H_ 6 #define BASE_ANDROID_TOKEN_ANDROID_H_ 7 8 #include <jni.h> 9 10 #include <optional> 11 12 #include "base/android/scoped_java_ref.h" 13 #include "base/base_export.h" 14 #include "base/containers/span.h" 15 #include "base/token.h" 16 17 namespace base::android { 18 19 class BASE_EXPORT TokenAndroid { 20 public: 21 // Create a Java Token with the same value as `token`. 22 static ScopedJavaLocalRef<jobject> Create(JNIEnv* env, 23 const base::Token& token); 24 25 // Creates a Token from `j_token`. 26 static base::Token FromJavaToken(JNIEnv* env, 27 const JavaRef<jobject>& j_token); 28 29 TokenAndroid() = delete; 30 TokenAndroid(const TokenAndroid&) = delete; 31 TokenAndroid& operator=(const TokenAndroid&) = delete; 32 }; 33 34 } // namespace base::android 35 36 namespace jni_zero { 37 template <> 38 inline base::Token FromJniType<base::Token>(JNIEnv* env, 39 const JavaRef<jobject>& j_object) { 40 return base::android::TokenAndroid::FromJavaToken(env, j_object); 41 } 42 template <> 43 inline ScopedJavaLocalRef<jobject> ToJniType<base::Token>( 44 JNIEnv* env, 45 const base::Token& token) { 46 return base::android::TokenAndroid::Create(env, token); 47 } 48 } // namespace jni_zero 49 50 #endif // BASE_ANDROID_TOKEN_ANDROID_H_ 51