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..45fffd14f81091dbc556a6374b5893ae726b8e9b 100644 |
--- a/base/android/base_jni_onload.cc |
+++ b/base/android/base_jni_onload.cc |
@@ -5,59 +5,43 @@ |
#include "base/android/base_jni_onload.h" |
#include "base/android/jni_android.h" |
-#include "base/android/jni_onload_delegate.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() { |
- 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)) |
nyquist
2015/02/20 19:45:16
Is there a reason why we don't pop_back() before r
michaelbai
2015/02/20 19:59:20
Thanks, fixed it
michaelbai
2015/02/20 20:11:13
Actually, callbacks has been copied, I don't think
|
+ return false; |
} |
+ callbacks.pop_back(); |
+ 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) { |
+ 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 |