diff --git a/Libraries/LibWeb/HTML/MessagePort.cpp b/Libraries/LibWeb/HTML/MessagePort.cpp index 97d6a808e80..92eb0981d96 100644 --- a/Libraries/LibWeb/HTML/MessagePort.cpp +++ b/Libraries/LibWeb/HTML/MessagePort.cpp @@ -324,11 +324,11 @@ void MessagePort::post_message_task_steps(SerializedTransferRecord& serialize_wi // 2. Let targetRealm be finalTargetPort's relevant realm. auto& target_realm = relevant_realm(*final_target_port); - auto& target_vm = target_realm.vm(); + + TemporaryExecutionContext context { target_realm }; // 3. Let deserializeRecord be StructuredDeserializeWithTransfer(serializeWithTransferResult, targetRealm). - TemporaryExecutionContext context { relevant_realm(*final_target_port) }; - auto deserialize_record_or_error = structured_deserialize_with_transfer(target_vm, serialize_with_transfer_result); + auto deserialize_record_or_error = structured_deserialize_with_transfer(serialize_with_transfer_result, target_realm); if (deserialize_record_or_error.is_error()) { // If this throws an exception, catch it, fire an event named messageerror at finalTargetPort, using MessageEvent, and then return. auto exception = deserialize_record_or_error.release_error(); diff --git a/Libraries/LibWeb/HTML/StructuredSerialize.cpp b/Libraries/LibWeb/HTML/StructuredSerialize.cpp index 736257d3be5..6f1566f63db 100644 --- a/Libraries/LibWeb/HTML/StructuredSerialize.cpp +++ b/Libraries/LibWeb/HTML/StructuredSerialize.cpp @@ -1319,9 +1319,9 @@ static WebIDL::ExceptionOr> create_transferred } // https://html.spec.whatwg.org/multipage/structured-data.html#structureddeserializewithtransfer -WebIDL::ExceptionOr structured_deserialize_with_transfer(JS::VM& vm, SerializedTransferRecord& serialize_with_transfer_result) +WebIDL::ExceptionOr structured_deserialize_with_transfer(SerializedTransferRecord& serialize_with_transfer_result, JS::Realm& target_realm) { - auto& target_realm = *vm.current_realm(); + auto& vm = target_realm.vm(); // 1. Let memory be an empty map. auto memory = DeserializationMemory(vm.heap()); diff --git a/Libraries/LibWeb/HTML/StructuredSerialize.h b/Libraries/LibWeb/HTML/StructuredSerialize.h index 1e35a3085f2..cfa61af8f21 100644 --- a/Libraries/LibWeb/HTML/StructuredSerialize.h +++ b/Libraries/LibWeb/HTML/StructuredSerialize.h @@ -124,7 +124,7 @@ WebIDL::ExceptionOr> deserialize_string_primitive(J WebIDL::ExceptionOr> deserialize_big_int_primitive(JS::VM& vm, ReadonlySpan vector, size_t& position); WebIDL::ExceptionOr structured_serialize_with_transfer(JS::VM& vm, JS::Value value, Vector> const& transfer_list); -WebIDL::ExceptionOr structured_deserialize_with_transfer(JS::VM& vm, SerializedTransferRecord&); +WebIDL::ExceptionOr structured_deserialize_with_transfer(SerializedTransferRecord&, JS::Realm& target_realm); } diff --git a/Libraries/LibWeb/HTML/Window.cpp b/Libraries/LibWeb/HTML/Window.cpp index fa7c5f57113..a6e6d6181be 100644 --- a/Libraries/LibWeb/HTML/Window.cpp +++ b/Libraries/LibWeb/HTML/Window.cpp @@ -1190,9 +1190,10 @@ WebIDL::ExceptionOr Window::window_post_message_steps(JS::Value message, W // 3. Let source be the WindowProxy object corresponding to incumbentSettings's global object (a Window object). auto& source = as(incumbent_settings.realm().global_environment().global_this_value()); + TemporaryExecutionContext temporary_execution_context { target_realm, TemporaryExecutionContext::CallbacksEnabled::Yes }; + // 4. Let deserializeRecord be StructuredDeserializeWithTransfer(serializeWithTransferResult, targetRealm). - auto temporary_execution_context = TemporaryExecutionContext { target_realm, TemporaryExecutionContext::CallbacksEnabled::Yes }; - auto deserialize_record_or_error = structured_deserialize_with_transfer(vm(), serialize_with_transfer_result); + auto deserialize_record_or_error = structured_deserialize_with_transfer(serialize_with_transfer_result, target_realm); // If this throws an exception, catch it, fire an event named messageerror at targetWindow, using MessageEvent, // with the origin attribute initialized to origin and the source attribute initialized to source, and then return.