#include "config.h"
#include "V8DOMMap.h"
#include "DOMData.h"
#include "DOMDataStore.h"
#include "ScopedDOMDataStore.h"
#include "V8Binding.h"
#include <wtf/MainThread.h>
namespace WebCore {
DOMDataStoreHandle::DOMDataStoreHandle()
: m_store(adoptPtr(new ScopedDOMDataStore()))
{
V8BindingPerIsolateData::current()->registerDOMDataStore(m_store.get());
}
DOMDataStoreHandle::~DOMDataStoreHandle()
{
V8BindingPerIsolateData::current()->unregisterDOMDataStore(m_store.get());
}
void enableFasterDOMStoreAccess()
{
}
DOMNodeMapping& getDOMNodeMap(v8::Isolate* isolate)
{
return DOMData::getCurrentStore(isolate).domNodeMap();
}
DOMNodeMapping& getActiveDOMNodeMap(v8::Isolate* isolate)
{
return DOMData::getCurrentStore(isolate).activeDomNodeMap();
}
DOMWrapperMap<void>& getDOMObjectMap(v8::Isolate* isolate)
{
return DOMData::getCurrentStore(isolate).domObjectMap();
}
DOMWrapperMap<void>& getActiveDOMObjectMap(v8::Isolate* isolate)
{
return DOMData::getCurrentStore(isolate).activeDomObjectMap();
}
void removeAllDOMObjects()
{
DOMDataStore& store = DOMData::getCurrentStore();
v8::HandleScope scope;
if (isMainThread()) {
DOMData::removeObjectsFromWrapperMap<Node>(&store, store.domNodeMap());
DOMData::removeObjectsFromWrapperMap<Node>(&store, store.activeDomNodeMap());
}
DOMData::removeObjectsFromWrapperMap<void>(&store, store.domObjectMap());
DOMData::removeObjectsFromWrapperMap<void>(&store, store.activeDomObjectMap());
}
void visitDOMNodes(DOMWrapperMap<Node>::Visitor* visitor)
{
v8::HandleScope scope;
DOMDataList& list = DOMDataStore::allStores();
for (size_t i = 0; i < list.size(); ++i) {
DOMDataStore* store = list[i];
store->domNodeMap().visit(store, visitor);
}
}
void visitActiveDOMNodes(DOMWrapperMap<Node>::Visitor* visitor)
{
v8::HandleScope scope;
DOMDataList& list = DOMDataStore::allStores();
for (size_t i = 0; i < list.size(); ++i) {
DOMDataStore* store = list[i];
store->activeDomNodeMap().visit(store, visitor);
}
}
void visitDOMObjects(DOMWrapperMap<void>::Visitor* visitor)
{
v8::HandleScope scope;
DOMDataList& list = DOMDataStore::allStores();
for (size_t i = 0; i < list.size(); ++i) {
DOMDataStore* store = list[i];
store->domObjectMap().visit(store, visitor);
}
}
void visitActiveDOMObjects(DOMWrapperMap<void>::Visitor* visitor)
{
v8::HandleScope scope;
DOMDataList& list = DOMDataStore::allStores();
for (size_t i = 0; i < list.size(); ++i) {
DOMDataStore* store = list[i];
store->activeDomObjectMap().visit(store, visitor);
}
}
}