From 63246577d2cf65823bc2ba3c0331336bbb2815ab Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Wed, 15 May 2024 20:58:02 +0100 Subject: [PATCH] LibWeb: Use correct type for `MessageEventInit.ports` This didn't work previously because the IDL generator used the incorrect type for some types of sequences within dictionaries. --- .../LibWeb/BindingsGenerator/IDLGenerators.cpp | 2 +- Userland/Libraries/LibWeb/HTML/MessageEvent.cpp | 5 +++-- Userland/Libraries/LibWeb/HTML/MessageEvent.h | 2 +- Userland/Libraries/LibWeb/HTML/MessageEvent.idl | 3 +-- Userland/Libraries/LibWeb/HTML/MessagePort.cpp | 4 ++-- Userland/Libraries/LibWeb/HTML/Window.cpp | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp index 5e9c59c33d8..ef5c97d5478 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp @@ -888,7 +888,7 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter )~~~"); } else { sequence_generator.append(R"~~~( - @sequence.storage_type@ @cpp_name@ { global_object.heap() }; + @sequence.storage_type@<@sequence.type@> @cpp_name@ { vm.heap() }; )~~~"); } } diff --git a/Userland/Libraries/LibWeb/HTML/MessageEvent.cpp b/Userland/Libraries/LibWeb/HTML/MessageEvent.cpp index 3d5e92c634c..b877e111034 100644 --- a/Userland/Libraries/LibWeb/HTML/MessageEvent.cpp +++ b/Userland/Libraries/LibWeb/HTML/MessageEvent.cpp @@ -8,6 +8,7 @@ #include #include #include +#include namespace Web::HTML { @@ -31,9 +32,9 @@ MessageEvent::MessageEvent(JS::Realm& realm, FlyString const& event_name, Messag , m_source(event_init.source) { m_ports.ensure_capacity(event_init.ports.size()); - for (auto& port : event_init.ports) { + for (auto const& port : event_init.ports) { VERIFY(port); - m_ports.unchecked_append(*port); + m_ports.unchecked_append(static_cast(*port)); } } diff --git a/Userland/Libraries/LibWeb/HTML/MessageEvent.h b/Userland/Libraries/LibWeb/HTML/MessageEvent.h index 83021221025..032ddbd2097 100644 --- a/Userland/Libraries/LibWeb/HTML/MessageEvent.h +++ b/Userland/Libraries/LibWeb/HTML/MessageEvent.h @@ -20,7 +20,7 @@ struct MessageEventInit : public DOM::EventInit { String origin {}; String last_event_id {}; Optional source; - Vector> ports; + Vector> ports; }; class MessageEvent : public DOM::Event { diff --git a/Userland/Libraries/LibWeb/HTML/MessageEvent.idl b/Userland/Libraries/LibWeb/HTML/MessageEvent.idl index f54c2187fcb..ef13fc735c3 100644 --- a/Userland/Libraries/LibWeb/HTML/MessageEvent.idl +++ b/Userland/Libraries/LibWeb/HTML/MessageEvent.idl @@ -22,6 +22,5 @@ dictionary MessageEventInit : EventInit { USVString origin = ""; DOMString lastEventId = ""; MessageEventSource? source = null; - // FIXME: sequence ports = []; - sequence ports = []; + sequence ports = []; }; diff --git a/Userland/Libraries/LibWeb/HTML/MessagePort.cpp b/Userland/Libraries/LibWeb/HTML/MessagePort.cpp index 2172f23eccb..f3412cb9e0f 100644 --- a/Userland/Libraries/LibWeb/HTML/MessagePort.cpp +++ b/Userland/Libraries/LibWeb/HTML/MessagePort.cpp @@ -372,10 +372,10 @@ void MessagePort::post_message_task_steps(SerializedTransferRecord& serialize_wi // 5. Let newPorts be a new frozen array consisting of all MessagePort objects in deserializeRecord.[[TransferredValues]], if any, maintaining their relative order. // FIXME: Use a FrozenArray - Vector> new_ports; + Vector> new_ports; for (auto const& object : deserialize_record.transferred_values) { if (is(*object)) { - new_ports.append(object); + new_ports.append(verify_cast(*object)); } } diff --git a/Userland/Libraries/LibWeb/HTML/Window.cpp b/Userland/Libraries/LibWeb/HTML/Window.cpp index ade57e9c210..2461ce01051 100644 --- a/Userland/Libraries/LibWeb/HTML/Window.cpp +++ b/Userland/Libraries/LibWeb/HTML/Window.cpp @@ -1160,10 +1160,10 @@ WebIDL::ExceptionOr Window::window_post_message_steps(JS::Value message, W // 6. Let newPorts be a new frozen array consisting of all MessagePort objects in deserializeRecord.[[TransferredValues]], // if any, maintaining their relative order. // FIXME: Use a FrozenArray - Vector> new_ports; + Vector> new_ports; for (auto const& object : deserialize_record.transferred_values) { if (is(*object)) { - new_ports.append(object); + new_ports.append(verify_cast(*object)); } }