Title: [133331] trunk/Source/WebCore
Revision
133331
Author
aba...@webkit.org
Date
2012-11-02 12:22:24 -0700 (Fri, 02 Nov 2012)

Log Message

[V8] Generalize NodeWrapperMap to be able to handle other sorts of keys
https://bugs.webkit.org/show_bug.cgi?id=100973

Reviewed by Stephen White.

This is the first step towards using intrusive DOM wrapper maps more
widely in WebCore (see
http://lists.webkit.org/pipermail/webkit-dev/2012-November/022686.html
for more context).

* bindings/v8/DOMDataStore.cpp:
(WebCore::DOMDataStore::DOMDataStore):
* bindings/v8/IntrusiveDOMWrapperMap.h:
(WebCore):
(WebCore::IntrusiveDOMWrapperMap::weakCallback):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (133330 => 133331)


--- trunk/Source/WebCore/ChangeLog	2012-11-02 19:15:30 UTC (rev 133330)
+++ trunk/Source/WebCore/ChangeLog	2012-11-02 19:22:24 UTC (rev 133331)
@@ -1,5 +1,23 @@
 2012-11-02  Adam Barth  <aba...@webkit.org>
 
+        [V8] Generalize NodeWrapperMap to be able to handle other sorts of keys
+        https://bugs.webkit.org/show_bug.cgi?id=100973
+
+        Reviewed by Stephen White.
+
+        This is the first step towards using intrusive DOM wrapper maps more
+        widely in WebCore (see
+        http://lists.webkit.org/pipermail/webkit-dev/2012-November/022686.html
+        for more context).
+
+        * bindings/v8/DOMDataStore.cpp:
+        (WebCore::DOMDataStore::DOMDataStore):
+        * bindings/v8/IntrusiveDOMWrapperMap.h:
+        (WebCore):
+        (WebCore::IntrusiveDOMWrapperMap::weakCallback):
+
+2012-11-02  Adam Barth  <aba...@webkit.org>
+
         ASSERT in RenderLayer::hitTestContents can fire
         https://bugs.webkit.org/show_bug.cgi?id=99656
 

Modified: trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp (133330 => 133331)


--- trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp	2012-11-02 19:15:30 UTC (rev 133330)
+++ trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp	2012-11-02 19:22:24 UTC (rev 133331)
@@ -43,7 +43,7 @@
     : m_type(type)
 {
     if (type == MainWorld)
-        m_domNodeMap = adoptPtr(new DOMNodeWrapperMap);
+        m_domNodeMap = adoptPtr(new IntrusiveDOMWrapperMap<Node>);
     else {
         ASSERT(type == IsolatedWorld || type == Worker);
         // FIXME: In principle, we shouldn't need to create this

Modified: trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h (133330 => 133331)


--- trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h	2012-11-02 19:15:30 UTC (rev 133330)
+++ trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h	2012-11-02 19:22:24 UTC (rev 133331)
@@ -35,19 +35,19 @@
 
 namespace WebCore {
 
-class DOMNodeWrapperMap : public DOMWrapperMap<Node> {
+template<class KeyType>
+class IntrusiveDOMWrapperMap : public DOMWrapperMap<KeyType> {
 public:
-    virtual v8::Persistent<v8::Object> get(Node* node) OVERRIDE
+    virtual v8::Persistent<v8::Object> get(KeyType* key) OVERRIDE
     {
-        return node->wrapper();
+        return key->wrapper();
     }
 
-    virtual void set(Node* node, v8::Persistent<v8::Object> wrapper) OVERRIDE
+    virtual void set(KeyType* key, v8::Persistent<v8::Object> wrapper) OVERRIDE
     {
-        ASSERT(node && node->wrapper().IsEmpty());
-        ASSERT(wrapper.WrapperClassId() == v8DOMNodeClassId);
-        node->setWrapper(wrapper);
-        wrapper.MakeWeak(node, weakCallback);
+        ASSERT(key && key->wrapper().IsEmpty());
+        key->setWrapper(wrapper);
+        wrapper.MakeWeak(key, weakCallback);
     }
 
     virtual void clear() OVERRIDE
@@ -57,19 +57,19 @@
 
     virtual void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const OVERRIDE
     {
-        MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::Binding);
+        // This type of wrapper map does not use any additional memory.
     }
 
 private:
     static void weakCallback(v8::Persistent<v8::Value> value, void* context)
     {
-        Node* node = static_cast<Node*>(context);
+        KeyType* key = static_cast<KeyType*>(context);
         ASSERT(value->IsObject());
-        ASSERT(node->wrapper() == v8::Persistent<v8::Object>::Cast(value));
+        ASSERT(key->wrapper() == v8::Persistent<v8::Object>::Cast(value));
 
-        node->clearWrapper();
+        key->clearWrapper();
         value.Dispose();
-        node->deref();
+        key->deref();
     }
 };
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to