diff options
| author | Steve Block <steveblock@google.com> | 2011-08-10 13:42:55 +0100 |
|---|---|---|
| committer | Steve Block <steveblock@google.com> | 2011-08-10 13:42:55 +0100 |
| commit | 0369e2a086aa1cfe29f34e8042eef36a00a7f26b (patch) | |
| tree | 81a2ffcd778a0a861164e8144336b27d0cc055cf /Source | |
| parent | 6b9d05281a529f9cd3e527fb8d657b338bb4fd7a (diff) | |
| download | external_webkit-0369e2a086aa1cfe29f34e8042eef36a00a7f26b.zip external_webkit-0369e2a086aa1cfe29f34e8042eef36a00a7f26b.tar.gz external_webkit-0369e2a086aa1cfe29f34e8042eef36a00a7f26b.tar.bz2 | |
Fix property access in the Java bridge
This patch fixes JavaInstanceJobject::getField() to use getJNIField()
correctly.
Bug: 5140493
Change-Id: Ib29fe0a010535f3a8dc2b9084c4e4440169971b2
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp b/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp index 8221eff..f2dd1d2 100644 --- a/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp +++ b/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp @@ -37,6 +37,7 @@ #include <wtf/OwnArrayPtr.h> #include <wtf/PassOwnPtr.h> #include <wtf/text/CString.h> +#include <wtf/text/StringBuilder.h> using namespace JSC::Bindings; @@ -75,10 +76,30 @@ JavaValue JavaInstanceJobject::invokeMethod(const JavaMethod* method, JavaValue* return jvalueToJavaValue(result, method->returnType()); } +static void appendClassName(StringBuilder& builder, const char* className) +{ + char* c = fastStrDup(className); + char* result = c; + while (*c) { + if (*c == '.') + *c = '/'; + c++; + } + builder.append(result); + fastFree(result); +} + JavaValue JavaInstanceJobject::getField(const JavaField* field) { ASSERT(getClass()->fieldNamed(field->name().utf8().data()) == field); - return jvalueToJavaValue(getJNIField(javaInstance(), field->type(), field->name().utf8().data(), field->typeClassName()), field->type()); + + StringBuilder signature; + signature.append(signatureFromJavaType(field->type())); + if (field->type() == JavaTypeObject || field->type() == JavaTypeString) { + appendClassName(signature, field->typeClassName()); + signature.append(';'); + } + return jvalueToJavaValue(getJNIField(javaInstance(), field->type(), field->name().utf8().data(), signature.toString().utf8().data()), field->type()); } #endif // ENABLE(JAVA_BRIDGE) |
