Index: base/android/jni_android.h |
diff --git a/base/android/jni_android.h b/base/android/jni_android.h |
index faf53b7400bbdecc305db289f470f05f70ab6251..b5e55263e0e6e0fbdc3c951361b663351f2fc748 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 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. |
+BASE_EXPORT void InitReplacementClassLoader( |
+ JNIEnv* env, |
+ const JavaRef<jobject>& class_loader); |
+ |
// 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: |