LibIPC+LibWeb+LibWebView: Remove clone_from_transport() API

Replace clone_from_transport() (which dup()s the FD) with
from_transport() (which releases the FD) in the WebWorkerClient
call site. The UI process never uses the WebWorkerClient connection
after spawning — it only passes the transport to WebContent — so
releasing instead of cloning is safe and simpler.

This removes clone_from_transport() from TransportHandle, and
clone_for_transfer() from TransportSocket/TransportSocketWindows,
as they no longer have any callers.
This commit is contained in:
Aliaksandr Kalenik 2026-03-13 14:54:06 +01:00 committed by Jelle Raaijmakers
parent 269d5f739b
commit db9652643a
9 changed files with 2 additions and 30 deletions

View file

@ -24,12 +24,6 @@ ErrorOr<TransportHandle> TransportHandle::from_transport(Transport& transport)
return TransportHandle { File::adopt_fd(fd) };
}
ErrorOr<TransportHandle> TransportHandle::clone_from_transport(Transport& transport)
{
auto file = TRY(transport.clone_for_transfer());
return TransportHandle { move(file) };
}
ErrorOr<NonnullOwnPtr<Transport>> TransportHandle::create_transport() const
{
auto socket = TRY(Core::LocalSocket::adopt_fd(m_file.take_fd()));

View file

@ -32,7 +32,6 @@ public:
TransportHandle& operator=(TransportHandle&&) = default;
static ErrorOr<TransportHandle> from_transport(Transport& transport);
static ErrorOr<TransportHandle> clone_from_transport(Transport& transport);
ErrorOr<NonnullOwnPtr<Transport>> create_transport() const;

View file

@ -509,9 +509,4 @@ ErrorOr<int> TransportSocket::release_underlying_transport_for_transfer()
return m_socket->release_fd();
}
ErrorOr<IPC::File> TransportSocket::clone_for_transfer()
{
return IPC::File::clone_fd(m_socket->fd().value());
}
}

View file

@ -72,8 +72,6 @@ public:
// Obnoxious name to make it clear that this is a dangerous operation.
ErrorOr<int> release_underlying_transport_for_transfer();
ErrorOr<IPC::File> clone_for_transfer();
private:
enum class TransferState {
Continue,

View file

@ -277,9 +277,4 @@ ErrorOr<int> TransportSocketWindows::release_underlying_transport_for_transfer()
return m_socket->release_fd();
}
ErrorOr<IPC::File> TransportSocketWindows::clone_for_transfer()
{
return IPC::File::clone_fd(m_socket->fd().value());
}
}

View file

@ -49,8 +49,6 @@ public:
// Obnoxious name to make it clear that this is a dangerous operation.
ErrorOr<int> release_underlying_transport_for_transfer();
ErrorOr<IPC::File> clone_for_transfer();
private:
ErrorOr<void> duplicate_handles(Bytes, Vector<size_t> const& handle_offsets);
ErrorOr<void> transfer(ReadonlyBytes);

View file

@ -4,7 +4,6 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibCore/System.h>
#include <LibWeb/Worker/WebWorkerClient.h>
namespace Web::HTML {
@ -45,9 +44,4 @@ WebWorkerClient::WebWorkerClient(NonnullOwnPtr<IPC::Transport> transport)
{
}
IPC::TransportHandle WebWorkerClient::clone_transport()
{
return MUST(IPC::TransportHandle::clone_from_transport(*m_transport));
}
}

View file

@ -33,8 +33,6 @@ public:
Function<HTTP::Cookie::VersionedCookie(URL::URL const&, HTTP::Cookie::Source)> on_request_cookie;
Function<Messages::WebWorkerClient::RequestWorkerAgentResponse(Web::Bindings::AgentType)> on_request_worker_agent;
IPC::TransportHandle clone_transport();
private:
virtual void die() override;
};

View file

@ -791,7 +791,8 @@ Messages::WebContentClient::RequestWorkerAgentResponse WebContentClient::request
auto request_server_handle = MUST(connect_new_request_server_client());
auto image_decoder_handle = MUST(connect_new_image_decoder_client());
auto worker_client = MUST(WebView::launch_web_worker_process(worker_type));
return { worker_client->clone_transport(), move(request_server_handle), move(image_decoder_handle) };
auto worker_handle = MUST(IPC::TransportHandle::from_transport(worker_client->transport()));
return { move(worker_handle), move(request_server_handle), move(image_decoder_handle) };
}
return { IPC::TransportHandle {}, IPC::TransportHandle {}, IPC::TransportHandle {} };