@@ -177,19 +177,30 @@ uint32_t Message::AddWASMModule(WasmCompiledModule::TransferrableModule&& mod) {
177177
178178namespace {
179179
180- void ThrowDataCloneException (Environment* env, Local<String> message) {
180+ void ThrowDataCloneException (Local<Context> context, Local<String> message) {
181+ Isolate* isolate = context->GetIsolate ();
181182 Local<Value> argv[] = {
182183 message,
183- FIXED_ONE_BYTE_STRING (env-> isolate () , " DataCloneError" )
184+ FIXED_ONE_BYTE_STRING (isolate, " DataCloneError" )
184185 };
185186 Local<Value> exception;
186- Local<Function> domexception_ctor = env->domexception_function ();
187- CHECK (!domexception_ctor.IsEmpty ());
188- if (!domexception_ctor->NewInstance (env->context (), arraysize (argv), argv)
187+
188+ Local<Object> per_context_bindings;
189+ Local<Value> domexception_ctor_val;
190+ if (!GetPerContextExports (context).ToLocal (&per_context_bindings) ||
191+ !per_context_bindings->Get (context,
192+ FIXED_ONE_BYTE_STRING (isolate, " DOMException" ))
193+ .ToLocal (&domexception_ctor_val)) {
194+ return ;
195+ }
196+
197+ CHECK (domexception_ctor_val->IsFunction ());
198+ Local<Function> domexception_ctor = domexception_ctor_val.As <Function>();
199+ if (!domexception_ctor->NewInstance (context, arraysize (argv), argv)
189200 .ToLocal (&exception)) {
190201 return ;
191202 }
192- env-> isolate () ->ThrowException (exception);
203+ isolate->ThrowException (exception);
193204}
194205
195206// This tells V8 how to serialize objects that it does not understand
@@ -201,7 +212,7 @@ class SerializerDelegate : public ValueSerializer::Delegate {
201212 : env_(env), context_(context), msg_(m) {}
202213
203214 void ThrowDataCloneError (Local<String> message) override {
204- ThrowDataCloneException (env_ , message);
215+ ThrowDataCloneException (context_ , message);
205216 }
206217
207218 Maybe<bool > WriteHostObject (Isolate* isolate, Local<Object> object) override {
@@ -309,7 +320,7 @@ Maybe<bool> Message::Serialize(Environment* env,
309320 if (std::find (array_buffers.begin (), array_buffers.end (), ab) !=
310321 array_buffers.end ()) {
311322 ThrowDataCloneException (
312- env ,
323+ context ,
313324 FIXED_ONE_BYTE_STRING (
314325 env->isolate (),
315326 " Transfer list contains duplicate ArrayBuffer" ));
@@ -326,15 +337,15 @@ Maybe<bool> Message::Serialize(Environment* env,
326337 // Check if the source MessagePort is being transferred.
327338 if (!source_port.IsEmpty () && entry == source_port) {
328339 ThrowDataCloneException (
329- env ,
340+ context ,
330341 FIXED_ONE_BYTE_STRING (env->isolate (),
331342 " Transfer list contains source port" ));
332343 return Nothing<bool >();
333344 }
334345 MessagePort* port = Unwrap<MessagePort>(entry.As <Object>());
335346 if (port == nullptr || port->IsDetached ()) {
336347 ThrowDataCloneException (
337- env ,
348+ context ,
338349 FIXED_ONE_BYTE_STRING (
339350 env->isolate (),
340351 " MessagePort in transfer list is already detached" ));
@@ -343,7 +354,7 @@ Maybe<bool> Message::Serialize(Environment* env,
343354 if (std::find (delegate.ports_ .begin (), delegate.ports_ .end (), port) !=
344355 delegate.ports_ .end ()) {
345356 ThrowDataCloneException (
346- env ,
357+ context ,
347358 FIXED_ONE_BYTE_STRING (
348359 env->isolate (),
349360 " Transfer list contains duplicate MessagePort" ));
@@ -811,13 +822,6 @@ static void MessageChannel(const FunctionCallbackInfo<Value>& args) {
811822 .FromJust ();
812823}
813824
814- static void RegisterDOMException (const FunctionCallbackInfo<Value>& args) {
815- Environment* env = Environment::GetCurrent (args);
816- CHECK_EQ (args.Length (), 1 );
817- CHECK (args[0 ]->IsFunction ());
818- env->set_domexception_function (args[0 ].As <Function>());
819- }
820-
821825static void InitMessaging (Local<Object> target,
822826 Local<Value> unused,
823827 Local<Context> context,
@@ -839,8 +843,6 @@ static void InitMessaging(Local<Object> target,
839843 GetMessagePortConstructor (env, context).ToLocalChecked ())
840844 .FromJust ();
841845
842- env->SetMethod (target, " registerDOMException" , RegisterDOMException);
843-
844846 // These are not methods on the MessagePort prototype, because
845847 // the browser equivalents do not provide them.
846848 env->SetMethod (target, " stopMessagePort" , MessagePort::Stop);
0 commit comments