JSDOMWindowShell.cpp [plain text]
#include "config.h"
#include "JSDOMWindowShell.h"
#include "Frame.h"
#include "JSDOMWindow.h"
#include "DOMWindow.h"
#include "ScriptController.h"
#include <heap/StrongInlines.h>
#include <runtime/JSObject.h>
using namespace JSC;
namespace WebCore {
ASSERT_CLASS_FITS_IN_CELL(JSDOMWindowShell);
const ClassInfo JSDOMWindowShell::s_info = { "JSDOMWindowShell", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(JSDOMWindowShell) };
JSDOMWindowShell::JSDOMWindowShell(Structure* structure, DOMWrapperWorld* world)
: Base(*world->globalData(), structure)
, m_world(world)
{
}
void JSDOMWindowShell::finishCreation(JSGlobalData& globalData, PassRefPtr<DOMWindow> window)
{
Base::finishCreation(globalData);
ASSERT(inherits(&s_info));
setWindow(window);
}
void JSDOMWindowShell::destroy(JSCell* cell)
{
jsCast<JSDOMWindowShell*>(cell)->JSDOMWindowShell::~JSDOMWindowShell();
}
void JSDOMWindowShell::setWindow(PassRefPtr<DOMWindow> domWindow)
{
ASSERT(!window() || domWindow.get() != window()->impl());
Structure* prototypeStructure = JSDOMWindowPrototype::createStructure(*JSDOMWindow::commonJSGlobalData(), 0, jsNull());
Strong<JSDOMWindowPrototype> prototype(*JSDOMWindow::commonJSGlobalData(), JSDOMWindowPrototype::create(*JSDOMWindow::commonJSGlobalData(), 0, prototypeStructure));
Structure* structure = JSDOMWindow::createStructure(*JSDOMWindow::commonJSGlobalData(), 0, prototype.get());
JSDOMWindow* jsDOMWindow = JSDOMWindow::create(*JSDOMWindow::commonJSGlobalData(), structure, domWindow, this);
prototype->structure()->setGlobalObject(*JSDOMWindow::commonJSGlobalData(), jsDOMWindow);
setWindow(*JSDOMWindow::commonJSGlobalData(), jsDOMWindow);
ASSERT(jsDOMWindow->globalObject() == jsDOMWindow);
ASSERT(prototype->globalObject() == jsDOMWindow);
}
UString JSDOMWindowShell::className(const JSObject* object)
{
const JSDOMWindowShell* thisObject = jsCast<const JSDOMWindowShell*>(object);
return thisObject->window()->methodTable()->className(thisObject->window());
}
bool JSDOMWindowShell::getOwnPropertySlot(JSCell* cell, ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
{
JSDOMWindowShell* thisObject = jsCast<JSDOMWindowShell*>(cell);
return thisObject->window()->methodTable()->getOwnPropertySlot(thisObject->window(), exec, propertyName, slot);
}
bool JSDOMWindowShell::getOwnPropertyDescriptor(JSObject* object, ExecState* exec, const Identifier& propertyName, PropertyDescriptor& descriptor)
{
JSDOMWindowShell* thisObject = jsCast<JSDOMWindowShell*>(object);
return thisObject->window()->methodTable()->getOwnPropertyDescriptor(thisObject->window(), exec, propertyName, descriptor);
}
void JSDOMWindowShell::put(JSCell* cell, ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
{
JSDOMWindowShell* thisObject = jsCast<JSDOMWindowShell*>(cell);
thisObject->window()->methodTable()->put(thisObject->window(), exec, propertyName, value, slot);
}
void JSDOMWindowShell::putDirectVirtual(JSObject* object, ExecState* exec, const Identifier& propertyName, JSValue value, unsigned attributes)
{
JSDOMWindowShell* thisObject = jsCast<JSDOMWindowShell*>(object);
thisObject->window()->putDirectVirtual(thisObject->window(), exec, propertyName, value, attributes);
}
bool JSDOMWindowShell::defineOwnProperty(JSC::JSObject* object, JSC::ExecState* exec, const JSC::Identifier& propertyName, JSC::PropertyDescriptor& descriptor, bool shouldThrow)
{
JSDOMWindowShell* thisObject = jsCast<JSDOMWindowShell*>(object);
return thisObject->window()->methodTable()->defineOwnProperty(thisObject->window(), exec, propertyName, descriptor, shouldThrow);
}
bool JSDOMWindowShell::deleteProperty(JSCell* cell, ExecState* exec, const Identifier& propertyName)
{
JSDOMWindowShell* thisObject = jsCast<JSDOMWindowShell*>(cell);
return thisObject->window()->methodTable()->deleteProperty(thisObject->window(), exec, propertyName);
}
void JSDOMWindowShell::getPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)
{
JSDOMWindowShell* thisObject = jsCast<JSDOMWindowShell*>(object);
thisObject->window()->methodTable()->getPropertyNames(thisObject->window(), exec, propertyNames, mode);
}
void JSDOMWindowShell::getOwnPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)
{
JSDOMWindowShell* thisObject = jsCast<JSDOMWindowShell*>(object);
thisObject->window()->methodTable()->getOwnPropertyNames(thisObject->window(), exec, propertyNames, mode);
}
DOMWindow* JSDOMWindowShell::impl() const
{
return window()->impl();
}
JSValue toJS(ExecState* exec, Frame* frame)
{
if (!frame)
return jsNull();
return frame->script()->windowShell(currentWorld(exec));
}
JSDOMWindowShell* toJSDOMWindowShell(Frame* frame, DOMWrapperWorld* isolatedWorld)
{
if (!frame)
return 0;
return frame->script()->windowShell(isolatedWorld);
}
}