JSWorkerGlobalScopeBase.cpp [plain text]
#include "config.h"
#include "JSWorkerGlobalScopeBase.h"
#include "DOMWrapperWorld.h"
#include "JSDOMGlobalObjectTask.h"
#include "JSDedicatedWorkerGlobalScope.h"
#include "JSWorkerGlobalScope.h"
#include "WorkerGlobalScope.h"
#include <runtime/JSCJSValueInlines.h>
#include <runtime/Microtask.h>
using namespace JSC;
namespace WebCore {
const ClassInfo JSWorkerGlobalScopeBase::s_info = { "WorkerGlobalScope", &JSDOMGlobalObject::s_info, 0, CREATE_METHOD_TABLE(JSWorkerGlobalScopeBase) };
const GlobalObjectMethodTable JSWorkerGlobalScopeBase::s_globalObjectMethodTable = { &allowsAccessFrom, &supportsProfiling, &supportsRichSourceInfo, &shouldInterruptScript, &javaScriptRuntimeFlags, &queueTaskToEventLoop, &shouldInterruptScriptBeforeTimeout };
JSWorkerGlobalScopeBase::JSWorkerGlobalScopeBase(JSC::VM& vm, JSC::Structure* structure, PassRefPtr<WorkerGlobalScope> impl)
: JSDOMGlobalObject(vm, structure, &normalWorld(vm), &s_globalObjectMethodTable)
, m_impl(impl)
{
}
void JSWorkerGlobalScopeBase::finishCreation(VM& vm)
{
Base::finishCreation(vm);
ASSERT(inherits(info()));
}
void JSWorkerGlobalScopeBase::destroy(JSCell* cell)
{
static_cast<JSWorkerGlobalScopeBase*>(cell)->JSWorkerGlobalScopeBase::~JSWorkerGlobalScopeBase();
}
ScriptExecutionContext* JSWorkerGlobalScopeBase::scriptExecutionContext() const
{
return m_impl.get();
}
bool JSWorkerGlobalScopeBase::allowsAccessFrom(const JSGlobalObject* object, ExecState* exec)
{
return JSGlobalObject::allowsAccessFrom(object, exec);
}
bool JSWorkerGlobalScopeBase::supportsProfiling(const JSGlobalObject* object)
{
return JSGlobalObject::supportsProfiling(object);
}
bool JSWorkerGlobalScopeBase::supportsRichSourceInfo(const JSGlobalObject* object)
{
return JSGlobalObject::supportsRichSourceInfo(object);
}
bool JSWorkerGlobalScopeBase::shouldInterruptScript(const JSGlobalObject* object)
{
return JSGlobalObject::shouldInterruptScript(object);
}
bool JSWorkerGlobalScopeBase::shouldInterruptScriptBeforeTimeout(const JSGlobalObject* object)
{
return JSGlobalObject::shouldInterruptScriptBeforeTimeout(object);
}
RuntimeFlags JSWorkerGlobalScopeBase::javaScriptRuntimeFlags(const JSGlobalObject* object)
{
return JSGlobalObject::javaScriptRuntimeFlags(object);
}
void JSWorkerGlobalScopeBase::queueTaskToEventLoop(const JSGlobalObject* object, PassRefPtr<Microtask> task)
{
const JSWorkerGlobalScopeBase* thisObject = static_cast<const JSWorkerGlobalScopeBase*>(object);
thisObject->scriptExecutionContext()->postTask(JSGlobalObjectTask((JSDOMGlobalObject*)thisObject, task));
}
JSValue toJS(ExecState* exec, JSDOMGlobalObject*, WorkerGlobalScope* workerGlobalScope)
{
return toJS(exec, workerGlobalScope);
}
JSValue toJS(ExecState*, WorkerGlobalScope* workerGlobalScope)
{
if (!workerGlobalScope)
return jsNull();
WorkerScriptController* script = workerGlobalScope->script();
if (!script)
return jsNull();
JSWorkerGlobalScope* contextWrapper = script->workerGlobalScopeWrapper();
ASSERT(contextWrapper);
return contextWrapper;
}
JSDedicatedWorkerGlobalScope* toJSDedicatedWorkerGlobalScope(JSValue value)
{
if (!value.isObject())
return 0;
const ClassInfo* classInfo = asObject(value)->classInfo();
if (classInfo == JSDedicatedWorkerGlobalScope::info())
return jsCast<JSDedicatedWorkerGlobalScope*>(asObject(value));
if (classInfo == JSProxy::info())
return jsDynamicCast<JSDedicatedWorkerGlobalScope*>(jsCast<JSProxy*>(asObject(value))->target());
return 0;
}
JSWorkerGlobalScope* toJSWorkerGlobalScope(JSValue value)
{
return toJSDedicatedWorkerGlobalScope(value);
}
}