JSDOMGlobalObject.cpp [plain text]
#include "config.h"
#include "JSDOMGlobalObject.h"
#include "Document.h"
#include "JSDOMWindow.h"
#include "JSEventListener.h"
#if ENABLE(WORKERS)
#include "JSWorkerContext.h"
#include "WorkerContext.h"
#endif
using namespace JSC;
namespace WebCore {
JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData()
: evt(0)
{
}
JSDOMGlobalObject::JSDOMGlobalObject(PassRefPtr<Structure> structure, JSDOMGlobalObject::JSDOMGlobalObjectData* data, JSObject* thisValue)
: JSGlobalObject(structure, data, thisValue)
{
}
JSDOMGlobalObject::~JSDOMGlobalObject()
{
JSListenersMap::iterator it = d()->jsEventListeners.begin();
JSListenersMap::iterator end = d()->jsEventListeners.end();
for (; it != end; ++it)
it->second->clearGlobalObject();
}
void JSDOMGlobalObject::mark()
{
Base::mark();
JSDOMStructureMap::iterator end = structures().end();
for (JSDOMStructureMap::iterator it = structures().begin(); it != end; ++it)
it->second->mark();
JSDOMConstructorMap::iterator end2 = constructors().end();
for (JSDOMConstructorMap::iterator it2 = constructors().begin(); it2 != end2; ++it2) {
if (!it2->second->marked())
it2->second->mark();
}
}
JSEventListener* JSDOMGlobalObject::findJSEventListener(JSValue val)
{
if (!val.isObject())
return 0;
return d()->jsEventListeners.get(asObject(val));
}
PassRefPtr<JSEventListener> JSDOMGlobalObject::findOrCreateJSEventListener(JSValue val)
{
if (JSEventListener* listener = findJSEventListener(val))
return listener;
if (!val.isObject())
return 0;
return JSEventListener::create(asObject(val), this, false).get();
}
PassRefPtr<JSEventListener> JSDOMGlobalObject::createJSAttributeEventListener(JSValue val)
{
if (!val.isObject())
return 0;
return JSEventListener::create(asObject(val), this, true).get();
}
JSDOMGlobalObject::JSListenersMap& JSDOMGlobalObject::jsEventListeners()
{
return d()->jsEventListeners;
}
void JSDOMGlobalObject::setCurrentEvent(Event* evt)
{
d()->evt = evt;
}
Event* JSDOMGlobalObject::currentEvent() const
{
return d()->evt;
}
JSDOMGlobalObject* toJSDOMGlobalObject(ScriptExecutionContext* scriptExecutionContext)
{
if (scriptExecutionContext->isDocument())
return toJSDOMWindow(static_cast<Document*>(scriptExecutionContext)->frame());
#if ENABLE(WORKERS)
if (scriptExecutionContext->isWorkerContext())
return static_cast<WorkerContext*>(scriptExecutionContext)->script()->workerContextWrapper();
#endif
ASSERT_NOT_REACHED();
return 0;
}
}