/* * Copyright (c) 2023, Andrew Kaster * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static ErrorOr initialize_lagom_networking(Vector const& certificates); ErrorOr serenity_main(Main::Arguments arguments) { AK::set_rich_debug_enabled(true); int fd_passing_socket { -1 }; StringView serenity_resource_root; Vector certificates; Core::ArgsParser args_parser; args_parser.add_option(fd_passing_socket, "File descriptor of the fd passing socket", "fd-passing-socket", 'c', "fd-passing-socket"); args_parser.add_option(serenity_resource_root, "Absolute path to directory for serenity resources", "serenity-resource-root", 'r', "serenity-resource-root"); args_parser.add_option(certificates, "Path to a certificate file", "certificate", 'C', "certificate"); args_parser.parse(arguments); platform_init(); Web::Platform::EventLoopPlugin::install(*new Web::Platform::EventLoopPluginSerenity); Core::EventLoop event_loop; Web::Platform::FontPlugin::install(*new Web::Platform::FontPluginSerenity); TRY(initialize_lagom_networking(certificates)); VERIFY(fd_passing_socket >= 0); TRY(Web::Bindings::initialize_main_thread_vm()); auto client = TRY(IPC::take_over_accepted_client_from_system_server()); client->set_fd_passing_socket(TRY(Core::LocalSocket::adopt_fd(fd_passing_socket))); return event_loop.exec(); } static ErrorOr initialize_lagom_networking(Vector const& certificates) { auto candidate_request_server_paths = TRY(get_paths_for_helper_process("RequestServer"sv)); auto request_server_client = TRY(launch_request_server_process(candidate_request_server_paths, s_serenity_resource_root, certificates)); Web::ResourceLoader::initialize(TRY(WebView::RequestServerAdapter::try_create(move(request_server_client)))); auto candidate_web_socket_paths = TRY(get_paths_for_helper_process("WebSocket"sv)); auto web_socket_client = TRY(launch_web_socket_process(candidate_web_socket_paths, s_serenity_resource_root, certificates)); Web::WebSockets::WebSocketClientManager::initialize(TRY(WebView::WebSocketClientManagerAdapter::try_create(move(web_socket_client)))); return {}; }