aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/bindings/ScriptExecutionContext.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/javascript/jsc/bindings/ScriptExecutionContext.h')
-rw-r--r--src/javascript/jsc/bindings/ScriptExecutionContext.h75
1 files changed, 43 insertions, 32 deletions
diff --git a/src/javascript/jsc/bindings/ScriptExecutionContext.h b/src/javascript/jsc/bindings/ScriptExecutionContext.h
index e5644c2fc..72837368e 100644
--- a/src/javascript/jsc/bindings/ScriptExecutionContext.h
+++ b/src/javascript/jsc/bindings/ScriptExecutionContext.h
@@ -14,8 +14,12 @@
namespace uWS {
template<bool isServer, bool isClient, typename UserData>
struct WebSocketContext;
-
}
+
+#ifndef ZIG_GLOBAL_OBJECT_DEFINED
+#include "ZigGlobalObject.h"
+#endif
+
struct us_socket_t;
struct us_socket_context_t;
struct us_loop_t;
@@ -24,42 +28,48 @@ namespace WebCore {
class WebSocket;
-class ScriptExecutionContext : public CanMakeWeakPtr<ScriptExecutionContext> {
-public:
- class Task {
- WTF_MAKE_FAST_ALLOCATED;
+class ScriptExecutionContext;
- public:
- enum CleanupTaskTag { CleanupTask };
+class EventLoopTask {
+ WTF_MAKE_FAST_ALLOCATED;
- template<typename T, typename = typename std::enable_if<!std::is_base_of<Task, T>::value && std::is_convertible<T, Function<void(ScriptExecutionContext&)>>::value>::type>
- Task(T task)
- : m_task(WTFMove(task))
- , m_isCleanupTask(false)
- {
- }
+public:
+ enum CleanupTaskTag { CleanupTask };
- Task(Function<void()>&& task)
- : m_task([task = WTFMove(task)](ScriptExecutionContext&) { task(); })
- , m_isCleanupTask(false)
- {
- }
+ template<typename T, typename = typename std::enable_if<!std::is_base_of<EventLoopTask, T>::value && std::is_convertible<T, Function<void(ScriptExecutionContext&)>>::value>::type>
+ EventLoopTask(T task)
+ : m_task(WTFMove(task))
+ , m_isCleanupTask(false)
+ {
+ }
- template<typename T, typename = typename std::enable_if<std::is_convertible<T, Function<void(ScriptExecutionContext&)>>::value>::type>
- Task(CleanupTaskTag, T task)
- : m_task(WTFMove(task))
- , m_isCleanupTask(true)
- {
- }
+ EventLoopTask(Function<void()>&& task)
+ : m_task([task = WTFMove(task)](ScriptExecutionContext&) { task(); })
+ , m_isCleanupTask(false)
+ {
+ }
- void performTask(ScriptExecutionContext& context) { m_task(context); }
- bool isCleanupTask() const { return m_isCleanupTask; }
+ template<typename T, typename = typename std::enable_if<std::is_convertible<T, Function<void(ScriptExecutionContext&)>>::value>::type>
+ EventLoopTask(CleanupTaskTag, T task)
+ : m_task(WTFMove(task))
+ , m_isCleanupTask(true)
+ {
+ }
- protected:
- Function<void(ScriptExecutionContext&)> m_task;
- bool m_isCleanupTask;
- };
+ void performTask(ScriptExecutionContext& context)
+ {
+ m_task(context);
+ delete this;
+ }
+ bool isCleanupTask() const { return m_isCleanupTask; }
+protected:
+ Function<void(ScriptExecutionContext&)> m_task;
+ bool m_isCleanupTask;
+};
+
+class ScriptExecutionContext : public CanMakeWeakPtr<ScriptExecutionContext> {
+public:
public:
ScriptExecutionContext(JSC::VM* vm, JSC::JSGlobalObject* globalObject)
: m_vm(vm)
@@ -96,9 +106,10 @@ public:
// {
// }
- void postTask(Task&& task)
+ void postTask(Function<void(ScriptExecutionContext&)>&& lambda)
{
-
+ auto* task = new EventLoopTask(WTFMove(lambda));
+ reinterpret_cast<Zig::GlobalObject*>(m_globalObject)->queueTask(task);
} // Executes the task on context's thread asynchronously.
template<typename... Arguments>