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 },