forked from BabylonJS/JsRuntimeHost
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAbortController.cpp
More file actions
50 lines (43 loc) · 1.54 KB
/
Copy pathAbortController.cpp
File metadata and controls
50 lines (43 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "AbortController.h"
#include <cassert>
namespace Babylon::Polyfills::Internal
{
void AbortController::Initialize(Napi::Env env)
{
static constexpr auto JS_ABORT_CONTROLLER_CONSTRUCTOR_NAME = "AbortController";
if (env.Global().Get(JS_ABORT_CONTROLLER_CONSTRUCTOR_NAME).IsUndefined())
{
Napi::Function func = DefineClass(
env,
JS_ABORT_CONTROLLER_CONSTRUCTOR_NAME,
{
InstanceAccessor("signal", &AbortController::GetSignal, nullptr),
InstanceMethod("abort", &AbortController::Abort),
});
env.Global().Set(JS_ABORT_CONTROLLER_CONSTRUCTOR_NAME, func);
}
}
Napi::Value AbortController::GetSignal(const Napi::CallbackInfo&)
{
return m_signal.Value();
}
void AbortController::Abort(const Napi::CallbackInfo& info)
{
AbortSignal* sig = AbortSignal::Unwrap(m_signal.Value());
assert(sig != nullptr);
sig->Abort(info.Length() > 0 ? info[0] : info.Env().Undefined());
}
AbortController::AbortController(const Napi::CallbackInfo& info)
: Napi::ObjectWrap<AbortController>{info}
{
m_signal = Napi::Persistent(info.Env().Global().Get(AbortSignal::JS_ABORT_SIGNAL_CONSTRUCTOR_NAME).As<Napi::Function>().New({}));
}
}
namespace Babylon::Polyfills::AbortController
{
void BABYLON_API Initialize(Napi::Env env)
{
Internal::AbortController::Initialize(env);
Internal::AbortSignal::Initialize(env);
}
}