diff options
Diffstat (limited to 'WebCore/bindings/v8/DOMData.h')
-rw-r--r-- | WebCore/bindings/v8/DOMData.h | 34 |
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); - } } } |