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 {
const ClassInfo JSDOMGlobalObject::s_info = { "DOMGlobalObject", &JSGlobalObject::s_info, 0, 0, CREATE_METHOD_TABLE(JSDOMGlobalObject) };
JSDOMGlobalObject::JSDOMGlobalObject(VM& vm, Structure* structure, PassRefPtr<DOMWrapperWorld> world, const GlobalObjectMethodTable* globalObjectMethodTable)
: JSGlobalObject(vm, structure, globalObjectMethodTable)
, m_currentEvent(0)
, m_world(world)
{
}
void JSDOMGlobalObject::destroy(JSCell* cell)
{
static_cast<JSDOMGlobalObject*>(cell)->JSDOMGlobalObject::~JSDOMGlobalObject();
}
void JSDOMGlobalObject::finishCreation(VM& vm)
{
Base::finishCreation(vm);
ASSERT(inherits(&s_info));
}
void JSDOMGlobalObject::finishCreation(VM& vm, JSObject* thisValue)
{
Base::finishCreation(vm, thisValue);
ASSERT(inherits(&s_info));
}
ScriptExecutionContext* JSDOMGlobalObject::scriptExecutionContext() const
{
if (inherits(&JSDOMWindowBase::s_info))
return jsCast<const JSDOMWindowBase*>(this)->scriptExecutionContext();
#if ENABLE(WORKERS)
if (inherits(&JSWorkerContextBase::s_info))
return jsCast<const JSWorkerContextBase*>(this)->scriptExecutionContext();
#endif
ASSERT_NOT_REACHED();
return 0;
}
void JSDOMGlobalObject::visitChildren(JSCell* cell, SlotVisitor& visitor)
{
JSDOMGlobalObject* thisObject = jsCast<JSDOMGlobalObject*>(cell);
ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
Base::visitChildren(thisObject, visitor);
JSDOMStructureMap::iterator end = thisObject->structures().end();
for (JSDOMStructureMap::iterator it = thisObject->structures().begin(); it != end; ++it)
visitor.append(&it->value);
JSDOMConstructorMap::iterator end2 = thisObject->constructors().end();
for (JSDOMConstructorMap::iterator it2 = thisObject->constructors().begin(); it2 != end2; ++it2)
visitor.append(&it2->value);
}
void JSDOMGlobalObject::setCurrentEvent(Event* currentEvent)
{
m_currentEvent = currentEvent;
}
Event* JSDOMGlobalObject::currentEvent() const
{
return m_currentEvent;
}
JSDOMGlobalObject* toJSDOMGlobalObject(Document* document, JSC::ExecState* exec)
{
return toJSDOMWindow(document->frame(), currentWorld(exec));
}
JSDOMGlobalObject* toJSDOMGlobalObject(ScriptExecutionContext* scriptExecutionContext, JSC::ExecState* exec)
{
if (scriptExecutionContext->isDocument())
return toJSDOMGlobalObject(toDocument(scriptExecutionContext), exec);
#if ENABLE(WORKERS)
if (scriptExecutionContext->isWorkerContext())
return static_cast<WorkerContext*>(scriptExecutionContext)->script()->workerContextWrapper();
#endif
ASSERT_NOT_REACHED();
return 0;
}
JSDOMGlobalObject* toJSDOMGlobalObject(Document* document, DOMWrapperWorld* world)
{
return toJSDOMWindow(document->frame(), world);
}
JSDOMGlobalObject* toJSDOMGlobalObject(ScriptExecutionContext* scriptExecutionContext, DOMWrapperWorld* world)
{
if (scriptExecutionContext->isDocument())
return toJSDOMGlobalObject(toDocument(scriptExecutionContext), world);
#if ENABLE(WORKERS)
if (scriptExecutionContext->isWorkerContext())
return static_cast<WorkerContext*>(scriptExecutionContext)->script()->workerContextWrapper();
#endif
ASSERT_NOT_REACHED();
return 0;
}
}