summaryrefslogtreecommitdiff
path: root/src/node_messaging.cc
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2019-06-05 17:06:32 +0200
committerAnna Henningsen <anna@addaleax.net>2019-06-09 19:51:30 +0200
commit890223dede339622e7e66e8629805f7904840870 (patch)
tree96b2150280c3d3fb3ef159715a7b036d16f78a10 /src/node_messaging.cc
parent0c1fd2069376cb2b3796ea83dc131a0a1def132d (diff)
downloadandroid-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.cc34
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