Bug 369410 - Provide API for wrapping XPCOM and Java objects. a=jay. XULRunner only. Not part of default build.
git-svn-id: svn://10.0.0.236/branches/MOZILLA_1_8_BRANCH@220076 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -430,3 +430,67 @@ MOZILLA_NATIVE(getNativeHandleFromAWT) (JNIEnv* env, jobject clazz,
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
extern "C" NS_EXPORT jlong JNICALL
|
||||
JXUTILS_NATIVE(wrapJavaObject) (JNIEnv* env, jobject, jobject aJavaObject,
|
||||
jstring aIID)
|
||||
{
|
||||
nsresult rv;
|
||||
nsISupports* xpcomObject = nsnull;
|
||||
|
||||
if (!aJavaObject || !aIID) {
|
||||
rv = NS_ERROR_NULL_POINTER;
|
||||
} else {
|
||||
const char* str = env->GetStringUTFChars(aIID, nsnull);
|
||||
if (!str) {
|
||||
rv = NS_ERROR_OUT_OF_MEMORY;
|
||||
} else {
|
||||
nsID iid;
|
||||
if (iid.Parse(str)) {
|
||||
rv = GetNewOrUsedXPCOMObject(env, aJavaObject, iid, &xpcomObject);
|
||||
} else {
|
||||
rv = NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
env->ReleaseStringUTFChars(aIID, str);
|
||||
}
|
||||
}
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
ThrowException(env, rv, "Failed to create XPCOM proxy for Java object");
|
||||
}
|
||||
return NS_REINTERPRET_CAST(jlong, xpcomObject);
|
||||
}
|
||||
|
||||
extern "C" NS_EXPORT jobject JNICALL
|
||||
JXUTILS_NATIVE(wrapXPCOMObject) (JNIEnv* env, jobject, jlong aXPCOMObject,
|
||||
jstring aIID)
|
||||
{
|
||||
nsresult rv;
|
||||
jobject javaObject = nsnull;
|
||||
nsISupports* xpcomObject = NS_REINTERPRET_CAST(nsISupports*, aXPCOMObject);
|
||||
|
||||
if (!xpcomObject || !aIID) {
|
||||
rv = NS_ERROR_NULL_POINTER;
|
||||
} else {
|
||||
const char* str = env->GetStringUTFChars(aIID, nsnull);
|
||||
if (!str) {
|
||||
rv = NS_ERROR_OUT_OF_MEMORY;
|
||||
} else {
|
||||
nsID iid;
|
||||
if (iid.Parse(str)) {
|
||||
// XXX Should we be passing something other than NULL for aObjectLoader?
|
||||
rv = GetNewOrUsedJavaObject(env, xpcomObject, iid, nsnull, &javaObject);
|
||||
} else {
|
||||
rv = NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
env->ReleaseStringUTFChars(aIID, str);
|
||||
}
|
||||
}
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
ThrowException(env, rv, "Failed to create XPCOM proxy for Java object");
|
||||
}
|
||||
return javaObject;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user