summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2010-04-01 15:01:26 +0100
committerBen Murdoch <benm@google.com>2010-04-01 15:50:39 +0100
commit0e519b9227fdf50b333a2bd89f2914e437a21595 (patch)
tree7d4264965a3712eca6c5d445df0493f4f40a5b93
parenta622a48d6cc2bea33d2467de9d31feb1b03b03eb (diff)
downloadexternal_webkit-0e519b9227fdf50b333a2bd89f2914e437a21595.zip
external_webkit-0e519b9227fdf50b333a2bd89f2914e437a21595.tar.gz
external_webkit-0e519b9227fdf50b333a2bd89f2914e437a21595.tar.bz2
Get the correct class name from the JVM when constructing arrays in the JNI bindings.
Also a change in packages/apps/Browser to update the unit tests for JNI bindings. Fix for b/2540502 Change-Id: Ia86a1ac672bd6653427ac0a969b4d40c86141415
-rw-r--r--WebCore/bridge/jni/v8/JNIUtilityPrivate.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/WebCore/bridge/jni/v8/JNIUtilityPrivate.cpp b/WebCore/bridge/jni/v8/JNIUtilityPrivate.cpp
index 46f0b2b..a6c4149 100644
--- a/WebCore/bridge/jni/v8/JNIUtilityPrivate.cpp
+++ b/WebCore/bridge/jni/v8/JNIUtilityPrivate.cpp
@@ -44,7 +44,7 @@ jvalue convertNPVariantToJValue(NPVariant value, JNIType jniType, const char* ja
{
JNIEnv* env = getJNIEnv();
jobject javaArray;
- NPObject* object = NPVARIANT_TO_OBJECT(value);
+ NPObject* object = NPVARIANT_IS_OBJECT(value) ? NPVARIANT_TO_OBJECT(value) : 0;
NPVariant npvLength;
bool success = _NPN_GetProperty(0, object, _NPN_GetStringIdentifier("length"), &npvLength);
if (!success) {
@@ -57,9 +57,9 @@ jvalue convertNPVariantToJValue(NPVariant value, JNIType jniType, const char* ja
#else
// Sending NULL as JSC does seems dangerous. (Imagine the java method that asks
// for the length of the array it was passed). Here we send a 0 length array.
- jclass objectArrayClass = env->FindClass("[Ljava/lang/Object;");
- javaArray = env->NewObjectArray((jsize)0, objectArrayClass, 0);
- env->DeleteLocalRef(objectArrayClass);
+ jclass objectClass = env->FindClass("java/lang/Object");
+ javaArray = env->NewObjectArray(0, objectClass, 0);
+ env->DeleteLocalRef(objectClass);
#endif
break;
}
@@ -68,8 +68,8 @@ jvalue convertNPVariantToJValue(NPVariant value, JNIType jniType, const char* ja
if (!strcmp(javaClassName, "[Ljava.lang.String;")) {
// Match JSC behavior by only allowing Object arrays if they are Strings.
- jclass stringArrayClass = env->FindClass("[Ljava/lang/String;");
- javaArray = env->NewObjectArray(length, stringArrayClass, 0);
+ jclass stringClass = env->FindClass("java/lang/String");
+ javaArray = env->NewObjectArray(length, stringClass, 0);
for (jsize i = 0; i < length; i++) {
NPVariant npvValue;
_NPN_GetProperty(0, object, _NPN_GetIntIdentifier(i), &npvValue);
@@ -79,7 +79,7 @@ jvalue convertNPVariantToJValue(NPVariant value, JNIType jniType, const char* ja
}
}
- env->DeleteLocalRef(stringArrayClass);
+ env->DeleteLocalRef(stringClass);
} else if (!strcmp(javaClassName, "[B")) {
// array of bytes
javaArray = env->NewByteArray(length);
@@ -188,9 +188,9 @@ jvalue convertNPVariantToJValue(NPVariant value, JNIType jniType, const char* ja
#else
// Sending NULL as JSC does seems dangerous. (Imagine the java method that asks
// for the length of the array it was passed). Here we send a 0 length array.
- jclass objectArrayClass = env->FindClass("[Ljava/lang/Object;");
- javaArray = env->NewObjectArray(0, objectArrayClass, 0);
- env->DeleteLocalRef(objectArrayClass);
+ jclass objectClass = env->FindClass("java/lang/Object");
+ javaArray = env->NewObjectArray(0, objectClass, 0);
+ env->DeleteLocalRef(objectClass);
#endif
}