// 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. #ifndef BASE_ANDROID_BINDER_BOX_H_ #define BASE_ANDROID_BINDER_BOX_H_ #include #include #include "base/android/binder.h" #include "base/android/scoped_java_ref.h" #include "base/base_export.h" namespace base::android { // Creates a new binder box containing `binders` and returns a Java reference to // it. The Java reference (which itself is an android.os.IBinder) may be passed // to another process and unpacked there by UnpackBinderBox(). // // The point of this thing is to conveniently pass native binders through Java // code (e.g. across Java AIDL) without actually taking Java references to them. // This is desirable because by design AIBinder_toJavaBinder actually leaks // IBinder references for an indeterminate period of time, which is unacceptable // for native binder users who want deterministic control of their binder's // refcounts. BASE_EXPORT ScopedJavaLocalRef PackBinderBox( JNIEnv* env, std::vector binders); // Retrieves a collection of binders stashed in a binder box. BASE_EXPORT BinderStatusOr> UnpackBinderBox( JNIEnv* env, const JavaRef& box); } // namespace base::android #endif // BASE_ANDROID_BINDER_BOX_H_