From b425ce93b13d24cadacfa5a4e2cc06f96805a2a1 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Tue, 10 Jun 2025 19:13:03 -0400 Subject: [PATCH] LibWebView+UI: Don't declare a magic ctor for Application subclasses You would have to just know that you need to define the constructor with this declaration. Let's allow subclasses to define constructors as they see fit. --- Libraries/LibWebView/Application.h | 41 +++++++++++---------------- Tests/LibWeb/test-web/Application.cpp | 2 +- Tests/LibWeb/test-web/Application.h | 1 + UI/AppKit/Application/Application.h | 2 ++ UI/AppKit/Application/Application.mm | 4 +-- UI/Qt/Application.cpp | 5 +--- UI/Qt/Application.h | 2 ++ 7 files changed, 24 insertions(+), 33 deletions(-) diff --git a/Libraries/LibWebView/Application.h b/Libraries/LibWebView/Application.h index 503aa9780cd..fcc9eb4e037 100644 --- a/Libraries/LibWebView/Application.h +++ b/Libraries/LibWebView/Application.h @@ -6,7 +6,6 @@ #pragma once -#include #include #include #include @@ -71,17 +70,10 @@ public: void refresh_tab_list(); protected: - template ApplicationType> - static NonnullOwnPtr create(Main::Arguments const& arguments) - { - auto app = adopt_own(*new ApplicationType { {} }); - app->initialize(arguments); - - return app; - } - Application(); + void initialize(Main::Arguments const&); + virtual void process_did_exit(Process&&); virtual void create_platform_arguments(Core::ArgsParser&) { } @@ -93,8 +85,6 @@ protected: Main::Arguments& arguments() { return m_arguments; } private: - void initialize(Main::Arguments const& arguments); - void launch_spare_web_content_process(); ErrorOr launch_request_server(); ErrorOr launch_image_decoder_server(); @@ -160,16 +150,17 @@ private: } -#define WEB_VIEW_APPLICATION(ApplicationType) \ -public: \ - static NonnullOwnPtr create(Main::Arguments const& arguments) \ - { \ - return WebView::Application::create(arguments); \ - } \ - \ - static ApplicationType& the() \ - { \ - return static_cast(WebView::Application::the()); \ - } \ - \ - ApplicationType(Badge); +#define WEB_VIEW_APPLICATION(ApplicationType) \ +public: \ + template \ + static NonnullOwnPtr create(Main::Arguments const& arguments, ApplicationArguments&&... application_arguments) \ + { \ + auto app = adopt_own(*new ApplicationType { forward(application_arguments)... }); \ + app->initialize(arguments); \ + return app; \ + } \ + \ + static ApplicationType& the() \ + { \ + return static_cast(WebView::Application::the()); \ + } diff --git a/Tests/LibWeb/test-web/Application.cpp b/Tests/LibWeb/test-web/Application.cpp index 405fb740971..2c036202f8f 100644 --- a/Tests/LibWeb/test-web/Application.cpp +++ b/Tests/LibWeb/test-web/Application.cpp @@ -14,7 +14,7 @@ namespace TestWeb { -Application::Application(Badge) +Application::Application() : test_concurrency(Core::System::hardware_concurrency()) , python_executable_path("python3") { diff --git a/Tests/LibWeb/test-web/Application.h b/Tests/LibWeb/test-web/Application.h index 2fb0721270e..33c7593f4d8 100644 --- a/Tests/LibWeb/test-web/Application.h +++ b/Tests/LibWeb/test-web/Application.h @@ -17,6 +17,7 @@ class Application : public WebView::Application { WEB_VIEW_APPLICATION(Application) public: + explicit Application(); ~Application(); virtual void create_platform_arguments(Core::ArgsParser&) override; diff --git a/UI/AppKit/Application/Application.h b/UI/AppKit/Application/Application.h index c44aafbe4a7..ad0f07ab431 100644 --- a/UI/AppKit/Application/Application.h +++ b/UI/AppKit/Application/Application.h @@ -16,6 +16,8 @@ class Application final : public WebView::Application { WEB_VIEW_APPLICATION(Application) private: + explicit Application(); + virtual Optional ask_user_for_download_folder() const override; virtual NonnullOwnPtr create_platform_event_loop() override; }; diff --git a/UI/AppKit/Application/Application.mm b/UI/AppKit/Application/Application.mm index 1a90e5a6e5b..4fbdb2c85b9 100644 --- a/UI/AppKit/Application/Application.mm +++ b/UI/AppKit/Application/Application.mm @@ -17,9 +17,7 @@ namespace Ladybird { -Application::Application(Badge) -{ -} +Application::Application() = default; Optional Application::ask_user_for_download_folder() const { diff --git a/UI/Qt/Application.cpp b/UI/Qt/Application.cpp index 02043589638..04b156f0484 100644 --- a/UI/Qt/Application.cpp +++ b/UI/Qt/Application.cpp @@ -48,10 +48,7 @@ public: } }; -Application::Application(Badge) -{ -} - +Application::Application() = default; Application::~Application() = default; void Application::create_platform_options(WebView::BrowserOptions&, WebView::WebContentOptions& web_content_options) diff --git a/UI/Qt/Application.h b/UI/Qt/Application.h index 5fbe4e9b5e4..e9b6071c7e7 100644 --- a/UI/Qt/Application.h +++ b/UI/Qt/Application.h @@ -29,6 +29,8 @@ public: void set_active_window(BrowserWindow& w) { m_active_window = &w; } private: + explicit Application(); + virtual void create_platform_options(WebView::BrowserOptions&, WebView::WebContentOptions&) override; virtual NonnullOwnPtr create_platform_event_loop() override;