Index: base/android/jni_android.cc |
diff --git a/base/android/jni_android.cc b/base/android/jni_android.cc |
index 02e264c05703494444a23bae5fabc8875e7ec1f2..a1fb09df5b197cbede3c1b19311c73e5349590b9 100644 |
--- a/base/android/jni_android.cc |
+++ b/base/android/jni_android.cc |
@@ -11,6 +11,7 @@ |
#include "base/android/build_info.h" |
#include "base/android/jni_string.h" |
#include "base/android/jni_utils.h" |
+#include "base/android/library_loader/library_loader_hooks.h" |
#include "base/debug/debugging_flags.h" |
#include "base/lazy_instance.h" |
#include "base/logging.h" |
@@ -21,7 +22,8 @@ using base::android::GetClass; |
using base::android::MethodID; |
using base::android::ScopedJavaLocalRef; |
-bool g_disable_manual_jni_registration = false; |
+base::android::JniRegistrationType g_jni_registration_type = |
+ base::android::UNINITIALIZED_JNI_REGISTRATION; |
JavaVM* g_jvm = NULL; |
base::LazyInstance<base::android::ScopedJavaGlobalRef<jobject> >::Leaky |
@@ -38,13 +40,30 @@ base::LazyInstance<base::ThreadLocalPointer<void>>::Leaky |
namespace base { |
namespace android { |
-bool IsManualJniRegistrationDisabled() { |
- return g_disable_manual_jni_registration; |
+void InitJniRegistrationType(JNIEnv* env, bool force_registration) { |
Torne
2017/01/12 13:48:06
I assume you have force_registration here to handl
|
+ if (force_registration) { |
+ g_jni_registration_type = ALL_JNI_REGISTRATION; |
+ return; |
+ } |
+ DCHECK(g_jni_registration_type == UNINITIALIZED_JNI_REGISTRATION); |
+ switch (GetLibraryProcessType(env)) { |
+ case PROCESS_WEBVIEW: |
+ case PROCESS_WEBVIEW_CHILD: |
+ g_jni_registration_type = NO_JNI_REGISTRATION; |
+ break; |
+ case PROCESS_BROWSER: |
+ g_jni_registration_type = ALL_JNI_REGISTRATION; |
+ break; |
+ case PROCESS_CHILD: |
+ g_jni_registration_type = SELECTIVE_JNI_REGISTRATION; |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
} |
-void DisableManualJniRegistration() { |
- DCHECK(!g_disable_manual_jni_registration); |
- g_disable_manual_jni_registration = true; |
+JniRegistrationType GetJniRegistrationType() { |
+ return g_jni_registration_type; |
} |
JNIEnv* AttachCurrentThread() { |