Ensure the plugin's native code is never called with an invalid NPP pointer.
diff --git a/samples/BrowserPlugin/jni/jni-bridge.cpp b/samples/BrowserPlugin/jni/jni-bridge.cpp
index bcca7d0..02f768b 100644
--- a/samples/BrowserPlugin/jni/jni-bridge.cpp
+++ b/samples/BrowserPlugin/jni/jni-bridge.cpp
@@ -33,6 +33,18 @@
return NULL;
}
+static jboolean javaInit(JNIEnv* env, jobject thiz, jint npp) {
+ SurfaceSubPlugin* obj = getPluginObject(npp);
+
+ if (obj) {
+ jobject globalObject = env->NewGlobalRef(thiz);
+ obj->setJavaInterface(globalObject);
+ return true;
+ } else {
+ return false;
+ }
+}
+
static void surfaceCreated(JNIEnv* env, jobject thiz, jint npp, jobject surface) {
SurfaceSubPlugin* obj = getPluginObject(npp);
jobject globalSurface = env->NewGlobalRef(surface);
@@ -70,6 +82,7 @@
* JNI registration.
*/
static JNINativeMethod gJavaSamplePluginMethods[] = {
+ { "nativeJavaInit", "(I)Z", (void*) javaInit },
{ "nativeSurfaceCreated", "(ILandroid/view/View;)V", (void*) surfaceCreated },
{ "nativeSurfaceChanged", "(IIII)V", (void*) surfaceChanged },
{ "nativeSurfaceDestroyed", "(I)V", (void*) surfaceDestroyed },