@@ -177,19 +177,30 @@ uint32_t Message::AddWASMModule(WasmCompiledModule::TransferrableModule&& mod) {
177
177
178
178
namespace {
179
179
180
- void ThrowDataCloneException (Environment* env, Local<String> message) {
180
+ void ThrowDataCloneException (Local<Context> context, Local<String> message) {
181
+ Isolate* isolate = context->GetIsolate ();
181
182
Local<Value> argv[] = {
182
183
message,
183
- FIXED_ONE_BYTE_STRING (env-> isolate () , " DataCloneError" )
184
+ FIXED_ONE_BYTE_STRING (isolate, " DataCloneError" )
184
185
};
185
186
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)
189
200
.ToLocal (&exception )) {
190
201
return ;
191
202
}
192
- env-> isolate () ->ThrowException (exception );
203
+ isolate->ThrowException (exception );
193
204
}
194
205
195
206
// This tells V8 how to serialize objects that it does not understand
@@ -201,7 +212,7 @@ class SerializerDelegate : public ValueSerializer::Delegate {
201
212
: env_(env), context_(context), msg_(m) {}
202
213
203
214
void ThrowDataCloneError (Local<String> message) override {
204
- ThrowDataCloneException (env_ , message);
215
+ ThrowDataCloneException (context_ , message);
205
216
}
206
217
207
218
Maybe<bool > WriteHostObject (Isolate* isolate, Local<Object> object) override {
@@ -309,7 +320,7 @@ Maybe<bool> Message::Serialize(Environment* env,
309
320
if (std::find (array_buffers.begin (), array_buffers.end (), ab) !=
310
321
array_buffers.end ()) {
311
322
ThrowDataCloneException (
312
- env ,
323
+ context ,
313
324
FIXED_ONE_BYTE_STRING (
314
325
env->isolate (),
315
326
" Transfer list contains duplicate ArrayBuffer" ));
@@ -326,15 +337,15 @@ Maybe<bool> Message::Serialize(Environment* env,
326
337
// Check if the source MessagePort is being transferred.
327
338
if (!source_port.IsEmpty () && entry == source_port) {
328
339
ThrowDataCloneException (
329
- env ,
340
+ context ,
330
341
FIXED_ONE_BYTE_STRING (env->isolate (),
331
342
" Transfer list contains source port" ));
332
343
return Nothing<bool >();
333
344
}
334
345
MessagePort* port = Unwrap<MessagePort>(entry.As <Object>());
335
346
if (port == nullptr || port->IsDetached ()) {
336
347
ThrowDataCloneException (
337
- env ,
348
+ context ,
338
349
FIXED_ONE_BYTE_STRING (
339
350
env->isolate (),
340
351
" MessagePort in transfer list is already detached" ));
@@ -343,7 +354,7 @@ Maybe<bool> Message::Serialize(Environment* env,
343
354
if (std::find (delegate.ports_ .begin (), delegate.ports_ .end (), port) !=
344
355
delegate.ports_ .end ()) {
345
356
ThrowDataCloneException (
346
- env ,
357
+ context ,
347
358
FIXED_ONE_BYTE_STRING (
348
359
env->isolate (),
349
360
" Transfer list contains duplicate MessagePort" ));
@@ -811,13 +822,6 @@ static void MessageChannel(const FunctionCallbackInfo<Value>& args) {
811
822
.FromJust ();
812
823
}
813
824
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
-
821
825
static void InitMessaging (Local<Object> target,
822
826
Local<Value> unused,
823
827
Local<Context> context,
@@ -839,8 +843,6 @@ static void InitMessaging(Local<Object> target,
839
843
GetMessagePortConstructor (env, context).ToLocalChecked ())
840
844
.FromJust ();
841
845
842
- env->SetMethod (target, " registerDOMException" , RegisterDOMException);
843
-
844
846
// These are not methods on the MessagePort prototype, because
845
847
// the browser equivalents do not provide them.
846
848
env->SetMethod (target, " stopMessagePort" , MessagePort::Stop);
0 commit comments