Title: [91355] trunk/Source/WebCore
Revision
91355
Author
[email protected]
Date
2011-07-20 04:20:02 -0700 (Wed, 20 Jul 2011)

Log Message

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):

Modified Paths

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;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to