[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.21-584-g1e41756
ap at apple.com
ap at apple.com
Fri Feb 26 22:26:37 UTC 2010
The following commit has been merged in the webkit-1.1 branch:
commit d5474b287f91ee334a4ad9980afda20424d27585
Author: ap at apple.com <ap at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Sun Feb 21 06:01:26 2010 +0000
Reviewed by Maciej Stachowiak.
https://bugs.webkit.org/show_bug.cgi?id=35202
<rdar://problem/4856597> Calling Java method which accepts Object always passes a null argument
* bridge/jni/jsc/JNIUtilityPrivate.cpp: (JSC::Bindings::convertValueToJValue): Add cases for
other JS types.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@55059 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 3cc0f68..d90c632 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,13 @@
+2010-02-20 Alexey Proskuryakov <ap at apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ https://bugs.webkit.org/show_bug.cgi?id=35202
+ <rdar://problem/4856597> Calling Java method which accepts Object always passes a null argument
+
+ * bridge/jni/jsc/JNIUtilityPrivate.cpp: (JSC::Bindings::convertValueToJValue): Add cases for
+ other JS types.
+
2010-02-20 Laszlo Gombos <laszlo.1.gombos at nokia.com>
Reviewed by Darin Adler.
diff --git a/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp b/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp
index 33c79ce..600314e 100644
--- a/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp
+++ b/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp
@@ -173,12 +173,14 @@ jvalue convertValueToJValue(ExecState* exec, JSValue value, JNIType jniType, con
JSLock lock(SilenceAssertionsOnly);
jvalue result;
+ bzero(&result, sizeof(jvalue));
switch (jniType) {
case array_type:
case object_type:
{
- result.l = (jobject)0;
+ // FIXME: JavaJSObject::convertValueToJObject functionality is almost exactly the same,
+ // these functions should use common code.
// First see if we have a Java instance.
if (value.isObject()) {
@@ -199,26 +201,44 @@ jvalue convertValueToJValue(ExecState* exec, JSValue value, JNIType jniType, con
}
}
- if (!result.l) {
- // Convert value to a string if the target type is a java.lang.string, and we're not
- // converting from a null.
- if (!strcmp(javaClassName, "java.lang.String")) {
- if (!value.isNull()) {
- UString stringValue = value.toString(exec);
- JNIEnv* env = getJNIEnv();
- jobject javaString = env->functions->NewString(env, (const jchar*)stringValue.data(), stringValue.size());
- result.l = javaString;
- }
- // JS strings are converted to Java strings if argument type is Object.
- } else if (!strcmp(javaClassName, "java.lang.Object")) {
- if (value.isString()) {
- UString stringValue = asString(value)->value(exec);
- JNIEnv* env = getJNIEnv();
- jobject javaString = env->functions->NewString(env, (const jchar*)stringValue.data(), stringValue.size());
- result.l = javaString;
- }
- } else
- bzero(&result, sizeof(jvalue)); // Handle it the same as a void case
+ // Create an appropriate Java object if target type is java.lang.Object.
+ if (!result.l && !strcmp(javaClassName, "java.lang.Object")) {
+ if (value.isString()) {
+ UString stringValue = asString(value)->value(exec);
+ JNIEnv* env = getJNIEnv();
+ jobject javaString = env->functions->NewString(env, (const jchar*)stringValue.data(), stringValue.size());
+ result.l = javaString;
+ } else if (value.isNumber()) {
+ double doubleValue = value.uncheckedGetNumber();
+ JNIEnv* env = getJNIEnv();
+ jclass clazz = env->FindClass("java/lang/Double");
+ jmethodID constructor = env->GetMethodID(clazz, "<init>", "(D)V");
+ jobject javaDouble = env->functions->NewObject(env, clazz, constructor, doubleValue);
+ result.l = javaDouble;
+ } else if (value.isBoolean()) {
+ bool boolValue = value.getBoolean();
+ JNIEnv* env = getJNIEnv();
+ jclass clazz = env->FindClass("java/lang/Boolean");
+ jmethodID constructor = env->GetMethodID(clazz, "<init>", "(Z)V");
+ jobject javaBoolean = env->functions->NewObject(env, clazz, constructor, boolValue);
+ result.l = javaBoolean;
+ } else if (value.isUndefined()) {
+ UString stringValue = "undefined";
+ JNIEnv* env = getJNIEnv();
+ jobject javaString = env->functions->NewString(env, (const jchar*)stringValue.data(), stringValue.size());
+ result.l = javaString;
+ }
+ }
+
+ // Convert value to a string if the target type is a java.lang.String, and we're not
+ // converting from a null.
+ if (!result.l && !strcmp(javaClassName, "java.lang.String")) {
+ if (!value.isNull()) {
+ UString stringValue = value.toString(exec);
+ JNIEnv* env = getJNIEnv();
+ jobject javaString = env->functions->NewString(env, (const jchar*)stringValue.data(), stringValue.size());
+ result.l = javaString;
+ }
}
}
break;
@@ -271,14 +291,8 @@ jvalue convertValueToJValue(ExecState* exec, JSValue value, JNIType jniType, con
}
break;
- break;
-
case invalid_type:
- default:
case void_type:
- {
- bzero(&result, sizeof(jvalue));
- }
break;
}
return result;
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list