/* * Copyright (c) 2024, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include namespace Web::HTML { SelectedFile::SelectedFile(ByteString name, ByteBuffer contents) : m_name(move(name)) , m_file_or_contents(move(contents)) { } SelectedFile::SelectedFile(ByteString name, IPC::File file) : m_name(move(name)) , m_file_or_contents(move(file)) { } ByteBuffer SelectedFile::take_contents() { VERIFY(m_file_or_contents.has()); return move(m_file_or_contents.get()); } } template<> ErrorOr IPC::encode(Encoder& encoder, Web::HTML::SelectedFile const& file) { TRY(encoder.encode(file.name())); TRY(encoder.encode(file.file_or_contents())); return {}; } template<> ErrorOr IPC::decode(Decoder& decoder) { auto name = TRY(decoder.decode()); auto file_or_contents = TRY((decoder.decode>())); ByteBuffer contents; if (file_or_contents.has()) { auto file = TRY(Core::File::adopt_fd(file_or_contents.get().take_fd(), Core::File::OpenMode::Read)); contents = TRY(file->read_until_eof()); } else { contents = move(file_or_contents.get()); } return Web::HTML::SelectedFile { move(name), move(contents) }; }