mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-09 00:22:36 +02:00
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.
74 lines
2.1 KiB
C++
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 };
|
|
};
|
|
|
|
}
|