diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2019-06-05 17:06:32 +0200 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2019-06-09 19:51:30 +0200 |
commit | 890223dede339622e7e66e8629805f7904840870 (patch) | |
tree | 96b2150280c3d3fb3ef159715a7b036d16f78a10 /src/node_messaging.cc | |
parent | 0c1fd2069376cb2b3796ea83dc131a0a1def132d (diff) | |
download | android-node-v8-890223dede339622e7e66e8629805f7904840870.tar.gz android-node-v8-890223dede339622e7e66e8629805f7904840870.tar.bz2 android-node-v8-890223dede339622e7e66e8629805f7904840870.zip |
src: expose DOMException to internalBinding('message') for testing
Instead of using a hack to get it in the test.
PR-URL: https://github.com/nodejs/node/pull/28072
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'src/node_messaging.cc')
-rw-r--r-- | src/node_messaging.cc | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/src/node_messaging.cc b/src/node_messaging.cc index fa583a2570..0e782ef726 100644 --- a/src/node_messaging.cc +++ b/src/node_messaging.cc @@ -186,27 +186,30 @@ uint32_t Message::AddWASMModule(WasmModuleObject::TransferrableModule&& mod) { namespace { -void ThrowDataCloneException(Local<Context> context, Local<String> message) { +MaybeLocal<Function> GetDOMException(Local<Context> context) { Isolate* isolate = context->GetIsolate(); - Local<Value> argv[] = { - message, - FIXED_ONE_BYTE_STRING(isolate, "DataCloneError") - }; - Local<Value> exception; - Local<Object> per_context_bindings; Local<Value> domexception_ctor_val; if (!GetPerContextExports(context).ToLocal(&per_context_bindings) || !per_context_bindings->Get(context, FIXED_ONE_BYTE_STRING(isolate, "DOMException")) .ToLocal(&domexception_ctor_val)) { - return; + return MaybeLocal<Function>(); } - CHECK(domexception_ctor_val->IsFunction()); Local<Function> domexception_ctor = domexception_ctor_val.As<Function>(); - if (!domexception_ctor->NewInstance(context, arraysize(argv), argv) - .ToLocal(&exception)) { + return domexception_ctor; +} + +void ThrowDataCloneException(Local<Context> context, Local<String> message) { + Isolate* isolate = context->GetIsolate(); + Local<Value> argv[] = {message, + FIXED_ONE_BYTE_STRING(isolate, "DataCloneError")}; + Local<Value> exception; + Local<Function> domexception_ctor; + if (!GetDOMException(context).ToLocal(&domexception_ctor) || + !domexception_ctor->NewInstance(context, arraysize(argv), argv) + .ToLocal(&exception)) { return; } isolate->ThrowException(exception); @@ -900,6 +903,15 @@ static void InitMessaging(Local<Object> target, env->SetMethod(target, "receiveMessageOnPort", MessagePort::ReceiveMessage); env->SetMethod(target, "moveMessagePortToContext", MessagePort::MoveToContext); + + { + Local<Function> domexception = GetDOMException(context).ToLocalChecked(); + target + ->Set(context, + FIXED_ONE_BYTE_STRING(env->isolate(), "DOMException"), + domexception) + .Check(); + } } } // anonymous namespace |