Index: base/android/base_jni_onload.cc |
diff --git a/base/android/base_jni_onload.cc b/base/android/base_jni_onload.cc |
index ae64120902741e28a83f13f4f7da2e52e946bdd5..c3a65d40cb1740eb5c784fb9441aa130cbdd7819 100644 |
--- a/base/android/base_jni_onload.cc |
+++ b/base/android/base_jni_onload.cc |
@@ -5,59 +5,51 @@ |
#include "base/android/base_jni_onload.h" |
#include "base/android/jni_android.h" |
-#include "base/android/jni_onload_delegate.h" |
+#include "base/android/jni_utils.h" |
#include "base/android/library_loader/library_loader_hooks.h" |
+#include "base/bind.h" |
namespace base { |
namespace android { |
namespace { |
-// The JNIOnLoadDelegate implementation in base. |
-class BaseJNIOnLoadDelegate : public JNIOnLoadDelegate { |
- public: |
- bool RegisterJNI(JNIEnv* env) override; |
- bool Init() override; |
-}; |
- |
-bool BaseJNIOnLoadDelegate::RegisterJNI(JNIEnv* env) { |
+bool RegisterJNI(JNIEnv* env) { |
return RegisterLibraryLoaderEntryHook(env); |
} |
-bool BaseJNIOnLoadDelegate::Init() { |
+bool Init() { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ base::android::InitReplacementClassLoader(env, |
+ base::android::GetClassLoader(env)); |
return true; |
} |
} // namespace |
-bool OnJNIOnLoad(JavaVM* vm, |
- std::vector<JNIOnLoadDelegate*>* delegates) { |
+bool OnJNIOnLoadRegisterJNI(JavaVM* vm, |
+ std::vector<RegisterCallback> callbacks) { |
base::android::InitVM(vm); |
JNIEnv* env = base::android::AttachCurrentThread(); |
- BaseJNIOnLoadDelegate delegate; |
- delegates->push_back(&delegate); |
- bool ret = true; |
- for (std::vector<JNIOnLoadDelegate*>::reverse_iterator i = |
- delegates->rbegin(); i != delegates->rend(); ++i) { |
- if (!(*i)->RegisterJNI(env)) { |
- ret = false; |
- break; |
- } |
+ callbacks.push_back(base::Bind(&RegisterJNI)); |
+ for (std::vector<RegisterCallback>::reverse_iterator i = |
+ callbacks.rbegin(); i != callbacks.rend(); ++i) { |
+ if (!i->Run(env)) |
+ return false; |
} |
+ return true; |
+} |
- if (ret) { |
- for (std::vector<JNIOnLoadDelegate*>::reverse_iterator i = |
- delegates->rbegin(); i != delegates->rend(); ++i) { |
- if (!(*i)->Init()) { |
- ret = false; |
- break; |
- } |
- } |
+bool OnJNIOnLoadInit(std::vector<InitCallback> callbacks) { |
+ callbacks.push_back(base::Bind(&Init)); |
+ for (std::vector<InitCallback>::reverse_iterator i = |
+ callbacks.rbegin(); i != callbacks.rend(); ++i) { |
+ if (!i->Run()) |
+ return false; |
} |
- delegates->pop_back(); |
- return ret; |
+ return true; |
} |
} // namespace android |