@@ -186,27 +186,30 @@ uint32_t Message::AddWASMModule(WasmModuleObject::TransferrableModule&& mod) {
186186
187187namespace {
188188
189- void ThrowDataCloneException (Local<Context> context, Local<String> message ) {
189+ MaybeLocal<Function> GetDOMException (Local<Context> context) {
190190 Isolate* isolate = context->GetIsolate ();
191- Local<Value> argv[] = {
192- message,
193- FIXED_ONE_BYTE_STRING (isolate, " DataCloneError" )
194- };
195- Local<Value> exception;
196-
197191 Local<Object> per_context_bindings;
198192 Local<Value> domexception_ctor_val;
199193 if (!GetPerContextExports (context).ToLocal (&per_context_bindings) ||
200194 !per_context_bindings->Get (context,
201195 FIXED_ONE_BYTE_STRING (isolate, " DOMException" ))
202196 .ToLocal (&domexception_ctor_val)) {
203- return ;
197+ return MaybeLocal<Function>() ;
204198 }
205-
206199 CHECK (domexception_ctor_val->IsFunction ());
207200 Local<Function> domexception_ctor = domexception_ctor_val.As <Function>();
208- if (!domexception_ctor->NewInstance (context, arraysize (argv), argv)
209- .ToLocal (&exception)) {
201+ return domexception_ctor;
202+ }
203+
204+ void ThrowDataCloneException (Local<Context> context, Local<String> message) {
205+ Isolate* isolate = context->GetIsolate ();
206+ Local<Value> argv[] = {message,
207+ FIXED_ONE_BYTE_STRING (isolate, " DataCloneError" )};
208+ Local<Value> exception;
209+ Local<Function> domexception_ctor;
210+ if (!GetDOMException (context).ToLocal (&domexception_ctor) ||
211+ !domexception_ctor->NewInstance (context, arraysize (argv), argv)
212+ .ToLocal (&exception)) {
210213 return ;
211214 }
212215 isolate->ThrowException (exception);
@@ -900,6 +903,15 @@ static void InitMessaging(Local<Object> target,
900903 env->SetMethod (target, " receiveMessageOnPort" , MessagePort::ReceiveMessage);
901904 env->SetMethod (target, " moveMessagePortToContext" ,
902905 MessagePort::MoveToContext);
906+
907+ {
908+ Local<Function> domexception = GetDOMException (context).ToLocalChecked ();
909+ target
910+ ->Set (context,
911+ FIXED_ONE_BYTE_STRING (env->isolate (), " DOMException" ),
912+ domexception)
913+ .Check ();
914+ }
903915}
904916
905917} // anonymous namespace
0 commit comments