summaryrefslogtreecommitdiffstats
path: root/WebCore/bindings/v8/DOMData.h
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/bindings/v8/DOMData.h')
-rw-r--r--WebCore/bindings/v8/DOMData.h34
1 files changed, 6 insertions, 28 deletions
diff --git a/WebCore/bindings/v8/DOMData.h b/WebCore/bindings/v8/DOMData.h
index 7fa9e7d..4d7331b 100644
--- a/WebCore/bindings/v8/DOMData.h
+++ b/WebCore/bindings/v8/DOMData.h
@@ -32,6 +32,7 @@
#define DOMData_h
#include "DOMDataStore.h"
+#include "V8DOMWrapper.h"
namespace WebCore {
@@ -53,62 +54,39 @@ namespace WebCore {
template<typename T>
static void handleWeakObject(DOMDataStore::DOMWrapperMapType, v8::Persistent<v8::Object>, T* domObject);
- void forgetDelayedObject(void* object) { m_delayedObjectMap.take(object); }
-
- // This is to ensure that we will deref DOM objects from the owning thread,
- // not the GC thread. The helper function will be scheduled by the GC
- // thread to get called from the owning thread.
- static void derefDelayedObjectsInCurrentThread(void*);
- void derefDelayedObjects();
-
template<typename T>
static void removeObjectsFromWrapperMap(AbstractWeakReferenceMap<T, v8::Object>& domMap);
ThreadIdentifier owningThread() const { return m_owningThread; }
private:
- typedef WTF::HashMap<void*, V8ClassIndex::V8WrapperType> DelayedObjectMap;
-
- void ensureDeref(V8ClassIndex::V8WrapperType type, void* domObject);
- static void derefObject(V8ClassIndex::V8WrapperType type, void* domObject);
+ static void derefObject(WrapperTypeInfo* type, void* domObject);
template<typename T>
class WrapperMapObjectRemover : public WeakReferenceMap<T, v8::Object>::Visitor {
public:
virtual void visitDOMWrapper(T* domObject, v8::Persistent<v8::Object> v8Object)
{
- V8ClassIndex::V8WrapperType type = V8DOMWrapper::domWrapperType(v8Object);
+ WrapperTypeInfo* type = V8DOMWrapper::domWrapperType(v8Object);
derefObject(type, domObject);
v8Object.Dispose();
}
};
- // Stores all the DOM objects that are delayed to be processed when the
- // owning thread gains control.
- DelayedObjectMap m_delayedObjectMap;
-
- // The flag to indicate if the task to do the delayed process has
- // already been posted.
- bool m_delayedProcessingScheduled;
-
- bool m_isMainThread;
ThreadIdentifier m_owningThread;
};
template<typename T>
void DOMData::handleWeakObject(DOMDataStore::DOMWrapperMapType mapType, v8::Persistent<v8::Object> v8Object, T* domObject)
{
- ASSERT(WTF::isMainThread());
DOMDataList& list = DOMDataStore::allStores();
for (size_t i = 0; i < list.size(); ++i) {
DOMDataStore* store = list[i];
+ ASSERT(store->domData()->owningThread() == WTF::currentThread());
- DOMDataStore::InternalDOMWrapperMap<T>* domMap = static_cast<DOMDataStore::InternalDOMWrapperMap<T>*>(store->getDOMWrapperMap(mapType));
-
- if (domMap->removeIfPresent(domObject, v8Object)) {
- ASSERT(store->domData()->owningThread() == WTF::currentThread());
+ DOMWrapperMap<T>* domMap = static_cast<DOMWrapperMap<T>*>(store->getDOMWrapperMap(mapType));
+ if (domMap->removeIfPresent(domObject, v8Object))
store->domData()->derefObject(V8DOMWrapper::domWrapperType(v8Object), domObject);
- }
}
}