diff --git a/Userland/Libraries/LibIPC/Decoder.cpp b/Userland/Libraries/LibIPC/Decoder.cpp index ed54a7d8894..9c16317511a 100644 --- a/Userland/Libraries/LibIPC/Decoder.cpp +++ b/Userland/Libraries/LibIPC/Decoder.cpp @@ -83,8 +83,19 @@ ErrorOr decode(Decoder& decoder) template<> ErrorOr decode(Decoder& decoder) { - auto url = TRY(decoder.decode()); - return URL::URL { url }; + auto url_string = TRY(decoder.decode()); + URL::URL url { url_string }; + + bool has_blob_url = TRY(decoder.decode()); + if (!has_blob_url) + return url; + + url.set_blob_url_entry(URL::BlobURLEntry { + .type = TRY(decoder.decode()), + .byte_buffer = TRY(decoder.decode()), + }); + + return url; } template<> diff --git a/Userland/Libraries/LibIPC/Encoder.cpp b/Userland/Libraries/LibIPC/Encoder.cpp index 51ac2efbeb2..17f09dc7ac5 100644 --- a/Userland/Libraries/LibIPC/Encoder.cpp +++ b/Userland/Libraries/LibIPC/Encoder.cpp @@ -99,7 +99,19 @@ ErrorOr encode(Encoder& encoder, UnixDateTime const& value) template<> ErrorOr encode(Encoder& encoder, URL::URL const& value) { - return encoder.encode(value.to_byte_string()); + TRY(encoder.encode(value.serialize())); + + if (!value.blob_url_entry().has_value()) + return encoder.encode(false); + + TRY(encoder.encode(true)); + + auto const& blob = value.blob_url_entry().value(); + + TRY(encoder.encode(blob.type)); + TRY(encoder.encode(blob.byte_buffer)); + + return {}; } template<>