M dist/build.xml

M dist/netbeans/nbproject/project.properties
M examples/simple/src/main/java/simple/SimplePluglet.java
M examples/simple/src/main/web/index.html
M src/Pluglet.cpp

New release.  Now with JavaScript to Pluglet calling.


git-svn-id: svn://10.0.0.236/trunk@242022 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
edburns%acm.org 2007-12-23 03:08:19 +00:00
parent a38e88a6fc
commit 6eec4a4797
5 changed files with 287 additions and 11 deletions

View File

@ -32,8 +32,8 @@
<property name="name" value="pluglet"/>
<property name="major.version" value="1" />
<property name="minor.version" value="1" />
<property name="release.version" value="a1" />
<property name="release.version.full" value="alpha_1" />
<property name="release.version" value="a2" />
<property name="release.version.full" value="alpha_2" />
<property name="version"
value="${major.version}_${minor.version}_${release.version}"/>
<property name="full.version" value="${major.version}_${minor.version}_${release.version.full}"/>

View File

@ -20,10 +20,10 @@ file.reference.main-java=../test/manual/src/main/java
file.reference.main-java-1=../samples/jmfplayer/src/main/java
file.reference.main-java-2=../src/main/java
file.reference.main-java-3=../samples/simple/src/main/java
file.reference.pluglet-1_1_a1.jar=../lib/pluglet-1_1_a1.jar
file.reference.pluglet-1_1_a2.jar=../lib/pluglet-1_1_a2.jar
jar.compress=false
javac.classpath=\
${file.reference.pluglet-1_1_a1.jar}:\
${file.reference.pluglet-1_1_a2.jar}:\
${libs.JMF.classpath}
# Space-separated list of extra javac options
javac.compilerargs=

View File

@ -193,10 +193,27 @@ class SimplePlugletInstance implements Pluglet {
org.mozilla.util.DebugPluglet.print("--SimplePlugletInstance.finalize()\n");
}
public String calledFromJavaScript1(String arg1, String arg2) {
org.mozilla.util.DebugPluglet.print("calledFromJavaScript1\n");
return "hard coded result";
public String calledFromJavaScript3(String arg0, String arg1, String arg2) {
org.mozilla.util.DebugPluglet.print("calledFromJavaScript2\n");
return "3 args. arg0: " + arg0 + " arg1: " + arg1 + " arg2: " + arg2 + "";
}
public String calledFromJavaScript2(String arg0, String arg1) {
org.mozilla.util.DebugPluglet.print("calledFromJavaScript2\n");
return "2 args. arg0: " + arg0 + " arg1: " + arg1 + "";
}
public String calledFromJavaScript1(String arg0) {
org.mozilla.util.DebugPluglet.print("calledFromJavaScript1\n");
return "1 args. arg0: " + arg0 + "";
}
public String calledFromJavaScript0() {
org.mozilla.util.DebugPluglet.print("calledFromJavaScript0\n");
return "0 arg hard coded result";
}
}
class TestStreamListener implements PlugletStreamListener {

View File

@ -7,10 +7,23 @@
<script>
var embed = document.embeds[0];
function callPluglet()
function callPluglet0()
{
var strs2 = {
value : ["double","me"]
value : []
};
var strslen2 = {
value : strs2.value.length
};
embed.callPlugletMethod("calledFromJavaScript0", strslen2, strs2);
alert("Pluglet returned " + strs2.value);
}
function callPluglet1()
{
var strs2 = {
value : [ "arg0" ]
};
var strslen2 = {
@ -18,11 +31,41 @@ var strslen2 = {
};
embed.callPlugletMethod("calledFromJavaScript1", strslen2, strs2);
alert("Pluglet returned " + strs2.value);
}
function callPluglet2()
{
var strs2 = {
value : [ "arg0", "arg1" ]
};
var strslen2 = {
value : strs2.value.length
};
embed.callPlugletMethod("calledFromJavaScript2", strslen2, strs2);
alert("Pluglet returned " + strs2.value);
}
function callPluglet3()
{
var strs2 = {
value : [ "arg0", "arg1", "arg2" ]
};
var strslen2 = {
value : strs2.value.length
};
embed.callPlugletMethod("calledFromJavaScript3", strslen2, strs2);
alert("Pluglet returned " + strs2.value);
}
</script>
<form name="formname">
<input type=button value="Call Pluglet" onclick='callPluglet()'> </input>
<input type=button value="Call Pluglet 0 arg" onclick='callPluglet0()'> </input>
<input type=button value="Call Pluglet 1 arg" onclick='callPluglet1()'> </input>
<input type=button value="Call Pluglet 2 arg" onclick='callPluglet2()'> </input>
<input type=button value="Call Pluglet 3 arg" onclick='callPluglet3()'> </input>
</form>
</body>

View File

@ -27,6 +27,8 @@
#include "Registry.h"
#include "PlugletViewFactory.h"
#include "PlugletLog.h"
#include "nsMemory.h"
@ -307,7 +309,7 @@ NS_IMETHODIMP Pluglet::CallPlugletMethod(const char *methodName, PRUint32 *inArg
{
nsresult rv = NS_OK;
if (NULL != methodName && 0 < strlen(methodName) && NULL != inArgc && NULL != inArgv) {
if (NULL != methodName && 0 < strlen(methodName) && NULL != inArgc && NULL != inArgv && (10 < (int)inArgc)) {
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
("Pluglet::CallPlugletMethod: methodName: %s\n", methodName));
@ -316,6 +318,220 @@ NS_IMETHODIMP Pluglet::CallPlugletMethod(const char *methodName, PRUint32 *inArg
if (NULL != plugletMethodMID) {
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
("Pluglet::CallPlugletMethod: found match for methodName: %s\n", methodName));
nsresult rv = NS_ERROR_FAILURE;
nsCOMPtr<iPlugletEngine> plugletEngine =
do_GetService(PLUGLETENGINE_ContractID, &rv);;
if (NS_FAILED(rv)) {
return rv;
}
JNIEnv *env = nsnull;
rv = plugletEngine->GetJNIEnv(&env);
if (NS_FAILED(rv)) {
return rv;
}
jstring resultJstr;
if (0 == *inArgc) {
resultJstr = (jstring) env->CallObjectMethod(jthis, plugletMethodMID);
}
else {
char **args = *inArgv;
if (1 == *inArgc) {
jstring jstr0 = env->NewStringUTF(args[0]);
if (jstr0) {
resultJstr = (jstring) env->CallObjectMethod(jthis, plugletMethodMID, jstr0);
}
env->DeleteLocalRef(jstr0);
}
else if (2 == *inArgc) {
jstring jstr0 = env->NewStringUTF(args[0]);
jstring jstr1 = env->NewStringUTF(args[1]);
if (jstr0 && jstr1) {
resultJstr = (jstring) env->CallObjectMethod(jthis, plugletMethodMID, jstr0, jstr1);
}
env->DeleteLocalRef(jstr0);
env->DeleteLocalRef(jstr1);
}
else if (3 == *inArgc) {
jstring jstr0 = env->NewStringUTF(args[0]);
jstring jstr1 = env->NewStringUTF(args[1]);
jstring jstr2 = env->NewStringUTF(args[2]);
if (jstr0 && jstr1 && jstr2) {
resultJstr = (jstring) env->CallObjectMethod(jthis, plugletMethodMID, jstr0, jstr1, jstr2);
}
env->DeleteLocalRef(jstr0);
env->DeleteLocalRef(jstr1);
env->DeleteLocalRef(jstr2);
}
else if (4 == *inArgc) {
jstring jstr0 = env->NewStringUTF(args[0]);
jstring jstr1 = env->NewStringUTF(args[1]);
jstring jstr2 = env->NewStringUTF(args[2]);
jstring jstr3 = env->NewStringUTF(args[3]);
if (jstr0 && jstr1 && jstr2 && jstr3) {
resultJstr = (jstring) env->CallObjectMethod(jthis, plugletMethodMID, jstr0, jstr1, jstr2,
jstr3);
}
env->DeleteLocalRef(jstr0);
env->DeleteLocalRef(jstr1);
env->DeleteLocalRef(jstr2);
env->DeleteLocalRef(jstr3);
}
else if (5 == *inArgc) {
jstring jstr0 = env->NewStringUTF(args[0]);
jstring jstr1 = env->NewStringUTF(args[1]);
jstring jstr2 = env->NewStringUTF(args[2]);
jstring jstr3 = env->NewStringUTF(args[3]);
jstring jstr4 = env->NewStringUTF(args[4]);
if (jstr0 && jstr1 && jstr2 && jstr3 && jstr4) {
resultJstr = (jstring) env->CallObjectMethod(jthis, plugletMethodMID, jstr0, jstr1, jstr2,
jstr3, jstr4);
}
env->DeleteLocalRef(jstr0);
env->DeleteLocalRef(jstr1);
env->DeleteLocalRef(jstr2);
env->DeleteLocalRef(jstr3);
env->DeleteLocalRef(jstr4);
}
else if (6 == *inArgc) {
jstring jstr0 = env->NewStringUTF(args[0]);
jstring jstr1 = env->NewStringUTF(args[1]);
jstring jstr2 = env->NewStringUTF(args[2]);
jstring jstr3 = env->NewStringUTF(args[3]);
jstring jstr4 = env->NewStringUTF(args[4]);
jstring jstr5 = env->NewStringUTF(args[5]);
if (jstr0 && jstr1 && jstr2 && jstr3 && jstr4 && jstr5) {
resultJstr = (jstring) env->CallObjectMethod(jthis, plugletMethodMID, jstr0, jstr1, jstr2,
jstr3, jstr4, jstr5);
}
env->DeleteLocalRef(jstr0);
env->DeleteLocalRef(jstr1);
env->DeleteLocalRef(jstr2);
env->DeleteLocalRef(jstr3);
env->DeleteLocalRef(jstr4);
env->DeleteLocalRef(jstr5);
}
else if (7 == *inArgc) {
jstring jstr0 = env->NewStringUTF(args[0]);
jstring jstr1 = env->NewStringUTF(args[1]);
jstring jstr2 = env->NewStringUTF(args[2]);
jstring jstr3 = env->NewStringUTF(args[3]);
jstring jstr4 = env->NewStringUTF(args[4]);
jstring jstr5 = env->NewStringUTF(args[5]);
jstring jstr6 = env->NewStringUTF(args[6]);
if (jstr0 && jstr1 && jstr2 && jstr3 && jstr4 && jstr5 && jstr6) {
resultJstr = (jstring) env->CallObjectMethod(jthis, plugletMethodMID, jstr0, jstr1, jstr2,
jstr3, jstr4, jstr5, jstr6);
}
env->DeleteLocalRef(jstr0);
env->DeleteLocalRef(jstr1);
env->DeleteLocalRef(jstr2);
env->DeleteLocalRef(jstr3);
env->DeleteLocalRef(jstr4);
env->DeleteLocalRef(jstr5);
env->DeleteLocalRef(jstr6);
}
else if (8 == *inArgc) {
jstring jstr0 = env->NewStringUTF(args[0]);
jstring jstr1 = env->NewStringUTF(args[1]);
jstring jstr2 = env->NewStringUTF(args[2]);
jstring jstr3 = env->NewStringUTF(args[3]);
jstring jstr4 = env->NewStringUTF(args[4]);
jstring jstr5 = env->NewStringUTF(args[5]);
jstring jstr6 = env->NewStringUTF(args[6]);
jstring jstr7 = env->NewStringUTF(args[7]);
if (jstr0 && jstr1 && jstr2 && jstr3 && jstr4 && jstr5 && jstr6 && jstr7) {
resultJstr = (jstring) env->CallObjectMethod(jthis, plugletMethodMID, jstr0, jstr1, jstr2,
jstr3, jstr4, jstr5, jstr6, jstr7);
}
env->DeleteLocalRef(jstr0);
env->DeleteLocalRef(jstr1);
env->DeleteLocalRef(jstr2);
env->DeleteLocalRef(jstr3);
env->DeleteLocalRef(jstr4);
env->DeleteLocalRef(jstr5);
env->DeleteLocalRef(jstr6);
env->DeleteLocalRef(jstr7);
}
else if (9 == *inArgc) {
jstring jstr0 = env->NewStringUTF(args[0]);
jstring jstr1 = env->NewStringUTF(args[1]);
jstring jstr2 = env->NewStringUTF(args[2]);
jstring jstr3 = env->NewStringUTF(args[3]);
jstring jstr4 = env->NewStringUTF(args[4]);
jstring jstr5 = env->NewStringUTF(args[5]);
jstring jstr6 = env->NewStringUTF(args[6]);
jstring jstr7 = env->NewStringUTF(args[7]);
jstring jstr8 = env->NewStringUTF(args[8]);
if (jstr0 && jstr1 && jstr2 && jstr3 && jstr4 && jstr5 && jstr6 && jstr7 && jstr8) {
resultJstr = (jstring) env->CallObjectMethod(jthis, plugletMethodMID, jstr0, jstr1, jstr2,
jstr3, jstr4, jstr5, jstr6, jstr7, jstr8);
}
env->DeleteLocalRef(jstr0);
env->DeleteLocalRef(jstr1);
env->DeleteLocalRef(jstr2);
env->DeleteLocalRef(jstr3);
env->DeleteLocalRef(jstr4);
env->DeleteLocalRef(jstr5);
env->DeleteLocalRef(jstr6);
env->DeleteLocalRef(jstr7);
env->DeleteLocalRef(jstr8);
}
else if (10 == *inArgc) {
jstring jstr0 = env->NewStringUTF(args[0]);
jstring jstr1 = env->NewStringUTF(args[1]);
jstring jstr2 = env->NewStringUTF(args[2]);
jstring jstr3 = env->NewStringUTF(args[3]);
jstring jstr4 = env->NewStringUTF(args[4]);
jstring jstr5 = env->NewStringUTF(args[5]);
jstring jstr6 = env->NewStringUTF(args[6]);
jstring jstr7 = env->NewStringUTF(args[7]);
jstring jstr8 = env->NewStringUTF(args[8]);
jstring jstr9 = env->NewStringUTF(args[9]);
if (jstr0 && jstr1 && jstr2 && jstr3 && jstr4 && jstr5 && jstr6 && jstr7 && jstr8 && jstr9) {
resultJstr = (jstring) env->CallObjectMethod(jthis, plugletMethodMID, jstr0, jstr1, jstr2,
jstr3, jstr4, jstr5, jstr6, jstr7, jstr8, jstr9);
}
env->DeleteLocalRef(jstr0);
env->DeleteLocalRef(jstr1);
env->DeleteLocalRef(jstr2);
env->DeleteLocalRef(jstr3);
env->DeleteLocalRef(jstr4);
env->DeleteLocalRef(jstr5);
env->DeleteLocalRef(jstr6);
env->DeleteLocalRef(jstr7);
env->DeleteLocalRef(jstr8);
env->DeleteLocalRef(jstr9);
}
}
if (NULL != resultJstr) {
jboolean isCopy;
const char * result = env->GetStringUTFChars(resultJstr, &isCopy);
if (NULL != result) {
const static char *strings[1];
strings[0] = result;
// Taken from xpctest_array.cpp. Thanks jband
const static PRUint32 scount = sizeof(strings)/sizeof(strings[0]);
char** out = (char**) nsMemory::Alloc(scount * sizeof(char*));
if(!out) {
return NS_ERROR_OUT_OF_MEMORY;
}
for(PRUint32 i = 0; i < scount; ++i) {
out[i] = (char*) nsMemory::Clone(strings[i], strlen(strings[i])+1);
if(!out[i]) {
nsMemory::Free(out);
return NS_ERROR_OUT_OF_MEMORY;
}
}
*inArgc = 1;
*inArgv = out;
}
if (isCopy == JNI_TRUE) {
env->ReleaseStringUTFChars(resultJstr, result);
}
}
}
else {
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,