#include "config.h"
#include "ScriptState.h"
#include "Document.h"
#include "JSDOMWindowBase.h"
#include "JSWorkerGlobalScope.h"
#include "MainFrame.h"
#include "Node.h"
#include "Page.h"
#include "ScriptController.h"
#include "WorkerGlobalScope.h"
#include "WorkerScriptController.h"
#include <heap/StrongInlines.h>
#include <interpreter/CallFrame.h>
#include <runtime/JSGlobalObject.h>
namespace WebCore {
DOMWindow* domWindowFromExecState(JSC::ExecState* scriptState)
{
JSC::JSGlobalObject* globalObject = scriptState->lexicalGlobalObject();
if (!globalObject->inherits(JSDOMWindowBase::info()))
return nullptr;
return &JSC::jsCast<JSDOMWindowBase*>(globalObject)->impl();
}
Frame* frameFromExecState(JSC::ExecState* scriptState)
{
ScriptExecutionContext* context = scriptExecutionContextFromExecState(scriptState);
Document* document = context && context->isDocument() ? toDocument(context) : nullptr;
return document ? document->frame() : nullptr;
}
ScriptExecutionContext* scriptExecutionContextFromExecState(JSC::ExecState* scriptState)
{
JSC::JSGlobalObject* globalObject = scriptState->lexicalGlobalObject();
if (!globalObject->inherits(JSDOMGlobalObject::info()))
return nullptr;
return JSC::jsCast<JSDOMGlobalObject*>(globalObject)->scriptExecutionContext();
}
JSC::ExecState* mainWorldExecState(Frame* frame)
{
if (!frame)
return nullptr;
JSDOMWindowShell* shell = frame->script().windowShell(mainThreadNormalWorld());
return shell->window()->globalExec();
}
JSC::ExecState* execStateFromNode(DOMWrapperWorld& world, Node* node)
{
if (!node)
return nullptr;
Frame* frame = node->document().frame();
if (!frame)
return nullptr;
if (!frame->script().canExecuteScripts(NotAboutToExecuteScript))
return nullptr;
return frame->script().globalObject(world)->globalExec();
}
JSC::ExecState* execStateFromPage(DOMWrapperWorld& world, Page* page)
{
return page->mainFrame().script().globalObject(world)->globalExec();
}
JSC::ExecState* execStateFromWorkerGlobalScope(WorkerGlobalScope* workerGlobalScope)
{
return workerGlobalScope->script()->workerGlobalScopeWrapper()->globalExec();
}
}