From 1b324f3ae11d4f5750d89183f97bb3b3b2b4f801 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Mon, 7 Oct 2024 15:18:07 -0400 Subject: [PATCH] LibWebView+UI: Remove Qt networking infrastructure Now that we use libcurl, there's no reason to keep Qt networking around. Further, it doesn't support all features we need anyways, such as non- buffered request handling for SSE. --- Ladybird/AppKit/Application/Application.mm | 2 +- Ladybird/HelperProcess.cpp | 15 +- Ladybird/HelperProcess.h | 2 +- Ladybird/Qt/Application.cpp | 6 - Ladybird/Qt/Application.h | 3 - Ladybird/Qt/RequestManagerQt.cpp | 142 ------------------ Ladybird/Qt/RequestManagerQt.h | 66 -------- Ladybird/Qt/WebContentView.cpp | 17 +-- Ladybird/Qt/WebSocketImplQt.cpp | 97 ------------ Ladybird/Qt/WebSocketImplQt.h | 35 ----- Ladybird/Qt/WebSocketQt.cpp | 97 ------------ Ladybird/Qt/WebSocketQt.h | 35 ----- Ladybird/Qt/main.cpp | 8 +- Ladybird/WebContent/CMakeLists.txt | 3 - Ladybird/WebContent/main.cpp | 11 +- Ladybird/WebDriver/main.cpp | 8 +- Ladybird/WebWorker/CMakeLists.txt | 3 - Ladybird/WebWorker/main.cpp | 10 +- .../gn/secondary/Ladybird/WebContent/BUILD.gn | 4 - Userland/Libraries/LibWebView/Options.h | 6 - 20 files changed, 19 insertions(+), 551 deletions(-) delete mode 100644 Ladybird/Qt/RequestManagerQt.cpp delete mode 100644 Ladybird/Qt/RequestManagerQt.h delete mode 100644 Ladybird/Qt/WebSocketImplQt.cpp delete mode 100644 Ladybird/Qt/WebSocketImplQt.h delete mode 100644 Ladybird/Qt/WebSocketQt.cpp delete mode 100644 Ladybird/Qt/WebSocketQt.h diff --git a/Ladybird/AppKit/Application/Application.mm b/Ladybird/AppKit/Application/Application.mm index 292728cb5fd..e3be7f7c5c6 100644 --- a/Ladybird/AppKit/Application/Application.mm +++ b/Ladybird/AppKit/Application/Application.mm @@ -132,7 +132,7 @@ static ErrorOr> launch_new_image_decod - (ErrorOr)launchWebWorker { auto web_worker_paths = TRY(get_paths_for_helper_process("WebWorker"sv)); - auto worker_client = TRY(launch_web_worker_process(web_worker_paths, m_request_server_client)); + auto worker_client = TRY(launch_web_worker_process(web_worker_paths, *m_request_server_client)); return worker_client->dup_socket(); } diff --git a/Ladybird/HelperProcess.cpp b/Ladybird/HelperProcess.cpp index a17e06bf5de..ced86e92be9 100644 --- a/Ladybird/HelperProcess.cpp +++ b/Ladybird/HelperProcess.cpp @@ -92,8 +92,6 @@ ErrorOr> launch_web_content_process( } if (web_content_options.is_layout_test_mode == WebView::IsLayoutTestMode::Yes) arguments.append("--layout-test-mode"sv); - if (web_content_options.use_lagom_networking == WebView::UseLagomNetworking::Yes) - arguments.append("--use-lagom-networking"sv); if (web_content_options.log_all_js_exceptions == WebView::LogAllJSExceptions::Yes) arguments.append("--log-all-js-exceptions"sv); if (web_content_options.enable_idl_tracing == WebView::EnableIDLTracing::Yes) @@ -132,16 +130,13 @@ ErrorOr> launch_image_decoder_process( return launch_server_process("ImageDecoder"sv, candidate_image_decoder_paths, arguments); } -ErrorOr> launch_web_worker_process(ReadonlySpan candidate_web_worker_paths, RefPtr request_client) +ErrorOr> launch_web_worker_process(ReadonlySpan candidate_web_worker_paths, NonnullRefPtr request_client) { Vector arguments; - if (request_client) { - auto socket = TRY(connect_new_request_server_client(*request_client)); - arguments.append("--request-server-socket"sv); - arguments.append(ByteString::number(socket.fd())); - arguments.append("--use-lagom-networking"sv); - return launch_server_process("WebWorker"sv, candidate_web_worker_paths, move(arguments)); - } + + auto socket = TRY(connect_new_request_server_client(*request_client)); + arguments.append("--request-server-socket"sv); + arguments.append(ByteString::number(socket.fd())); return launch_server_process("WebWorker"sv, candidate_web_worker_paths, move(arguments)); } diff --git a/Ladybird/HelperProcess.h b/Ladybird/HelperProcess.h index 08a5721c221..16a59f2dd5e 100644 --- a/Ladybird/HelperProcess.h +++ b/Ladybird/HelperProcess.h @@ -23,7 +23,7 @@ ErrorOr> launch_web_content_process( Optional request_server_socket = {}); ErrorOr> launch_image_decoder_process(ReadonlySpan candidate_image_decoder_paths); -ErrorOr> launch_web_worker_process(ReadonlySpan candidate_web_worker_paths, RefPtr); +ErrorOr> launch_web_worker_process(ReadonlySpan candidate_web_worker_paths, NonnullRefPtr); ErrorOr> launch_request_server_process(ReadonlySpan candidate_request_server_paths, StringView serenity_resource_root); ErrorOr connect_new_request_server_client(Requests::RequestClient&); diff --git a/Ladybird/Qt/Application.cpp b/Ladybird/Qt/Application.cpp index 03f53b2b8a4..351491a4777 100644 --- a/Ladybird/Qt/Application.cpp +++ b/Ladybird/Qt/Application.cpp @@ -22,15 +22,9 @@ Application::Application(Badge, Main::Arguments& arguments { } -void Application::create_platform_arguments(Core::ArgsParser& args_parser) -{ - args_parser.add_option(m_enable_qt_networking, "Enable Qt as the backend networking service", "enable-qt-networking"); -} - void Application::create_platform_options(WebView::ChromeOptions&, WebView::WebContentOptions& web_content_options) { web_content_options.config_path = Settings::the()->directory(); - web_content_options.use_lagom_networking = m_enable_qt_networking ? WebView::UseLagomNetworking::No : WebView::UseLagomNetworking::Yes; } Application::~Application() diff --git a/Ladybird/Qt/Application.h b/Ladybird/Qt/Application.h index 427bb6ada20..e5dfcac2b73 100644 --- a/Ladybird/Qt/Application.h +++ b/Ladybird/Qt/Application.h @@ -43,13 +43,10 @@ public: void set_active_window(BrowserWindow& w) { m_active_window = &w; } private: - virtual void create_platform_arguments(Core::ArgsParser&) override; virtual void create_platform_options(WebView::ChromeOptions&, WebView::WebContentOptions&) override; virtual Optional ask_user_for_download_folder() const override; - bool m_enable_qt_networking { false }; - TaskManagerWindow* m_task_manager_window { nullptr }; BrowserWindow* m_active_window { nullptr }; diff --git a/Ladybird/Qt/RequestManagerQt.cpp b/Ladybird/Qt/RequestManagerQt.cpp deleted file mode 100644 index c3e33a332b3..00000000000 --- a/Ladybird/Qt/RequestManagerQt.cpp +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (c) 2022, Andreas Kling - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include "RequestManagerQt.h" -#include "StringUtils.h" -#include "WebSocketImplQt.h" -#include "WebSocketQt.h" -#include - -namespace Ladybird { - -RequestManagerQt::RequestManagerQt(Vector const& certificate_paths) -{ - m_qnam = new QNetworkAccessManager(this); - auto ssl_configuration = QSslConfiguration::defaultConfiguration(); - ssl_configuration.setPeerVerifyMode(QSslSocket::VerifyNone); - for (auto const& certificate_path : certificate_paths) { - auto certificates = QSslCertificate::fromPath(qstring_from_ak_string(certificate_path)); - for (auto const& certificate : certificates) - ssl_configuration.addCaCertificate(certificate); - } - QSslConfiguration::setDefaultConfiguration(ssl_configuration); - - QObject::connect(m_qnam, &QNetworkAccessManager::finished, this, &RequestManagerQt::reply_finished); -} - -void RequestManagerQt::reply_finished(QNetworkReply* reply) -{ - auto request = m_pending.get(reply).value(); - m_pending.remove(reply); - request->did_finish(); -} - -RefPtr RequestManagerQt::start_request(ByteString const& method, URL::URL const& url, HTTP::HeaderMap const& request_headers, ReadonlyBytes request_body, Core::ProxyData const& proxy) -{ - if (!url.scheme().bytes_as_string_view().is_one_of_ignoring_ascii_case("http"sv, "https"sv)) { - return nullptr; - } - auto request_or_error = Request::create(*m_qnam, method, url, request_headers, request_body, proxy); - if (request_or_error.is_error()) { - return nullptr; - } - auto request = request_or_error.release_value(); - m_pending.set(&request->reply(), *request); - return request; -} - -ErrorOr> RequestManagerQt::Request::create(QNetworkAccessManager& qnam, ByteString const& method, URL::URL const& url, HTTP::HeaderMap const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&) -{ - QNetworkRequest request { QString(url.to_byte_string().characters()) }; - request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy); - request.setAttribute(QNetworkRequest::CookieLoadControlAttribute, QNetworkRequest::Manual); - request.setAttribute(QNetworkRequest::CookieSaveControlAttribute, QNetworkRequest::Manual); - - // NOTE: We disable HTTP2 as it's significantly slower (up to 5x, possibly more) - request.setAttribute(QNetworkRequest::Http2AllowedAttribute, false); - - QNetworkReply* reply = nullptr; - - for (auto const& it : request_headers.headers()) { - // FIXME: We currently strip the Accept-Encoding header on outgoing requests from LibWeb - // since otherwise it'll ask for compression without Qt being aware of it. - // This is very hackish and I'm sure we can do it in concert with Qt somehow. - if (it.name == "Accept-Encoding") - continue; - request.setRawHeader(QByteArray(it.name.characters()), QByteArray(it.value.characters())); - } - - if (method.equals_ignoring_ascii_case("head"sv)) { - reply = qnam.head(request); - } else if (method.equals_ignoring_ascii_case("get"sv)) { - reply = qnam.get(request); - } else if (method.equals_ignoring_ascii_case("post"sv)) { - reply = qnam.post(request, QByteArray((char const*)request_body.data(), request_body.size())); - } else if (method.equals_ignoring_ascii_case("put"sv)) { - reply = qnam.put(request, QByteArray((char const*)request_body.data(), request_body.size())); - } else if (method.equals_ignoring_ascii_case("delete"sv)) { - reply = qnam.deleteResource(request); - } else { - reply = qnam.sendCustomRequest(request, QByteArray(method.characters()), QByteArray((char const*)request_body.data(), request_body.size())); - } - - return adopt_ref(*new Request(*reply)); -} - -RefPtr RequestManagerQt::websocket_connect(URL::URL const& url, AK::ByteString const& origin, Vector const& protocols) -{ - WebSocket::ConnectionInfo connection_info(url); - connection_info.set_origin(origin); - connection_info.set_protocols(protocols); - - auto impl = adopt_ref(*new WebSocketImplQt); - auto web_socket = WebSocket::WebSocket::create(move(connection_info), move(impl)); - web_socket->start(); - return WebSocketQt::create(web_socket); -} - -RequestManagerQt::Request::Request(QNetworkReply& reply) - : m_reply(reply) -{ -} - -RequestManagerQt::Request::~Request() = default; - -void RequestManagerQt::Request::set_buffered_request_finished_callback(Requests::Request::BufferedRequestFinished on_buffered_request_finished) -{ - this->on_buffered_request_finish = move(on_buffered_request_finished); -} - -void RequestManagerQt::Request::set_unbuffered_request_callbacks(Requests::Request::HeadersReceived, Requests::Request::DataReceived, Requests::Request::RequestFinished on_request_finished) -{ - dbgln("Unbuffered requests are not yet supported with Qt networking"); - on_request_finished(false, 0); -} - -void RequestManagerQt::Request::did_finish() -{ - auto buffer = m_reply.readAll(); - auto http_status_code = m_reply.attribute(QNetworkRequest::Attribute::HttpStatusCodeAttribute).toInt(); - HTTP::HeaderMap response_headers; - for (auto& it : m_reply.rawHeaderPairs()) { - auto name = ByteString(it.first.data(), it.first.length()); - auto value = ByteString(it.second.data(), it.second.length()); - if (name.equals_ignoring_ascii_case("set-cookie"sv)) { - // NOTE: Qt may have bundled multiple Set-Cookie headers into a single one. - // We have to extract the full list of cookies via QNetworkReply::header(). - auto set_cookie_list = m_reply.header(QNetworkRequest::SetCookieHeader).value>(); - for (auto const& cookie : set_cookie_list) { - response_headers.set(name, cookie.toRawForm().data()); - } - } else { - response_headers.set(name, value); - } - } - bool success = http_status_code != 0; - on_buffered_request_finish(success, buffer.length(), response_headers, http_status_code, ReadonlyBytes { buffer.data(), (size_t)buffer.size() }); -} - -} diff --git a/Ladybird/Qt/RequestManagerQt.h b/Ladybird/Qt/RequestManagerQt.h deleted file mode 100644 index 89610ab2253..00000000000 --- a/Ladybird/Qt/RequestManagerQt.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2022, Andreas Kling - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include -#include -#include - -namespace Ladybird { - -class RequestManagerQt - : public QObject - , public Web::ResourceLoaderConnector { - Q_OBJECT -public: - static NonnullRefPtr create(Vector const& certificate_paths) - { - return adopt_ref(*new RequestManagerQt(certificate_paths)); - } - - virtual ~RequestManagerQt() override { } - - virtual void prefetch_dns(URL::URL const&) override { } - virtual void preconnect(URL::URL const&) override { } - - virtual RefPtr start_request(ByteString const& method, URL::URL const&, HTTP::HeaderMap const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&) override; - virtual RefPtr websocket_connect(const URL::URL&, ByteString const& origin, Vector const& protocols) override; - -private slots: - void reply_finished(QNetworkReply*); - -private: - explicit RequestManagerQt(Vector const& certificate_paths); - - class Request - : public Web::ResourceLoaderConnectorRequest { - public: - static ErrorOr> create(QNetworkAccessManager& qnam, ByteString const& method, URL::URL const& url, HTTP::HeaderMap const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&); - - virtual ~Request() override; - - virtual void set_buffered_request_finished_callback(Requests::Request::BufferedRequestFinished) override; - virtual void set_unbuffered_request_callbacks(Requests::Request::HeadersReceived, Requests::Request::DataReceived, Requests::Request::RequestFinished) override; - virtual bool stop() override { return false; } - - void did_finish(); - - QNetworkReply& reply() { return m_reply; } - - private: - Request(QNetworkReply&); - - QNetworkReply& m_reply; - - Requests::Request::BufferedRequestFinished on_buffered_request_finish; - }; - - HashMap> m_pending; - QNetworkAccessManager* m_qnam { nullptr }; -}; - -} diff --git a/Ladybird/Qt/WebContentView.cpp b/Ladybird/Qt/WebContentView.cpp index 9c0cdb74ed6..80846f811f7 100644 --- a/Ladybird/Qt/WebContentView.cpp +++ b/Ladybird/Qt/WebContentView.cpp @@ -135,11 +135,8 @@ WebContentView::WebContentView(QWidget* window, RefPtr request_server_client {}; - if (WebView::Application::web_content_options().use_lagom_networking == WebView::UseLagomNetworking::Yes) - request_server_client = static_cast(QApplication::instance())->request_server_client; - - auto worker_client = MUST(launch_web_worker_process(MUST(get_paths_for_helper_process("WebWorker"sv)), request_server_client)); + auto& request_server_client = static_cast(QApplication::instance())->request_server_client; + auto worker_client = MUST(launch_web_worker_process(MUST(get_paths_for_helper_process("WebWorker"sv)), *request_server_client)); return worker_client->dup_socket(); }; @@ -647,14 +644,10 @@ void WebContentView::initialize_client(WebView::ViewImplementation::CreateNewCli if (create_new_client == CreateNewClient::Yes) { m_client_state = {}; - Optional request_server_socket; - if (WebView::Application::web_content_options().use_lagom_networking == WebView::UseLagomNetworking::Yes) { - auto& protocol = static_cast(QApplication::instance())->request_server_client; + auto& request_server_client = static_cast(QApplication::instance())->request_server_client; - // FIXME: Fail to open the tab, rather than crashing the whole application if this fails - auto socket = connect_new_request_server_client(*protocol).release_value_but_fixme_should_propagate_errors(); - request_server_socket = AK::move(socket); - } + // FIXME: Fail to open the tab, rather than crashing the whole application if this fails + auto request_server_socket = connect_new_request_server_client(*request_server_client).release_value_but_fixme_should_propagate_errors(); auto image_decoder = static_cast(QApplication::instance())->image_decoder_client(); auto image_decoder_socket = connect_new_image_decoder_client(*image_decoder).release_value_but_fixme_should_propagate_errors(); diff --git a/Ladybird/Qt/WebSocketImplQt.cpp b/Ladybird/Qt/WebSocketImplQt.cpp deleted file mode 100644 index bafdc9d9b3f..00000000000 --- a/Ladybird/Qt/WebSocketImplQt.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2021, Dex♪ - * Copyright (c) 2022, Ali Mohammad Pur - * Copyright (c) 2022, the SerenityOS developers. - * Copyright (c) 2022, Andreas Kling - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include "WebSocketImplQt.h" -#include "StringUtils.h" -#include -#include -#include - -namespace Ladybird { - -WebSocketImplQt::~WebSocketImplQt() = default; -WebSocketImplQt::WebSocketImplQt() = default; - -bool WebSocketImplQt::can_read_line() -{ - return m_socket->canReadLine(); -} - -bool WebSocketImplQt::send(ReadonlyBytes bytes) -{ - auto bytes_written = m_socket->write(reinterpret_cast(bytes.data()), bytes.size()); - if (bytes_written == -1) - return false; - VERIFY(static_cast(bytes_written) == bytes.size()); - return true; -} - -bool WebSocketImplQt::eof() -{ - return m_socket->state() == QTcpSocket::SocketState::UnconnectedState - && !m_socket->bytesAvailable(); -} - -void WebSocketImplQt::discard_connection() -{ - m_socket = nullptr; -} - -void WebSocketImplQt::connect(WebSocket::ConnectionInfo const& connection_info) -{ - VERIFY(!m_socket); - VERIFY(on_connected); - VERIFY(on_connection_error); - VERIFY(on_ready_to_read); - - if (connection_info.is_secure()) { - auto ssl_socket = make(); - ssl_socket->connectToHostEncrypted( - qstring_from_ak_string(MUST(connection_info.url().serialized_host())), - connection_info.url().port_or_default()); - QObject::connect(ssl_socket.ptr(), &QSslSocket::alertReceived, [this](QSsl::AlertLevel level, QSsl::AlertType, QString const&) { - if (level == QSsl::AlertLevel::Fatal) - on_connection_error(); - }); - m_socket = move(ssl_socket); - } else { - m_socket = make(); - m_socket->connectToHost( - qstring_from_ak_string(MUST(connection_info.url().serialized_host())), - connection_info.url().port_or_default()); - } - - QObject::connect(m_socket.ptr(), &QTcpSocket::readyRead, [this] { - on_ready_to_read(); - }); - - QObject::connect(m_socket.ptr(), &QTcpSocket::connected, [this] { - on_connected(); - }); -} - -ErrorOr WebSocketImplQt::read(int max_size) -{ - auto buffer = TRY(ByteBuffer::create_uninitialized(max_size)); - auto bytes_read = m_socket->read(reinterpret_cast(buffer.data()), buffer.size()); - if (bytes_read == -1) - return Error::from_string_literal("WebSocketImplQt::read(): Error reading from socket"); - return buffer.slice(0, bytes_read); -} - -ErrorOr WebSocketImplQt::read_line(size_t size) -{ - auto buffer = TRY(ByteBuffer::create_uninitialized(size)); - auto bytes_read = m_socket->readLine(reinterpret_cast(buffer.data()), buffer.size()); - if (bytes_read == -1) - return Error::from_string_literal("WebSocketImplQt::read_line(): Error reading from socket"); - return ByteString::copy(buffer.span().slice(0, bytes_read)); -} - -} diff --git a/Ladybird/Qt/WebSocketImplQt.h b/Ladybird/Qt/WebSocketImplQt.h deleted file mode 100644 index 997b095983c..00000000000 --- a/Ladybird/Qt/WebSocketImplQt.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2021, Dex♪ - * Copyright (c) 2022, Ali Mohammad Pur - * Copyright (c) 2022, the SerenityOS developers. - * Copyright (c) 2022, Andreas Kling - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include - -class QTcpSocket; - -namespace Ladybird { - -class WebSocketImplQt final : public WebSocket::WebSocketImpl { -public: - explicit WebSocketImplQt(); - virtual ~WebSocketImplQt() override; - - virtual void connect(WebSocket::ConnectionInfo const&) override; - virtual bool can_read_line() override; - virtual ErrorOr read_line(size_t) override; - virtual ErrorOr read(int max_size) override; - virtual bool send(ReadonlyBytes) override; - virtual bool eof() override; - virtual void discard_connection() override; - -private: - OwnPtr m_socket; -}; - -} diff --git a/Ladybird/Qt/WebSocketQt.cpp b/Ladybird/Qt/WebSocketQt.cpp deleted file mode 100644 index 3a85feb0c06..00000000000 --- a/Ladybird/Qt/WebSocketQt.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2022, Dex♪ - * Copyright (c) 2022, Andreas Kling - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include "WebSocketQt.h" - -namespace Ladybird { - -NonnullRefPtr WebSocketQt::create(NonnullRefPtr underlying_socket) -{ - return adopt_ref(*new WebSocketQt(move(underlying_socket))); -} - -WebSocketQt::WebSocketQt(NonnullRefPtr underlying_socket) - : m_websocket(move(underlying_socket)) -{ - m_websocket->on_open = [weak_this = make_weak_ptr()] { - if (auto strong_this = weak_this.strong_ref()) - if (strong_this->on_open) - strong_this->on_open(); - }; - m_websocket->on_message = [weak_this = make_weak_ptr()](auto message) { - if (auto strong_this = weak_this.strong_ref()) { - if (strong_this->on_message) { - strong_this->on_message(Web::WebSockets::WebSocketClientSocket::Message { - .data = move(message.data()), - .is_text = message.is_text(), - }); - } - } - }; - m_websocket->on_error = [weak_this = make_weak_ptr()](auto error) { - if (auto strong_this = weak_this.strong_ref()) { - if (strong_this->on_error) { - switch (error) { - case WebSocket::WebSocket::Error::CouldNotEstablishConnection: - strong_this->on_error(Web::WebSockets::WebSocketClientSocket::Error::CouldNotEstablishConnection); - return; - case WebSocket::WebSocket::Error::ConnectionUpgradeFailed: - strong_this->on_error(Web::WebSockets::WebSocketClientSocket::Error::ConnectionUpgradeFailed); - return; - case WebSocket::WebSocket::Error::ServerClosedSocket: - strong_this->on_error(Web::WebSockets::WebSocketClientSocket::Error::ServerClosedSocket); - return; - } - VERIFY_NOT_REACHED(); - } - } - }; - m_websocket->on_close = [weak_this = make_weak_ptr()](u16 code, ByteString reason, bool was_clean) { - if (auto strong_this = weak_this.strong_ref()) - if (strong_this->on_close) - strong_this->on_close(code, move(reason), was_clean); - }; -} - -WebSocketQt::~WebSocketQt() = default; - -Web::WebSockets::WebSocket::ReadyState WebSocketQt::ready_state() -{ - switch (m_websocket->ready_state()) { - case WebSocket::ReadyState::Connecting: - return Web::WebSockets::WebSocket::ReadyState::Connecting; - case WebSocket::ReadyState::Open: - return Web::WebSockets::WebSocket::ReadyState::Open; - case WebSocket::ReadyState::Closing: - return Web::WebSockets::WebSocket::ReadyState::Closing; - case WebSocket::ReadyState::Closed: - return Web::WebSockets::WebSocket::ReadyState::Closed; - } - VERIFY_NOT_REACHED(); -} - -ByteString WebSocketQt::subprotocol_in_use() -{ - return m_websocket->subprotocol_in_use(); -} - -void WebSocketQt::send(ByteBuffer binary_or_text_message, bool is_text) -{ - m_websocket->send(WebSocket::Message(binary_or_text_message, is_text)); -} - -void WebSocketQt::send(StringView message) -{ - m_websocket->send(WebSocket::Message(message)); -} - -void WebSocketQt::close(u16 code, ByteString reason) -{ - m_websocket->close(code, reason); -} - -} diff --git a/Ladybird/Qt/WebSocketQt.h b/Ladybird/Qt/WebSocketQt.h deleted file mode 100644 index df57b24d594..00000000000 --- a/Ladybird/Qt/WebSocketQt.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2022, Dex♪ - * Copyright (c) 2022, Andreas Kling - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include -#include - -namespace Ladybird { - -class WebSocketQt - : public Web::WebSockets::WebSocketClientSocket - , public Weakable { -public: - static NonnullRefPtr create(NonnullRefPtr); - - virtual ~WebSocketQt() override; - - virtual Web::WebSockets::WebSocket::ReadyState ready_state() override; - virtual ByteString subprotocol_in_use() override; - virtual void send(ByteBuffer binary_or_text_message, bool is_text) override; - virtual void send(StringView message) override; - virtual void close(u16 code, ByteString reason) override; - -private: - explicit WebSocketQt(NonnullRefPtr); - - NonnullRefPtr m_websocket; -}; - -} diff --git a/Ladybird/Qt/main.cpp b/Ladybird/Qt/main.cpp index 79b5bb9397b..d66ac125676 100644 --- a/Ladybird/Qt/main.cpp +++ b/Ladybird/Qt/main.cpp @@ -114,11 +114,9 @@ ErrorOr serenity_main(Main::Arguments arguments) copy_default_config_files(Ladybird::Settings::the()->directory()); // FIXME: Create an abstraction to re-spawn the RequestServer and re-hook up its client hooks to each tab on crash - if (app->web_content_options().use_lagom_networking == WebView::UseLagomNetworking::Yes) { - auto request_server_paths = TRY(get_paths_for_helper_process("RequestServer"sv)); - auto requests_client = TRY(launch_request_server_process(request_server_paths, s_ladybird_resource_root)); - app->request_server_client = move(requests_client); - } + auto request_server_paths = TRY(get_paths_for_helper_process("RequestServer"sv)); + auto requests_client = TRY(launch_request_server_process(request_server_paths, s_ladybird_resource_root)); + app->request_server_client = move(requests_client); TRY(app->initialize_image_decoder()); diff --git a/Ladybird/WebContent/CMakeLists.txt b/Ladybird/WebContent/CMakeLists.txt index aabb83ce0c2..31a45ea1ae2 100644 --- a/Ladybird/WebContent/CMakeLists.txt +++ b/Ladybird/WebContent/CMakeLists.txt @@ -45,10 +45,7 @@ if (ENABLE_QT) qt_add_executable(WebContent ../Qt/EventLoopImplementationQt.cpp ../Qt/EventLoopImplementationQtEventTarget.cpp - ../Qt/RequestManagerQt.cpp ../Qt/StringUtils.cpp - ../Qt/WebSocketQt.cpp - ../Qt/WebSocketImplQt.cpp main.cpp ) target_link_libraries(WebContent PRIVATE Qt::Core Qt::Network) diff --git a/Ladybird/WebContent/main.cpp b/Ladybird/WebContent/main.cpp index 46f0433a64a..7b535397715 100644 --- a/Ladybird/WebContent/main.cpp +++ b/Ladybird/WebContent/main.cpp @@ -35,7 +35,6 @@ #if defined(HAVE_QT) # include -# include # include # if defined(HAVE_QT_MULTIMEDIA) @@ -100,7 +99,6 @@ ErrorOr serenity_main(Main::Arguments arguments) int image_decoder_socket { -1 }; bool is_layout_test_mode = false; bool expose_internals_object = false; - bool use_lagom_networking = false; bool wait_for_debugger = false; bool log_all_js_exceptions = false; bool enable_idl_tracing = false; @@ -116,7 +114,6 @@ ErrorOr serenity_main(Main::Arguments arguments) args_parser.add_option(image_decoder_socket, "File descriptor of the socket for the ImageDecoder connection", "image-decoder-socket", 'i', "image_decoder_socket"); args_parser.add_option(is_layout_test_mode, "Is layout test mode", "layout-test-mode"); args_parser.add_option(expose_internals_object, "Expose internals object", "expose-internals-object"); - args_parser.add_option(use_lagom_networking, "Enable Lagom servers for networking", "use-lagom-networking"); args_parser.add_option(certificates, "Path to a certificate file", "certificate", 'C', "certificate"); args_parser.add_option(wait_for_debugger, "Wait for debugger", "wait-for-debugger"); args_parser.add_option(mach_server_name, "Mach server name", "mach-server-name", 0, "mach_server_name"); @@ -166,13 +163,7 @@ ErrorOr serenity_main(Main::Arguments arguments) } #endif -#if defined(HAVE_QT) - if (!use_lagom_networking) - Web::ResourceLoader::initialize(Ladybird::RequestManagerQt::create(certificates)); - else -#endif - TRY(initialize_lagom_networking(request_server_socket)); - + TRY(initialize_lagom_networking(request_server_socket)); TRY(initialize_image_decoder(image_decoder_socket)); Web::HTML::Window::set_internals_object_exposed(expose_internals_object); diff --git a/Ladybird/WebDriver/main.cpp b/Ladybird/WebDriver/main.cpp index fea62950da0..bff28f0ddda 100644 --- a/Ladybird/WebDriver/main.cpp +++ b/Ladybird/WebDriver/main.cpp @@ -32,7 +32,7 @@ static ErrorOr launch_process(StringView application, ReadonlySpan launch_browser(ByteString const& socket_path, bool use_qt_networking, bool force_cpu_painting) +static ErrorOr launch_browser(ByteString const& socket_path, bool force_cpu_painting) { auto arguments = Vector { "--webdriver-content-path", @@ -48,8 +48,6 @@ static ErrorOr launch_browser(ByteString const& socket_path, bool use_qt_ arguments.append("--allow-popups"); arguments.append("--force-new-process"); arguments.append("--enable-autoplay"); - if (use_qt_networking) - arguments.append("--enable-qt-networking"); if (force_cpu_painting) arguments.append("--force-cpu-painting"); @@ -77,14 +75,12 @@ ErrorOr serenity_main(Main::Arguments arguments) auto listen_address = "0.0.0.0"sv; int port = 8000; - bool enable_qt_networking = false; bool force_cpu_painting = false; Core::ArgsParser args_parser; args_parser.add_option(listen_address, "IP address to listen on", "listen-address", 'l', "listen_address"); args_parser.add_option(port, "Port to listen on", "port", 'p', "port"); args_parser.add_option(certificates, "Path to a certificate file", "certificate", 'C', "certificate"); - args_parser.add_option(enable_qt_networking, "Launch browser with Qt networking enabled", "enable-qt-networking"); args_parser.add_option(force_cpu_painting, "Launch browser with GPU painting disabled", "force-cpu-painting"); args_parser.parse(arguments); @@ -122,7 +118,7 @@ ErrorOr serenity_main(Main::Arguments arguments) } auto launch_browser_callback = [&](ByteString const& socket_path) { - return launch_browser(socket_path, enable_qt_networking, force_cpu_painting); + return launch_browser(socket_path, force_cpu_painting); }; auto maybe_client = WebDriver::Client::try_create(maybe_buffered_socket.release_value(), { move(launch_browser_callback), launch_headless_browser }, server); diff --git a/Ladybird/WebWorker/CMakeLists.txt b/Ladybird/WebWorker/CMakeLists.txt index 9e5c5b9e2af..fab4399039b 100644 --- a/Ladybird/WebWorker/CMakeLists.txt +++ b/Ladybird/WebWorker/CMakeLists.txt @@ -29,10 +29,7 @@ if (ENABLE_QT) qt_add_executable(WebWorker ../Qt/EventLoopImplementationQt.cpp ../Qt/EventLoopImplementationQtEventTarget.cpp - ../Qt/RequestManagerQt.cpp ../Qt/StringUtils.cpp - ../Qt/WebSocketQt.cpp - ../Qt/WebSocketImplQt.cpp main.cpp ) target_link_libraries(WebWorker PRIVATE Qt::Core Qt::Network) diff --git a/Ladybird/WebWorker/main.cpp b/Ladybird/WebWorker/main.cpp index b88fde3ad31..fd35a41e3cf 100644 --- a/Ladybird/WebWorker/main.cpp +++ b/Ladybird/WebWorker/main.cpp @@ -28,7 +28,6 @@ #if defined(HAVE_QT) # include -# include # include #endif @@ -41,13 +40,11 @@ ErrorOr serenity_main(Main::Arguments arguments) int request_server_socket { -1 }; StringView serenity_resource_root; Vector certificates; - bool use_lagom_networking { false }; bool wait_for_debugger = 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.add_option(certificates, "Path to a certificate file", "certificate", 'C', "certificate"); args_parser.add_option(wait_for_debugger, "Wait for debugger", "wait-for-debugger"); args_parser.parse(arguments); @@ -67,12 +64,7 @@ ErrorOr serenity_main(Main::Arguments arguments) Web::Platform::FontPlugin::install(*new Ladybird::FontPlugin(false)); -#if defined(HAVE_QT) - if (!use_lagom_networking) - Web::ResourceLoader::initialize(Ladybird::RequestManagerQt::create(certificates)); - else -#endif - TRY(initialize_lagom_networking(request_server_socket)); + TRY(initialize_lagom_networking(request_server_socket)); TRY(Web::Bindings::initialize_main_thread_vm(Web::HTML::EventLoop::Type::Worker)); diff --git a/Meta/gn/secondary/Ladybird/WebContent/BUILD.gn b/Meta/gn/secondary/Ladybird/WebContent/BUILD.gn index 3f6f83f1262..e1ba0ec953b 100644 --- a/Meta/gn/secondary/Ladybird/WebContent/BUILD.gn +++ b/Meta/gn/secondary/Ladybird/WebContent/BUILD.gn @@ -8,7 +8,6 @@ enable_qt_multimedia = !enable_pulseaudio && current_os != "mac" moc_qt_objects("generate_moc") { sources = [ "//Ladybird/Qt/EventLoopImplementationQtEventTarget.h", - "//Ladybird/Qt/RequestManagerQt.h", ] if (enable_qt_multimedia) { @@ -78,10 +77,7 @@ executable("WebContent") { sources += [ "//Ladybird/Qt/EventLoopImplementationQt.cpp", "//Ladybird/Qt/EventLoopImplementationQtEventTarget.cpp", - "//Ladybird/Qt/RequestManagerQt.cpp", "//Ladybird/Qt/StringUtils.cpp", - "//Ladybird/Qt/WebSocketImplQt.cpp", - "//Ladybird/Qt/WebSocketQt.cpp", ] if (enable_qt_multimedia) { diff --git a/Userland/Libraries/LibWebView/Options.h b/Userland/Libraries/LibWebView/Options.h index 13209efaee8..6c99d076f9a 100644 --- a/Userland/Libraries/LibWebView/Options.h +++ b/Userland/Libraries/LibWebView/Options.h @@ -65,11 +65,6 @@ enum class IsLayoutTestMode { Yes, }; -enum class UseLagomNetworking { - No, - Yes, -}; - enum class LogAllJSExceptions { No, Yes, @@ -106,7 +101,6 @@ struct WebContentOptions { Optional config_path {}; Optional user_agent_preset {}; IsLayoutTestMode is_layout_test_mode { IsLayoutTestMode::No }; - UseLagomNetworking use_lagom_networking { UseLagomNetworking::Yes }; LogAllJSExceptions log_all_js_exceptions { LogAllJSExceptions::No }; EnableIDLTracing enable_idl_tracing { EnableIDLTracing::No }; EnableHTTPCache enable_http_cache { EnableHTTPCache::No };