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