Bug 311240 - XPCOMJavaProxy 'equals()' method doesn't check actual XPCOM object ptr. r=bsmedberg.

Original committer: pedemont%us.ibm.com
Original revision: 1.39
Original date: 2006/01/05 19:56:51


git-svn-id: svn://10.0.0.236/trunk@212701 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
pedemont%us.ibm.com
2006-09-27 15:19:05 +00:00
parent 864b6ae7c9
commit cbbf3fc0fd
2 changed files with 58 additions and 20 deletions

View File

@@ -1519,9 +1519,17 @@ JAVAPROXY_NATIVE(callXPCOMMethod) (JNIEnv *env, jclass that, jobject aJavaProxy,
}
// Call the XPCOM method
nsresult invokeResult;
invokeResult = XPTC_InvokeByIndex(inst->GetInstance(), methodIndex,
paramCount, params);
const nsIID* iid;
iinfo->GetIIDShared(&iid);
nsISupports* realObject;
rv = inst->GetInstance()->QueryInterface(*iid, (void**) &realObject);
if (NS_FAILED(rv)) {
ThrowException(env, rv, "Failed to get real XPCOM object");
return nsnull;
}
nsresult invokeResult = XPTC_InvokeByIndex(realObject, methodIndex,
paramCount, params);
NS_RELEASE(realObject);
// Clean up params
jobject result = nsnull;
@@ -1756,3 +1764,26 @@ JAVAPROXY_NATIVE(finalizeProxy) (JNIEnv *env, jclass that, jobject aJavaProxy)
#endif
}
/**
* org.mozilla.xpcom.XPCOMJavaProxy.isSameXPCOMObject
*/
extern "C" NS_EXPORT jboolean
JAVAPROXY_NATIVE(isSameXPCOMObject) (JNIEnv *env, jclass that,
jobject aProxy1, jobject aProxy2)
{
void* xpcom_obj1;
nsresult rv = GetXPCOMInstFromProxy(env, aProxy1, &xpcom_obj1);
if (NS_SUCCEEDED(rv)) {
void* xpcom_obj2;
rv = GetXPCOMInstFromProxy(env, aProxy2, &xpcom_obj2);
if (NS_SUCCEEDED(rv)) {
JavaXPCOMInstance* inst1 = NS_STATIC_CAST(JavaXPCOMInstance*, xpcom_obj1);
JavaXPCOMInstance* inst2 = NS_STATIC_CAST(JavaXPCOMInstance*, xpcom_obj2);
if (inst1->GetInstance() == inst2->GetInstance()) {
return JNI_TRUE;
}
}
}
return JNI_FALSE;
}