Files
ladybird/Libraries/LibWebView/BrowserProcess.h
Aliaksandr Kalenik 4ddba48e13 LibIPC+LibWebView: Remove MultiServer
MultiServer was inherited from SerenityOS where it was used in many
places. Now that BrowserProcess is its only consumer, inline the
connection acceptance logic directly into BrowserProcess and remove
the abstraction.
2026-03-20 23:23:28 +01:00

74 lines
2.1 KiB
C++

/*
* Copyright (c) 2024, Andrew Kaster <akaster@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Error.h>
#include <AK/Function.h>
#include <AK/OwnPtr.h>
#include <AK/RefPtr.h>
#include <AK/Types.h>
#include <LibCore/LocalServer.h>
#include <LibIPC/ConnectionFromClient.h>
#include <LibIPC/Forward.h>
#include <LibWebView/Forward.h>
#include <LibWebView/Options.h>
#include <LibWebView/UIProcessClientEndpoint.h>
#include <LibWebView/UIProcessServerEndpoint.h>
namespace WebView {
class WEBVIEW_API UIProcessConnectionFromClient final
: public IPC::ConnectionFromClient<UIProcessClientEndpoint, UIProcessServerEndpoint> {
C_OBJECT(UIProcessConnectionFromClient);
public:
virtual ~UIProcessConnectionFromClient() override = default;
virtual void die() override;
Function<void(Vector<URL::URL> const&)> on_new_tab;
Function<void(Vector<URL::URL> const&)> on_new_window;
private:
UIProcessConnectionFromClient(NonnullOwnPtr<IPC::Transport>, int client_id);
virtual void create_new_tab(Vector<ByteString> urls) override;
virtual void create_new_window(Vector<ByteString> urls) override;
};
class WEBVIEW_API BrowserProcess {
AK_MAKE_NONCOPYABLE(BrowserProcess);
AK_MAKE_DEFAULT_MOVABLE(BrowserProcess);
public:
enum class ProcessDisposition : u8 {
ContinueMainProcess,
ExitProcess,
};
BrowserProcess() = default;
~BrowserProcess();
ErrorOr<ProcessDisposition> connect(Vector<ByteString> const& raw_urls, NewWindow new_window);
Function<void(Vector<URL::URL> const&)> on_new_tab;
Function<void(Vector<URL::URL> const&)> on_new_window;
private:
void accept_transport(NonnullOwnPtr<IPC::Transport>);
ErrorOr<void> connect_as_client(ByteString const& socket_path, Vector<ByteString> const& raw_urls, NewWindow new_window);
ErrorOr<void> connect_as_server(ByteString const& socket_path);
RefPtr<Core::LocalServer> m_local_server;
OwnPtr<Core::File> m_pid_file;
ByteString m_pid_path;
ByteString m_socket_path;
int m_next_client_id { 0 };
};
}