[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