/* * Copyright (c) 2024, Andrew Kaster * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include #include namespace WebView { class UIProcessConnectionFromClient final : public IPC::ConnectionFromClient { C_OBJECT(UIProcessConnectionFromClient); public: virtual ~UIProcessConnectionFromClient() override = default; virtual void die() override; Function const&)> on_new_tab; Function const&)> on_new_window; private: UIProcessConnectionFromClient(IPC::Transport, int client_id); virtual void create_new_tab(Vector urls) override; virtual void create_new_window(Vector urls) override; }; class BrowserProcess { AK_MAKE_NONCOPYABLE(BrowserProcess); AK_MAKE_DEFAULT_MOVABLE(BrowserProcess); public: enum class ProcessDisposition : u8 { ContinueMainProcess, ExitProcess, }; BrowserProcess() = default; ~BrowserProcess(); ErrorOr connect(Vector const& raw_urls, NewWindow new_window); Function const&)> on_new_tab; Function const&)> on_new_window; private: ErrorOr connect_as_client(ByteString const& socket_path, Vector const& raw_urls, NewWindow new_window); ErrorOr connect_as_server(ByteString const& socket_path); OwnPtr> m_server_connection; OwnPtr m_pid_file; ByteString m_pid_path; ByteString m_socket_path; }; }