/* * 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 #if defined(HAVE_QT) # include # include # include #endif static ErrorOr initialize_lagom_networking(int request_server_socket); ErrorOr serenity_main(Main::Arguments arguments) { AK::set_rich_debug_enabled(true); int request_server_socket { -1 }; StringView serenity_resource_root; bool use_lagom_networking { false }; Core::ArgsParser args_parser; args_parser.add_option(request_server_socket, "File descriptor of the request server socket", "request-server-socket", 's', "request-server-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(use_lagom_networking, "Enable Lagom servers for networking", "use-lagom-networking"); args_parser.parse(arguments); #if defined(HAVE_QT) QCoreApplication app(arguments.argc, arguments.argv); Core::EventLoopManager::install(*new Ladybird::EventLoopManagerQt); #endif Core::EventLoop event_loop; platform_init(); Web::Platform::EventLoopPlugin::install(*new Web::Platform::EventLoopPluginSerenity); Web::Platform::FontPlugin::install(*new Ladybird::FontPlugin(false)); #if defined(HAVE_QT) if (!use_lagom_networking) Web::ResourceLoader::initialize(Ladybird::RequestManagerQt::create()); else #endif TRY(initialize_lagom_networking(request_server_socket)); TRY(Web::Bindings::initialize_main_thread_vm()); auto client = TRY(IPC::take_over_accepted_client_from_system_server()); return event_loop.exec(); } static ErrorOr initialize_lagom_networking(int request_server_socket) { auto socket = TRY(Core::LocalSocket::adopt_fd(request_server_socket)); TRY(socket->set_blocking(true)); auto new_client = TRY(try_make_ref_counted(move(socket))); Web::ResourceLoader::initialize(TRY(WebView::RequestServerAdapter::try_create(move(new_client)))); return {}; }