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