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