summaryrefslogtreecommitdiffstats
path: root/WebCore/bindings/v8/DOMData.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/bindings/v8/DOMData.cpp')
-rw-r--r--WebCore/bindings/v8/DOMData.cpp71
1 files changed, 3 insertions, 68 deletions
diff --git a/WebCore/bindings/v8/DOMData.cpp b/WebCore/bindings/v8/DOMData.cpp
index 417426f..568fc2c 100644
--- a/WebCore/bindings/v8/DOMData.cpp
+++ b/WebCore/bindings/v8/DOMData.cpp
@@ -39,9 +39,7 @@
namespace WebCore {
DOMData::DOMData()
- : m_delayedProcessingScheduled(false)
- , m_isMainThread(WTF::isMainThread())
- , m_owningThread(WTF::currentThread())
+ : m_owningThread(WTF::currentThread())
{
}
@@ -58,72 +56,9 @@ DOMData* DOMData::getCurrent()
return childThreadDOMData;
}
-void DOMData::ensureDeref(V8ClassIndex::V8WrapperType type, void* domObject)
+void DOMData::derefObject(WrapperTypeInfo* type, void* domObject)
{
- if (m_owningThread == WTF::currentThread()) {
- // No need to delay the work. We can deref right now.
- derefObject(type, domObject);
- return;
- }
-
- // We need to do the deref on the correct thread.
- m_delayedObjectMap.set(domObject, type);
-
- // Post a task to the owning thread in order to process the delayed queue.
- // FIXME: For now, we can only post to main thread due to WTF task posting limitation. We will fix this when we work on nested worker.
- if (!m_delayedProcessingScheduled) {
- m_delayedProcessingScheduled = true;
- if (isMainThread())
- WTF::callOnMainThread(&derefDelayedObjectsInCurrentThread, 0);
- }
-}
-
-void DOMData::derefObject(V8ClassIndex::V8WrapperType type, void* domObject)
-{
- switch (type) {
- case V8ClassIndex::NODE:
- static_cast<Node*>(domObject)->deref();
- break;
-
-#define MakeCase(type, name) \
- case V8ClassIndex::type: static_cast<name*>(domObject)->deref(); break;
- DOM_OBJECT_TYPES(MakeCase) // This includes both active and non-active.
-#undef MakeCase
-
-#if ENABLE(SVG)
-#define MakeCase(type, name) \
- case V8ClassIndex::type: static_cast<name*>(domObject)->deref(); break;
- SVG_OBJECT_TYPES(MakeCase) // This also includes SVGElementInstance.
-#undef MakeCase
-
-#define MakeCase(type, name) \
- case V8ClassIndex::type: \
- static_cast<V8SVGPODTypeWrapper<name>*>(domObject)->deref(); break;
- SVG_POD_NATIVE_TYPES(MakeCase)
-#undef MakeCase
-#endif
-
- default:
- ASSERT_NOT_REACHED();
- break;
- }
-}
-
-void DOMData::derefDelayedObjects()
-{
- WTF::MutexLocker locker(DOMDataStore::allStoresMutex());
-
- m_delayedProcessingScheduled = false;
-
- for (DelayedObjectMap::iterator iter(m_delayedObjectMap.begin()); iter != m_delayedObjectMap.end(); ++iter)
- derefObject(iter->second, iter->first);
-
- m_delayedObjectMap.clear();
-}
-
-void DOMData::derefDelayedObjectsInCurrentThread(void*)
-{
- getCurrent()->derefDelayedObjects();
+ type->derefObject(domObject);
}
} // namespace WebCore