Title: [133837] trunk/Source/WebCore
Revision
133837
Author
aba...@webkit.org
Date
2012-11-07 19:05:41 -0800 (Wed, 07 Nov 2012)

Log Message

[V8] IntrusiveDOMWrapperMap should be usable for more than just Nodes
https://bugs.webkit.org/show_bug.cgi?id=101110

Reviewed by Kentaro Hara.

Hopefully the memory issues with this patch have been resolved by
fixing bug 101525. This patch re-lands this patch again, hopefully for
the last time.

* bindings/v8/DOMDataStore.cpp:
(WebCore::DOMDataStore::weakCallback):
* bindings/v8/DOMDataStore.h:
(WebCore::DOMDataStore::wrapperIsStoredInObject):
(WebCore::DOMDataStore::getWrapperFromObject):
(WebCore::DOMDataStore::setWrapperInObject):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (133836 => 133837)


--- trunk/Source/WebCore/ChangeLog	2012-11-08 03:03:07 UTC (rev 133836)
+++ trunk/Source/WebCore/ChangeLog	2012-11-08 03:05:41 UTC (rev 133837)
@@ -1,3 +1,21 @@
+2012-11-07  Adam Barth  <aba...@webkit.org>
+
+        [V8] IntrusiveDOMWrapperMap should be usable for more than just Nodes
+        https://bugs.webkit.org/show_bug.cgi?id=101110
+
+        Reviewed by Kentaro Hara.
+
+        Hopefully the memory issues with this patch have been resolved by
+        fixing bug 101525. This patch re-lands this patch again, hopefully for
+        the last time.
+
+        * bindings/v8/DOMDataStore.cpp:
+        (WebCore::DOMDataStore::weakCallback):
+        * bindings/v8/DOMDataStore.h:
+        (WebCore::DOMDataStore::wrapperIsStoredInObject):
+        (WebCore::DOMDataStore::getWrapperFromObject):
+        (WebCore::DOMDataStore::setWrapperInObject):
+
 2012-11-07  KyungTae Kim  <ktf....@samsung.com>
 
         Seam occurred between pieces of ShadowBlur on floating point zoom

Modified: trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp (133836 => 133837)


--- trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp	2012-11-08 03:03:07 UTC (rev 133836)
+++ trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp	2012-11-08 03:05:41 UTC (rev 133837)
@@ -72,15 +72,16 @@
 
 void DOMDataStore::weakCallback(v8::Persistent<v8::Value> value, void* context)
 {
-    Node* object = static_cast<Node*>(context);
+    ScriptWrappable* key = static_cast<ScriptWrappable*>(context);
     ASSERT(value->IsObject());
     v8::Persistent<v8::Object> wrapper = v8::Persistent<v8::Object>::Cast(value);
-    ASSERT(object->wrapper() == wrapper);
-    ASSERT(object = static_cast<Node*>(toNative(wrapper)));
+    ASSERT(key->wrapper() == wrapper);
+    // Note: |object| might not be equal to |key|, e.g., if ScriptWrappable isn't a left-most base class.
+    void* object = toNative(wrapper);
     WrapperTypeInfo* info = toWrapperTypeInfo(wrapper);
     ASSERT(info->derefObjectFunction);
 
-    object->clearWrapper();
+    key->clearWrapper();
     value.Dispose();
     value.Clear();
     info->derefObject(object);

Modified: trunk/Source/WebCore/bindings/v8/DOMDataStore.h (133836 => 133837)


--- trunk/Source/WebCore/bindings/v8/DOMDataStore.h	2012-11-08 03:03:07 UTC (rev 133836)
+++ trunk/Source/WebCore/bindings/v8/DOMDataStore.h	2012-11-08 03:05:41 UTC (rev 133837)
@@ -79,7 +79,7 @@
 
 private:
     bool wrapperIsStoredInObject(void*) const { return false; }
-    bool wrapperIsStoredInObject(Node*) const { return m_type == MainWorld; }
+    bool wrapperIsStoredInObject(ScriptWrappable*) const { return m_type == MainWorld; }
 
     v8::Handle<v8::Object> getWrapperFromObject(void*) const
     {
@@ -87,14 +87,14 @@
         return v8::Handle<v8::Object>();
     }
 
-    v8::Handle<v8::Object> getWrapperFromObject(Node* object) const
+    v8::Handle<v8::Object> getWrapperFromObject(ScriptWrappable* object) const
     {
         ASSERT(m_type == MainWorld);
         return object->wrapper();
     }
 
     bool setWrapperInObject(void*, v8::Persistent<v8::Object>) { return false; }
-    bool setWrapperInObject(Node* object, v8::Persistent<v8::Object> wrapper)
+    bool setWrapperInObject(ScriptWrappable* object, v8::Persistent<v8::Object> wrapper)
     {
         if (m_type != MainWorld)
             return false;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to