// 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 "base/android/token_android.h" #include "base/numerics/safe_conversions.h" #include "build/robolectric_buildflags.h" #if BUILDFLAG(IS_ROBOLECTRIC) #include "base/base_robolectric_jni/Token_jni.h" // nogncheck #else #include "base/base_jni/Token_jni.h" #endif namespace base { namespace android { ScopedJavaLocalRef TokenAndroid::Create(JNIEnv* env, const base::Token& token) { return Java_Token_Constructor(env, static_cast(token.high()), static_cast(token.low())); } base::Token TokenAndroid::FromJavaToken(JNIEnv* env, const JavaRef& j_token) { const uint64_t high = static_cast(Java_Token_getHigh(env, j_token)); const uint64_t low = static_cast(Java_Token_getLow(env, j_token)); return base::Token(high, low); } ScopedJavaLocalRef TokenAndroid::ToJavaArrayOfTokens( JNIEnv* env, base::span> tokens) { ScopedJavaLocalRef token_clazz = jni_zero::GetClass(env, "org/chromium/base/Token"); jobjectArray joa = env->NewObjectArray(checked_cast(tokens.size()), token_clazz.obj(), nullptr); jni_zero::CheckException(env); for (size_t i = 0; i < tokens.size(); i++) { ScopedJavaLocalRef token; if (tokens[i]) { token = TokenAndroid::Create(env, *tokens[i]); } env->SetObjectArrayElement(joa, static_cast(i), token.obj()); } return ScopedJavaLocalRef(env, joa); } static ScopedJavaLocalRef JNI_Token_CreateRandom(JNIEnv* env) { return TokenAndroid::Create(env, base::Token::CreateRandom()); } } // namespace android } // namespace base