Diff
Modified: trunk/Source/WebCore/ChangeLog (91354 => 91355)
--- trunk/Source/WebCore/ChangeLog 2011-07-20 11:02:56 UTC (rev 91354)
+++ trunk/Source/WebCore/ChangeLog 2011-07-20 11:20:02 UTC (rev 91355)
@@ -1,3 +1,42 @@
+2011-07-20 Steve Block <[email protected]>
+
+ JobjectWrapper should inherit from RefCounted rather than implementing its own ref counting
+ https://bugs.webkit.org/show_bug.cgi?id=55786
+
+ Also adds static create() method and cleans up use of data members.
+
+ Reviewed by Tony Gentilcore.
+
+ No new tests, refactoring only.
+
+ * bridge/jni/JobjectWrapper.cpp:
+ (JobjectWrapper::JobjectWrapper):
+ * bridge/jni/JobjectWrapper.h:
+ (JSC::Bindings::JobjectWrapper::create):
+ * bridge/jni/jsc/JavaArrayJSC.cpp:
+ (JavaArray::JavaArray):
+ * bridge/jni/jsc/JavaArrayJSC.h:
+ (JSC::Bindings::JavaArray::javaArray):
+ * bridge/jni/jsc/JavaFieldJSC.cpp:
+ (JavaField::JavaField):
+ (JavaField::dispatchValueFromInstance):
+ (JavaField::dispatchSetValueToInstance):
+ * bridge/jni/jsc/JavaInstanceJSC.cpp:
+ (JavaInstance::JavaInstance):
+ (JavaInstance::getClass):
+ (JavaInstance::stringValue):
+ (JavaInstance::numberValue):
+ (JavaInstance::booleanValue):
+ (JavaInstance::invokeMethod):
+ * bridge/jni/jsc/JavaInstanceJSC.h:
+ (JSC::Bindings::JavaInstance::javaInstance):
+ * bridge/jni/v8/JavaFieldJobjectV8.cpp:
+ (JavaFieldJobject::JavaFieldJobject):
+ * bridge/jni/v8/JavaInstanceJobjectV8.cpp:
+ (JavaInstanceJobject::JavaInstanceJobject):
+ * bridge/jni/v8/JavaInstanceJobjectV8.h:
+ (JSC::Bindings::JavaInstanceJobject::javaInstance):
+
2011-07-20 Kentaro Hara <[email protected]>
The value of a number input form continues to increase/decrease even if we disable the input form.
Modified: trunk/Source/WebCore/bridge/jni/JobjectWrapper.cpp (91354 => 91355)
--- trunk/Source/WebCore/bridge/jni/JobjectWrapper.cpp 2011-07-20 11:02:56 UTC (rev 91354)
+++ trunk/Source/WebCore/bridge/jni/JobjectWrapper.cpp 2011-07-20 11:20:02 UTC (rev 91355)
@@ -29,14 +29,11 @@
#if ENABLE(JAVA_BRIDGE)
-#include <assert.h>
-
using namespace JSC::Bindings;
JobjectWrapper::JobjectWrapper(jobject instance)
- : m_refCount(0)
{
- assert(instance);
+ ASSERT(instance);
// Cache the JNIEnv used to get the global ref for this java instanace.
// It'll be used to delete the reference.
Modified: trunk/Source/WebCore/bridge/jni/JobjectWrapper.h (91354 => 91355)
--- trunk/Source/WebCore/bridge/jni/JobjectWrapper.h 2011-07-20 11:02:56 UTC (rev 91354)
+++ trunk/Source/WebCore/bridge/jni/JobjectWrapper.h 2011-07-20 11:20:02 UTC (rev 91355)
@@ -30,38 +30,26 @@
#if ENABLE(JAVA_BRIDGE)
#include "JNIUtility.h"
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
namespace JSC {
namespace Bindings {
-class JobjectWrapper {
-friend class JavaArray;
-friend class JavaField;
-friend class JavaFieldJobject;
-friend class JavaInstance;
-friend class JavaInstanceJobject;
-
+class JobjectWrapper : public RefCounted<JobjectWrapper> {
public:
+ static PassRefPtr<JobjectWrapper> create(jobject object) { return adoptRef(new JobjectWrapper(object)); }
+ ~JobjectWrapper();
+
jobject instance() const { return m_instance; }
void setInstance(jobject instance) { m_instance = instance; }
- void ref() { m_refCount++; }
- void deref()
- {
- if (!--m_refCount)
- delete this;
- }
-
-protected:
+private:
JobjectWrapper(jobject);
- ~JobjectWrapper();
jobject m_instance;
-
-private:
JNIEnv* m_env;
- unsigned int m_refCount;
};
} // namespace Bindings
Modified: trunk/Source/WebCore/bridge/jni/jsc/JavaArrayJSC.cpp (91354 => 91355)
--- trunk/Source/WebCore/bridge/jni/jsc/JavaArrayJSC.cpp 2011-07-20 11:02:56 UTC (rev 91354)
+++ trunk/Source/WebCore/bridge/jni/jsc/JavaArrayJSC.cpp 2011-07-20 11:20:02 UTC (rev 91355)
@@ -53,10 +53,10 @@
JavaArray::JavaArray(jobject array, const char* type, PassRefPtr<RootObject> rootObject)
: Array(rootObject)
{
- m_array = new JobjectWrapper(array);
+ m_array = JobjectWrapper::create(array);
// Java array are fixed length, so we can cache length.
JNIEnv* env = getJNIEnv();
- m_length = env->GetArrayLength(static_cast<jarray>(m_array->m_instance));
+ m_length = env->GetArrayLength(static_cast<jarray>(m_array->instance()));
m_type = strdup(type);
}
Modified: trunk/Source/WebCore/bridge/jni/jsc/JavaArrayJSC.h (91354 => 91355)
--- trunk/Source/WebCore/bridge/jni/jsc/JavaArrayJSC.h 2011-07-20 11:02:56 UTC (rev 91354)
+++ trunk/Source/WebCore/bridge/jni/jsc/JavaArrayJSC.h 2011-07-20 11:20:02 UTC (rev 91355)
@@ -48,7 +48,7 @@
virtual JSValue valueAt(ExecState*, unsigned int index) const;
virtual unsigned int getLength() const;
- jobject javaArray() const { return m_array->m_instance; }
+ jobject javaArray() const { return m_array->instance(); }
static JSValue convertJObjectToArray(ExecState*, jobject, const char* type, PassRefPtr<RootObject>);
Modified: trunk/Source/WebCore/bridge/jni/jsc/JavaFieldJSC.cpp (91354 => 91355)
--- trunk/Source/WebCore/bridge/jni/jsc/JavaFieldJSC.cpp 2011-07-20 11:02:56 UTC (rev 91354)
+++ trunk/Source/WebCore/bridge/jni/jsc/JavaFieldJSC.cpp 2011-07-20 11:20:02 UTC (rev 91355)
@@ -58,13 +58,13 @@
fieldName = env->NewStringUTF("<Unknown>");
m_name = JavaString(env, fieldName);
- m_field = new JobjectWrapper(aField);
+ m_field = JobjectWrapper::create(aField);
}
jvalue JavaField::dispatchValueFromInstance(ExecState* exec, const JavaInstance* instance, const char* name, const char* sig, JavaType returnType) const
{
jobject jinstance = instance->javaInstance();
- jobject fieldJInstance = m_field->m_instance;
+ jobject fieldJInstance = m_field->instance();
JNIEnv* env = getJNIEnv();
jvalue result;
@@ -151,7 +151,7 @@
void JavaField::dispatchSetValueToInstance(ExecState* exec, const JavaInstance* instance, jvalue javaValue, const char* name, const char* sig) const
{
jobject jinstance = instance->javaInstance();
- jobject fieldJInstance = m_field->m_instance;
+ jobject fieldJInstance = m_field->instance();
JNIEnv* env = getJNIEnv();
jclass cls = env->GetObjectClass(fieldJInstance);
Modified: trunk/Source/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp (91354 => 91355)
--- trunk/Source/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp 2011-07-20 11:02:56 UTC (rev 91354)
+++ trunk/Source/WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp 2011-07-20 11:20:02 UTC (rev 91355)
@@ -52,7 +52,7 @@
JavaInstance::JavaInstance(jobject instance, PassRefPtr<RootObject> rootObject)
: Instance(rootObject)
{
- m_instance = new JobjectWrapper(instance);
+ m_instance = JobjectWrapper::create(instance);
m_class = 0;
}
@@ -81,7 +81,7 @@
Class* JavaInstance::getClass() const
{
if (!m_class)
- m_class = new JavaClass (m_instance->m_instance);
+ m_class = new JavaClass (m_instance->instance());
return m_class;
}
@@ -89,7 +89,7 @@
{
JSLock lock(SilenceAssertionsOnly);
- jstring stringValue = (jstring)callJNIMethod<jobject>(m_instance->m_instance, "toString", "()Ljava/lang/String;");
+ jstring stringValue = (jstring)callJNIMethod<jobject>(m_instance->instance(), "toString", "()Ljava/lang/String;");
// Should throw a JS exception, rather than returning ""? - but better than a null dereference.
if (!stringValue)
@@ -104,13 +104,13 @@
JSValue JavaInstance::numberValue(ExecState*) const
{
- jdouble doubleValue = callJNIMethod<jdouble>(m_instance->m_instance, "doubleValue", "()D");
+ jdouble doubleValue = callJNIMethod<jdouble>(m_instance->instance(), "doubleValue", "()D");
return jsNumber(doubleValue);
}
JSValue JavaInstance::booleanValue() const
{
- jboolean booleanValue = callJNIMethod<jboolean>(m_instance->m_instance, "booleanValue", "()Z");
+ jboolean booleanValue = callJNIMethod<jboolean>(m_instance->instance(), "booleanValue", "()Z");
return jsBoolean(booleanValue);
}
@@ -192,7 +192,7 @@
bool handled = false;
if (rootObject->nativeHandle()) {
- jobject obj = m_instance->m_instance;
+ jobject obj = m_instance->instance();
JSValue exceptionDescription;
const char *callingURL = 0; // FIXME, need to propagate calling URL to Java
jmethodID methodId = getMethodID(obj, jMethod->name().utf8().data(), jMethod->signature());
@@ -207,7 +207,7 @@
// Remove this guard once Bug 39476 is fixed.
#if PLATFORM(ANDROID)
if (!handled)
- result = callJNIMethod(m_instance->m_instance, jMethod->returnType(), jMethod->name().utf8().data(), jMethod->signature(), jArgs.data());
+ result = callJNIMethod(m_instance->instance(), jMethod->returnType(), jMethod->name().utf8().data(), jMethod->signature(), jArgs.data());
#endif
switch (jMethod->returnType()) {
Modified: trunk/Source/WebCore/bridge/jni/jsc/JavaInstanceJSC.h (91354 => 91355)
--- trunk/Source/WebCore/bridge/jni/jsc/JavaInstanceJSC.h 2011-07-20 11:02:56 UTC (rev 91354)
+++ trunk/Source/WebCore/bridge/jni/jsc/JavaInstanceJSC.h 2011-07-20 11:20:02 UTC (rev 91355)
@@ -56,7 +56,7 @@
virtual JSValue getMethod(ExecState* exec, const Identifier& propertyName);
virtual JSValue invokeMethod(ExecState* exec, RuntimeMethod* method);
- jobject javaInstance() const { return m_instance->m_instance; }
+ jobject javaInstance() const { return m_instance->instance(); }
JSValue stringValue(ExecState*) const;
JSValue numberValue(ExecState*) const;
Modified: trunk/Source/WebCore/bridge/jni/v8/JavaFieldJobjectV8.cpp (91354 => 91355)
--- trunk/Source/WebCore/bridge/jni/v8/JavaFieldJobjectV8.cpp 2011-07-20 11:02:56 UTC (rev 91354)
+++ trunk/Source/WebCore/bridge/jni/v8/JavaFieldJobjectV8.cpp 2011-07-20 11:20:02 UTC (rev 91355)
@@ -42,7 +42,7 @@
jstring fieldName = static_cast<jstring>(callJNIMethod<jobject>(aField, "getName", "()Ljava/lang/String;"));
m_name = JavaString(env, fieldName);
- m_field = new JobjectWrapper(aField);
+ m_field = JobjectWrapper::create(aField);
}
#endif // ENABLE(JAVA_BRIDGE)
Modified: trunk/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp (91354 => 91355)
--- trunk/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp 2011-07-20 11:02:56 UTC (rev 91354)
+++ trunk/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.cpp 2011-07-20 11:20:02 UTC (rev 91355)
@@ -41,7 +41,7 @@
using namespace JSC::Bindings;
JavaInstanceJobject::JavaInstanceJobject(jobject instance)
- : m_instance(new JobjectWrapper(instance))
+ : m_instance(JobjectWrapper::create(instance))
{
}
Modified: trunk/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.h (91354 => 91355)
--- trunk/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.h 2011-07-20 11:02:56 UTC (rev 91354)
+++ trunk/Source/WebCore/bridge/jni/v8/JavaInstanceJobjectV8.h 2011-07-20 11:20:02 UTC (rev 91355)
@@ -53,7 +53,7 @@
virtual void begin();
virtual void end();
- jobject javaInstance() const { return m_instance->m_instance; }
+ jobject javaInstance() const { return m_instance->instance(); }
protected:
RefPtr<JobjectWrapper> m_instance;