mirror of
https://github.com/SerenityOS/serenity
synced 2026-05-15 11:26:36 +02:00
This change adds a `--use-lagom-networking` flag to the WebWorker process. Qt networking is used if this flag isn't passed. The flag is passed the UI launches the WebWorker process unless the Qt chrome is being run with the `--enable-qt-networking` flag. (cherry picked from commit 886714632759c1e2feeb636388975f0e3b515839; amended Qt/main.cpp to resolve minor conflict due to serenity not having LadybirdBrowser/ladybird#284 LadybirdBrowser/ladybird#45, and WebWorker/CMakeLists.txt due to serenity still having `SERENITY_SOURCE_DIR` instead of `LADYBIRD_SOURCE_DIR` -- LadybirdBrowser/ladybird#17)
88 lines
3.0 KiB
C++
88 lines
3.0 KiB
C++
/*
|
|
* Copyright (c) 2023, Andrew Kaster <akaster@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <Ladybird/FontPlugin.h>
|
|
#include <Ladybird/HelperProcess.h>
|
|
#include <Ladybird/Utilities.h>
|
|
#include <LibCore/ArgsParser.h>
|
|
#include <LibCore/EventLoop.h>
|
|
#include <LibCore/LocalServer.h>
|
|
#include <LibCore/StandardPaths.h>
|
|
#include <LibCore/System.h>
|
|
#include <LibFileSystem/FileSystem.h>
|
|
#include <LibIPC/SingleServer.h>
|
|
#include <LibMain/Main.h>
|
|
#include <LibWeb/Bindings/MainThreadVM.h>
|
|
#include <LibWeb/Loader/GeneratedPagesLoader.h>
|
|
#include <LibWeb/Loader/ResourceLoader.h>
|
|
#include <LibWeb/Platform/EventLoopPlugin.h>
|
|
#include <LibWeb/Platform/EventLoopPluginSerenity.h>
|
|
#include <LibWeb/Platform/FontPluginSerenity.h>
|
|
#include <LibWeb/WebSockets/WebSocket.h>
|
|
#include <LibWebView/RequestServerAdapter.h>
|
|
#include <LibWebView/WebSocketClientAdapter.h>
|
|
#include <WebWorker/ConnectionFromClient.h>
|
|
|
|
#if defined(HAVE_QT)
|
|
# include <Ladybird/Qt/EventLoopImplementationQt.h>
|
|
# include <Ladybird/Qt/RequestManagerQt.h>
|
|
# include <QCoreApplication>
|
|
#endif
|
|
|
|
static ErrorOr<void> initialize_lagom_networking(int request_server_socket);
|
|
|
|
ErrorOr<int> 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 Web::Platform::FontPluginSerenity);
|
|
|
|
#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(Web::HTML::EventLoop::Type::Worker));
|
|
|
|
auto client = TRY(IPC::take_over_accepted_client_from_system_server<WebWorker::ConnectionFromClient>());
|
|
|
|
return event_loop.exec();
|
|
}
|
|
|
|
static ErrorOr<void> 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<Protocol::RequestClient>(move(socket)));
|
|
|
|
Web::ResourceLoader::initialize(TRY(WebView::RequestServerAdapter::try_create(move(new_client))));
|
|
|
|
return {};
|
|
}
|