Index: base/android/jni_android.h |
diff --git a/base/android/jni_android.h b/base/android/jni_android.h |
index faf53b7400bbdecc305db289f470f05f70ab6251..8f72e78c8d8d36e23848d7f88607f31362782983 100644 |
--- a/base/android/jni_android.h |
+++ b/base/android/jni_android.h |
@@ -53,6 +53,15 @@ BASE_EXPORT bool IsVMInitialized(); |
BASE_EXPORT void InitApplicationContext(JNIEnv* env, |
const JavaRef<jobject>& context); |
+// Initializes the global fallback ClassLoader used by the GetClass and |
+// LazyGetClass methods. This is needed because JNI will use the base |
+// ClassLoader when there is no Java code on the stack. The base ClassLoader |
+// doesn't know about any of the application classes and will fail to lookup |
+// anything other than system classes. |
+// The method must be called after base:: JNI registration had completed from a |
+// thread that already has access to the right ClassLoader. |
+BASE_EXPORT void InitFallbackClassLoader(JNIEnv* env); |
+ |
// Gets a global ref to the application context set with |
// InitApplicationContext(). Ownership is retained by the function - the caller |
// must NOT release it. |
@@ -66,6 +75,17 @@ const BASE_EXPORT jobject GetApplicationContext(); |
BASE_EXPORT ScopedJavaLocalRef<jclass> GetClass(JNIEnv* env, |
const char* class_name); |
+// The method will initialize |atomic_class_id| to contain a global ref to the |
+// class. And will return that ref on subsequent calls. It's the caller's |
+// responsibility to release the ref when it is no longer needed. |
+// The caller is responsible to zero-initialize |atomic_method_id|. |
+// It's fine to simultaneously call this on multiple threads referencing the |
+// same |atomic_method_id|. |
+BASE_EXPORT jclass LazyGetClass( |
+ JNIEnv* env, |
+ const char* class_name, |
+ base::subtle::AtomicWord* atomic_class_id); |
+ |
// This class is a wrapper for JNIEnv Get(Static)MethodID. |
class BASE_EXPORT MethodID { |
public: |