mirror of
https://github.com/RGBCube/serenity
synced 2025-05-28 19:15:09 +00:00
LibWeb: Post all MessagePort messages over their LocalSockets
This is to allow future changes to do cross-process MessagePorts in an implementation-agnostic way. Add some tests for this behavior. Delivering messages that were posted to a MessagePort just before it was transferred is not yet implemented still.
This commit is contained in:
parent
6e3b816763
commit
c0f50b12a4
7 changed files with 301 additions and 52 deletions
|
@ -10,6 +10,8 @@
|
|||
#include <AK/StdLibExtras.h>
|
||||
#include <AK/String.h>
|
||||
#include <AK/Vector.h>
|
||||
#include <LibIPC/Decoder.h>
|
||||
#include <LibIPC/Encoder.h>
|
||||
#include <LibIPC/File.h>
|
||||
#include <LibJS/Forward.h>
|
||||
#include <LibJS/Runtime/Array.h>
|
||||
|
@ -1129,3 +1131,39 @@ WebIDL::ExceptionOr<JS::Value> structured_deserialize(JS::VM& vm, SerializationR
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
namespace IPC {
|
||||
|
||||
template<>
|
||||
ErrorOr<void> encode(Encoder& encoder, ::Web::HTML::TransferDataHolder const& data_holder)
|
||||
{
|
||||
TRY(encoder.encode(data_holder.data));
|
||||
TRY(encoder.encode(data_holder.fds));
|
||||
return {};
|
||||
}
|
||||
|
||||
template<>
|
||||
ErrorOr<void> encode(Encoder& encoder, ::Web::HTML::SerializedTransferRecord const& record)
|
||||
{
|
||||
TRY(encoder.encode(record.serialized));
|
||||
TRY(encoder.encode(record.transfer_data_holders));
|
||||
return {};
|
||||
}
|
||||
|
||||
template<>
|
||||
ErrorOr<::Web::HTML::TransferDataHolder> decode(Decoder& decoder)
|
||||
{
|
||||
auto data = TRY(decoder.decode<Vector<u8>>());
|
||||
auto fds = TRY(decoder.decode<Vector<IPC::File>>());
|
||||
return ::Web::HTML::TransferDataHolder { move(data), move(fds) };
|
||||
}
|
||||
|
||||
template<>
|
||||
ErrorOr<::Web::HTML::SerializedTransferRecord> decode(Decoder& decoder)
|
||||
{
|
||||
auto serialized = TRY(decoder.decode<Vector<u32>>());
|
||||
auto transfer_data_holders = TRY(decoder.decode<Vector<::Web::HTML::TransferDataHolder>>());
|
||||
return ::Web::HTML::SerializedTransferRecord { move(serialized), move(transfer_data_holders) };
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue