xref: /aosp_15_r20/external/cronet/base/android/callback_android.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2016 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 #include "base/android/callback_android.h"
6 
7 #include "base/android/jni_android.h"
8 #include "base/android/jni_array.h"
9 #include "base/android/jni_string.h"
10 #include "base/android/scoped_java_ref.h"
11 #include "base/time/time.h"
12 #include "base/types/optional_ref.h"
13 #include "build/robolectric_buildflags.h"
14 
15 #if BUILDFLAG(IS_ROBOLECTRIC)
16 #include "base/base_robolectric_jni/Callback_jni.h"  // nogncheck
17 #else
18 #include "base/base_jni/Callback_jni.h"
19 #endif
20 
21 namespace base {
22 namespace android {
23 
RunObjectCallbackAndroid(const JavaRef<jobject> & callback,const JavaRef<jobject> & arg)24 void RunObjectCallbackAndroid(const JavaRef<jobject>& callback,
25                               const JavaRef<jobject>& arg) {
26   Java_Helper_onObjectResultFromNative(AttachCurrentThread(), callback, arg);
27 }
28 
RunBooleanCallbackAndroid(const JavaRef<jobject> & callback,bool arg)29 void RunBooleanCallbackAndroid(const JavaRef<jobject>& callback, bool arg) {
30   Java_Helper_onBooleanResultFromNative(AttachCurrentThread(), callback,
31                                         static_cast<jboolean>(arg));
32 }
33 
RunIntCallbackAndroid(const JavaRef<jobject> & callback,int32_t arg)34 void RunIntCallbackAndroid(const JavaRef<jobject>& callback, int32_t arg) {
35   Java_Helper_onIntResultFromNative(AttachCurrentThread(), callback, arg);
36 }
37 
RunLongCallbackAndroid(const JavaRef<jobject> & callback,int64_t arg)38 void RunLongCallbackAndroid(const JavaRef<jobject>& callback, int64_t arg) {
39   Java_Helper_onLongResultFromNative(AttachCurrentThread(), callback, arg);
40 }
41 
RunTimeCallbackAndroid(const JavaRef<jobject> & callback,base::Time time)42 void RunTimeCallbackAndroid(const JavaRef<jobject>& callback, base::Time time) {
43   Java_Helper_onTimeResultFromNative(AttachCurrentThread(), callback,
44                                      time.InMillisecondsSinceUnixEpoch());
45 }
46 
RunStringCallbackAndroid(const JavaRef<jobject> & callback,const std::string & arg)47 void RunStringCallbackAndroid(const JavaRef<jobject>& callback,
48                               const std::string& arg) {
49   JNIEnv* env = AttachCurrentThread();
50   ScopedJavaLocalRef<jstring> java_string = ConvertUTF8ToJavaString(env, arg);
51   Java_Helper_onObjectResultFromNative(env, callback, java_string);
52 }
53 
RunOptionalStringCallbackAndroid(const JavaRef<jobject> & callback,base::optional_ref<const std::string> optional_string_arg)54 void RunOptionalStringCallbackAndroid(
55     const JavaRef<jobject>& callback,
56     base::optional_ref<const std::string> optional_string_arg) {
57   JNIEnv* env = AttachCurrentThread();
58   if (optional_string_arg.has_value()) {
59     Java_Helper_onOptionalStringResultFromNative(
60         env, callback, true,
61         ConvertUTF8ToJavaString(env, optional_string_arg.value()));
62   } else {
63     Java_Helper_onOptionalStringResultFromNative(
64         env, callback, false, ConvertUTF8ToJavaString(env, std::string()));
65   }
66 }
67 
RunByteArrayCallbackAndroid(const JavaRef<jobject> & callback,const std::vector<uint8_t> & arg)68 void RunByteArrayCallbackAndroid(const JavaRef<jobject>& callback,
69                                  const std::vector<uint8_t>& arg) {
70   JNIEnv* env = AttachCurrentThread();
71   ScopedJavaLocalRef<jbyteArray> j_bytes = ToJavaByteArray(env, arg);
72   Java_Helper_onObjectResultFromNative(env, callback, j_bytes);
73 }
74 
RunRunnableAndroid(const JavaRef<jobject> & runnable)75 void RunRunnableAndroid(const JavaRef<jobject>& runnable) {
76   Java_Helper_runRunnable(AttachCurrentThread(), runnable);
77 }
78 
79 }  // namespace android
80 }  // namespace base
81