summaryrefslogtreecommitdiff
path: root/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp')
-rw-r--r--Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp109
1 files changed, 53 insertions, 56 deletions
diff --git a/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp b/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp
index bc42aba4c..f1e6d8ed4 100644
--- a/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp
+++ b/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2008, 2009, 2016 Apple Inc. All rights reserved.
* Copyright (C) 2009 Google Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -11,10 +11,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
@@ -26,58 +26,70 @@
*/
#include "config.h"
-
#include "JSWorkerGlobalScopeBase.h"
#include "DOMWrapperWorld.h"
#include "JSDOMGlobalObjectTask.h"
#include "JSDedicatedWorkerGlobalScope.h"
+#include "JSDynamicDowncast.h"
#include "JSWorkerGlobalScope.h"
+#include "Language.h"
#include "WorkerGlobalScope.h"
+#include "WorkerThread.h"
+#include <runtime/JSCInlines.h>
+#include <runtime/JSCJSValueInlines.h>
#include <runtime/Microtask.h>
-#if ENABLE(SHARED_WORKERS)
-#include "JSSharedWorkerGlobalScope.h"
-#endif
-
using namespace JSC;
namespace WebCore {
-const ClassInfo JSWorkerGlobalScopeBase::s_info = { "WorkerGlobalScope", &JSDOMGlobalObject::s_info, 0, 0, CREATE_METHOD_TABLE(JSWorkerGlobalScopeBase) };
+const ClassInfo JSWorkerGlobalScopeBase::s_info = { "WorkerGlobalScope", &JSDOMGlobalObject::s_info, 0, CREATE_METHOD_TABLE(JSWorkerGlobalScopeBase) };
-const GlobalObjectMethodTable JSWorkerGlobalScopeBase::s_globalObjectMethodTable = { &allowsAccessFrom, &supportsProfiling, &supportsRichSourceInfo, &shouldInterruptScript, &javaScriptExperimentsEnabled, &queueTaskToEventLoop, &shouldInterruptScriptBeforeTimeout };
+const GlobalObjectMethodTable JSWorkerGlobalScopeBase::s_globalObjectMethodTable = {
+ &supportsRichSourceInfo,
+ &shouldInterruptScript,
+ &javaScriptRuntimeFlags,
+ &queueTaskToEventLoop,
+ &shouldInterruptScriptBeforeTimeout,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ &defaultLanguage
+};
-JSWorkerGlobalScopeBase::JSWorkerGlobalScopeBase(JSC::VM& vm, JSC::Structure* structure, PassRefPtr<WorkerGlobalScope> impl)
- : JSDOMGlobalObject(vm, structure, &normalWorld(vm), &s_globalObjectMethodTable)
- , m_impl(impl)
+JSWorkerGlobalScopeBase::JSWorkerGlobalScopeBase(JSC::VM& vm, JSC::Structure* structure, RefPtr<WorkerGlobalScope>&& impl)
+ : JSDOMGlobalObject(vm, structure, normalWorld(vm), &s_globalObjectMethodTable)
+ , m_wrapped(WTFMove(impl))
{
}
-void JSWorkerGlobalScopeBase::finishCreation(VM& vm)
+void JSWorkerGlobalScopeBase::finishCreation(VM& vm, JSProxy* proxy)
{
- Base::finishCreation(vm);
- ASSERT(inherits(info()));
-}
+ m_proxy.set(vm, this, proxy);
-void JSWorkerGlobalScopeBase::destroy(JSCell* cell)
-{
- static_cast<JSWorkerGlobalScopeBase*>(cell)->JSWorkerGlobalScopeBase::~JSWorkerGlobalScopeBase();
+ Base::finishCreation(vm, m_proxy.get());
+ ASSERT(inherits(vm, info()));
}
-ScriptExecutionContext* JSWorkerGlobalScopeBase::scriptExecutionContext() const
+void JSWorkerGlobalScopeBase::visitChildren(JSCell* cell, SlotVisitor& visitor)
{
- return m_impl.get();
+ JSWorkerGlobalScopeBase* thisObject = jsCast<JSWorkerGlobalScopeBase*>(cell);
+ ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+ Base::visitChildren(thisObject, visitor);
+ visitor.append(thisObject->m_proxy);
}
-bool JSWorkerGlobalScopeBase::allowsAccessFrom(const JSGlobalObject* object, ExecState* exec)
+void JSWorkerGlobalScopeBase::destroy(JSCell* cell)
{
- return JSGlobalObject::allowsAccessFrom(object, exec);
+ static_cast<JSWorkerGlobalScopeBase*>(cell)->JSWorkerGlobalScopeBase::~JSWorkerGlobalScopeBase();
}
-bool JSWorkerGlobalScopeBase::supportsProfiling(const JSGlobalObject* object)
+ScriptExecutionContext* JSWorkerGlobalScopeBase::scriptExecutionContext() const
{
- return JSGlobalObject::supportsProfiling(object);
+ return m_wrapped.get();
}
bool JSWorkerGlobalScopeBase::supportsRichSourceInfo(const JSGlobalObject* object)
@@ -95,64 +107,49 @@ bool JSWorkerGlobalScopeBase::shouldInterruptScriptBeforeTimeout(const JSGlobalO
return JSGlobalObject::shouldInterruptScriptBeforeTimeout(object);
}
-bool JSWorkerGlobalScopeBase::javaScriptExperimentsEnabled(const JSGlobalObject* object)
+RuntimeFlags JSWorkerGlobalScopeBase::javaScriptRuntimeFlags(const JSGlobalObject* object)
{
- return JSGlobalObject::javaScriptExperimentsEnabled(object);
+ const JSWorkerGlobalScopeBase *thisObject = jsCast<const JSWorkerGlobalScopeBase*>(object);
+ return thisObject->m_wrapped->thread().runtimeFlags();
}
-void JSWorkerGlobalScopeBase::queueTaskToEventLoop(const JSGlobalObject* object, PassRefPtr<Microtask> task)
+void JSWorkerGlobalScopeBase::queueTaskToEventLoop(const JSGlobalObject* object, Ref<JSC::Microtask>&& task)
{
const JSWorkerGlobalScopeBase* thisObject = static_cast<const JSWorkerGlobalScopeBase*>(object);
- thisObject->scriptExecutionContext()->postTask(JSGlobalObjectTask::create((JSDOMGlobalObject*)thisObject, task));
+ thisObject->scriptExecutionContext()->postTask(JSGlobalObjectTask((JSDOMGlobalObject*)thisObject, WTFMove(task)));
}
-JSValue toJS(ExecState* exec, JSDOMGlobalObject*, WorkerGlobalScope* workerGlobalScope)
+JSValue toJS(ExecState* exec, JSDOMGlobalObject*, WorkerGlobalScope& workerGlobalScope)
{
return toJS(exec, workerGlobalScope);
}
-JSValue toJS(ExecState*, WorkerGlobalScope* workerGlobalScope)
+JSValue toJS(ExecState*, WorkerGlobalScope& workerGlobalScope)
{
- if (!workerGlobalScope)
- return jsNull();
- WorkerScriptController* script = workerGlobalScope->script();
+ WorkerScriptController* script = workerGlobalScope.script();
if (!script)
return jsNull();
JSWorkerGlobalScope* contextWrapper = script->workerGlobalScopeWrapper();
ASSERT(contextWrapper);
- return contextWrapper;
+ return contextWrapper->proxy();
}
-JSDedicatedWorkerGlobalScope* toJSDedicatedWorkerGlobalScope(JSValue value)
+JSDedicatedWorkerGlobalScope* toJSDedicatedWorkerGlobalScope(VM& vm, JSValue value)
{
if (!value.isObject())
return 0;
- const ClassInfo* classInfo = asObject(value)->classInfo();
+ const ClassInfo* classInfo = asObject(value)->classInfo(vm);
if (classInfo == JSDedicatedWorkerGlobalScope::info())
return jsCast<JSDedicatedWorkerGlobalScope*>(asObject(value));
+ if (classInfo == JSProxy::info())
+ return jsDynamicDowncast<JSDedicatedWorkerGlobalScope*>(vm, jsCast<JSProxy*>(asObject(value))->target());
return 0;
}
-#if ENABLE(SHARED_WORKERS)
-JSSharedWorkerGlobalScope* toJSSharedWorkerGlobalScope(JSValue value)
-{
- if (!value.isObject())
- return 0;
- const ClassInfo* classInfo = asObject(value)->classInfo();
- if (classInfo == JSSharedWorkerGlobalScope::info())
- return jsCast<JSSharedWorkerGlobalScope*>(asObject(value));
- return 0;
-}
-#endif
-JSWorkerGlobalScope* toJSWorkerGlobalScope(JSValue value)
+JSWorkerGlobalScope* toJSWorkerGlobalScope(VM& vm, JSValue value)
{
- JSWorkerGlobalScope* context = toJSDedicatedWorkerGlobalScope(value);
-#if ENABLE(SHARED_WORKERS)
- if (!context)
- context = toJSSharedWorkerGlobalScope(value);
-#endif
- return context;
+ return toJSDedicatedWorkerGlobalScope(vm, value);
}
} // namespace WebCore