Browse Source

LibIPC: Also encode URL::blob_url_entry over IPC

Shannon Booth 1 year ago
parent
commit
55cd53e4ed
2 changed files with 26 additions and 3 deletions
  1. 13 2
      Userland/Libraries/LibIPC/Decoder.cpp
  2. 13 1
      Userland/Libraries/LibIPC/Encoder.cpp

+ 13 - 2
Userland/Libraries/LibIPC/Decoder.cpp

@@ -83,8 +83,19 @@ ErrorOr<UnixDateTime> decode(Decoder& decoder)
 template<>
 ErrorOr<URL::URL> decode(Decoder& decoder)
 {
-    auto url = TRY(decoder.decode<ByteString>());
-    return URL::URL { url };
+    auto url_string = TRY(decoder.decode<ByteString>());
+    URL::URL url { url_string };
+
+    bool has_blob_url = TRY(decoder.decode<bool>());
+    if (!has_blob_url)
+        return url;
+
+    url.set_blob_url_entry(URL::BlobURLEntry {
+        .type = TRY(decoder.decode<String>()),
+        .byte_buffer = TRY(decoder.decode<ByteBuffer>()),
+    });
+
+    return url;
 }
 
 template<>

+ 13 - 1
Userland/Libraries/LibIPC/Encoder.cpp

@@ -99,7 +99,19 @@ ErrorOr<void> encode(Encoder& encoder, UnixDateTime const& value)
 template<>
 ErrorOr<void> 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<>