Chromium Code Reviews| 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 |