Updating sample plugin to test java class loading.
diff --git a/samples/BrowserPlugin/jni/background/BackgroundPlugin.cpp b/samples/BrowserPlugin/jni/background/BackgroundPlugin.cpp
index af518a9..0f90291 100644
--- a/samples/BrowserPlugin/jni/background/BackgroundPlugin.cpp
+++ b/samples/BrowserPlugin/jni/background/BackgroundPlugin.cpp
@@ -38,6 +38,7 @@
extern ANPLogInterfaceV0 gLogI;
extern ANPPaintInterfaceV0 gPaintI;
extern ANPSurfaceInterfaceV0 gSurfaceI;
+extern ANPSystemInterfaceV0 gSystemI;
extern ANPTypefaceInterfaceV0 gTypefaceI;
#define ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0]))
@@ -66,6 +67,7 @@
test_bitmaps(); // android bitmaps
test_domAccess();
test_javascript();
+ test_loadJavaClass();
}
BackgroundPlugin::~BackgroundPlugin() {
@@ -421,3 +423,39 @@
// free the memory allocated within the browser
browser->memfree(stringMem);
}
+
+///////////////////////////////////////////////////////////////////////////////
+// Load Java Classes Tests
+///////////////////////////////////////////////////////////////////////////////
+
+void BackgroundPlugin::test_loadJavaClass() {
+
+ JNIEnv* env = NULL;
+ if (gVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
+ gLogI.log(inst(), kError_ANPLogType, " ---- LoadJavaTest: failed to get env");
+ return;
+ }
+
+ const char* className = "com.android.sampleplugin.BackgroundTest";
+ jclass backgroundClass = gSystemI.loadJavaClass(inst(), className);
+
+ if(!backgroundClass) {
+ gLogI.log(inst(), kError_ANPLogType, " ---- LoadJavaTest: failed to load class");
+ return;
+ }
+
+ jmethodID constructor = env->GetMethodID(backgroundClass, "<init>", "()V");
+ jmethodID addMethod = env->GetMethodID(backgroundClass, "addInt", "(II)I");
+ jobject backgroundObject = env->NewObject(backgroundClass, constructor);
+
+ if(!backgroundObject) {
+ gLogI.log(inst(), kError_ANPLogType, " ---- LoadJavaTest: failed to construct object");
+ return;
+ }
+
+ jint result = env->CallIntMethod(backgroundObject, addMethod, 2, 2);
+
+ if (result != 4) {
+ gLogI.log(inst(), kError_ANPLogType, " ---- LoadJavaTest: invalid result (%d != 4)", result);
+ }
+}
diff --git a/samples/BrowserPlugin/jni/background/BackgroundPlugin.h b/samples/BrowserPlugin/jni/background/BackgroundPlugin.h
index d370810..0e8f6f7 100644
--- a/samples/BrowserPlugin/jni/background/BackgroundPlugin.h
+++ b/samples/BrowserPlugin/jni/background/BackgroundPlugin.h
@@ -62,6 +62,7 @@
void test_bitmap_transparency(const ANPEvent* evt);
void test_domAccess();
void test_javascript();
+ void test_loadJavaClass();
};
diff --git a/samples/BrowserPlugin/jni/main.cpp b/samples/BrowserPlugin/jni/main.cpp
index 6f0ed96..4bc825e 100644
--- a/samples/BrowserPlugin/jni/main.cpp
+++ b/samples/BrowserPlugin/jni/main.cpp
@@ -157,9 +157,8 @@
// Scripting functions appeared in NPAPI version 14
if (browser->version >= 14) {
- instance->pdata = browser->createobject (instance, getPluginClass());
- obj = static_cast<PluginObject*>(instance->pdata);
- bzero(obj, sizeof(*obj));
+ instance->pdata = browser->createobject (instance, getPluginClass());
+ obj = static_cast<PluginObject*>(instance->pdata);
}
/* END: STANDARD PLUGIN FRAMEWORK */
@@ -407,9 +406,9 @@
PluginObject *obj = (PluginObject*) instance->pdata;
if (obj)
- browser->retainobject((NPObject*)obj);
+ browser->retainobject(&obj->header);
- *v = obj;
+ *v = &(obj->header);
return NPERR_NO_ERROR;
}
diff --git a/samples/BrowserPlugin/jni/main.h b/samples/BrowserPlugin/jni/main.h
index 5906b0b..66629e6 100644
--- a/samples/BrowserPlugin/jni/main.h
+++ b/samples/BrowserPlugin/jni/main.h
@@ -28,6 +28,7 @@
#include <npruntime.h>
#include "android_npapi.h"
#include "ANPSurface_npapi.h"
+#include "ANPSystem_npapi.h"
extern NPNetscapeFuncs* browser;
extern JavaVM* gVM;
diff --git a/samples/BrowserPlugin/src/com/android/sampleplugin/BackgroundTest.java b/samples/BrowserPlugin/src/com/android/sampleplugin/BackgroundTest.java
new file mode 100644
index 0000000..1f6b0d4
--- /dev/null
+++ b/samples/BrowserPlugin/src/com/android/sampleplugin/BackgroundTest.java
@@ -0,0 +1,11 @@
+package com.android.sampleplugin;
+
+public class BackgroundTest {
+
+ public BackgroundTest() {}
+
+ public int addInt(int x, int y) {
+ return x + y;
+ }
+
+}