Commit 0fb835f0 authored by michaelbai's avatar michaelbai Committed by Commit bot

refactoring Android Webview JNI_OnLoad interface to make it consistent with others.

BUG=464008

Review URL: https://codereview.chromium.org/975253002

Cr-Commit-Position: refs/heads/master@{#320174}
parent 21a9d207
...@@ -4,22 +4,23 @@ ...@@ -4,22 +4,23 @@
#include "android_webview/lib/main/webview_jni_onload.h" #include "android_webview/lib/main/webview_jni_onload.h"
#include "base/android/jni_android.h" #include "base/android/jni_android.h"
#include "base/bind.h"
#include "content/public/app/content_jni_onload.h"
// This is called by the VM when the shared library is first loaded. // This is called by the VM when the shared library is first loaded.
// Most of the initialization is done in LibraryLoadedOnMainThread(), not here. // Most of the initialization is done in LibraryLoadedOnMainThread(), not here.
JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) { JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
// WebView uses native JNI exports; disable manual JNI registration to // WebView uses native JNI exports; disable manual JNI registration because
// improve startup peformance. // we don't have a good way to detect the JNI registrations which is called,
// outside of OnJNIOnLoadRegisterJNI code path.
base::android::DisableManualJniRegistration(); base::android::DisableManualJniRegistration();
std::vector<base::android::RegisterCallback> register_callbacks; if (base::android::IsManualJniRegistrationDisabled()) {
register_callbacks.push_back(base::Bind(&android_webview::RegisterJNI)); base::android::InitVM(vm);
std::vector<base::android::InitCallback> init_callbacks; } else {
init_callbacks.push_back(base::Bind(&android_webview::Init)); if (android_webview::OnJNIOnLoadRegisterJNI(vm))
if (!content::android::OnJNIOnLoadRegisterJNI(vm, register_callbacks) || return -1;
!content::android::OnJNIOnLoadInit(init_callbacks)) { }
if (!android_webview::OnJNIOnLoadInit()) {
return -1; return -1;
} }
return JNI_VERSION_1_4; return JNI_VERSION_1_4;
......
...@@ -8,8 +8,10 @@ ...@@ -8,8 +8,10 @@
#include "android_webview/native/android_webview_jni_registrar.h" #include "android_webview/native/android_webview_jni_registrar.h"
#include "base/android/jni_android.h" #include "base/android/jni_android.h"
#include "base/android/jni_registrar.h" #include "base/android/jni_registrar.h"
#include "base/bind.h"
#include "components/navigation_interception/component_jni_registrar.h" #include "components/navigation_interception/component_jni_registrar.h"
#include "components/web_contents_delegate_android/component_jni_registrar.h" #include "components/web_contents_delegate_android/component_jni_registrar.h"
#include "content/public/app/content_jni_onload.h"
#include "content/public/app/content_main.h" #include "content/public/app/content_main.h"
#include "url/url_util.h" #include "url/url_util.h"
...@@ -25,8 +27,6 @@ static base::android::RegistrationMethod ...@@ -25,8 +27,6 @@ static base::android::RegistrationMethod
web_contents_delegate_android::RegisterWebContentsDelegateAndroidJni }, web_contents_delegate_android::RegisterWebContentsDelegateAndroidJni },
}; };
} // namespace
bool RegisterJNI(JNIEnv* env) { bool RegisterJNI(JNIEnv* env) {
// Register JNI for components we depend on. // Register JNI for components we depend on.
if (!RegisterNativeMethods( if (!RegisterNativeMethods(
...@@ -49,4 +49,18 @@ bool Init() { ...@@ -49,4 +49,18 @@ bool Init() {
return true; return true;
} }
} // namespace
bool OnJNIOnLoadRegisterJNI(JavaVM* vm) {
std::vector<base::android::RegisterCallback> register_callbacks;
register_callbacks.push_back(base::Bind(&RegisterJNI));
return content::android::OnJNIOnLoadRegisterJNI(vm, register_callbacks);
}
bool OnJNIOnLoadInit() {
std::vector<base::android::InitCallback> init_callbacks;
init_callbacks.push_back(base::Bind(&Init));
return content::android::OnJNIOnLoadInit(init_callbacks);
}
} // android_webview } // android_webview
...@@ -9,8 +9,11 @@ ...@@ -9,8 +9,11 @@
namespace android_webview { namespace android_webview {
bool RegisterJNI(JNIEnv* env); // TODO(michaelbai): remove this once we no longer need to be able to run
bool Init(); // webview with manual JNI registration
bool OnJNIOnLoadRegisterJNI(JavaVM* vm);
bool OnJNIOnLoadInit();
} // android_webview } // android_webview
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment