From cbbaf8ea2ce65898a917d7e76b7863296bbc4f1e Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Thu, 15 Dec 2022 10:40:11 -0500 Subject: [PATCH] WebDriver: Remove the WebContent socket file when closing the session Otherwise it is left on disk forever. --- Userland/Services/WebDriver/Session.cpp | 18 +++++++++++------- Userland/Services/WebDriver/Session.h | 3 ++- Userland/Services/WebDriver/main.cpp | 4 +--- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Userland/Services/WebDriver/Session.cpp b/Userland/Services/WebDriver/Session.cpp index 08d4deb4fa..18afd0cccf 100644 --- a/Userland/Services/WebDriver/Session.cpp +++ b/Userland/Services/WebDriver/Session.cpp @@ -31,12 +31,12 @@ Session::~Session() warnln("Failed to stop session {}: {}", m_id, error.error()); } -ErrorOr> Session::create_server(DeprecatedString const& socket_path, NonnullRefPtr promise) +ErrorOr> Session::create_server(NonnullRefPtr promise) { - dbgln("Listening for WebDriver connection on {}", socket_path); + dbgln("Listening for WebDriver connection on {}", *m_web_content_socket_path); auto server = TRY(Core::LocalServer::try_create()); - server->listen(socket_path); + server->listen(*m_web_content_socket_path); server->on_accept = [this, promise](auto client_socket) { auto maybe_connection = adopt_nonnull_ref_or_enomem(new (nothrow) WebContentConnection(move(client_socket), m_client, session_id())); @@ -62,13 +62,13 @@ ErrorOr Session::start(LaunchBrowserCallbacks const& callbacks) { auto promise = TRY(ServerPromise::try_create()); - auto web_content_socket_path = DeprecatedString::formatted("{}/webdriver/session_{}_{}", TRY(Core::StandardPaths::runtime_directory()), getpid(), m_id); - auto web_content_server = TRY(create_server(web_content_socket_path, promise)); + m_web_content_socket_path = DeprecatedString::formatted("{}/webdriver/session_{}_{}", TRY(Core::StandardPaths::runtime_directory()), getpid(), m_id); + auto web_content_server = TRY(create_server(promise)); if (m_options.headless) - m_browser_pid = TRY(callbacks.launch_headless_browser(web_content_socket_path)); + m_browser_pid = TRY(callbacks.launch_headless_browser(*m_web_content_socket_path)); else - m_browser_pid = TRY(callbacks.launch_browser(web_content_socket_path)); + m_browser_pid = TRY(callbacks.launch_browser(*m_web_content_socket_path)); // FIXME: Allow this to be more asynchronous. For now, this at least allows us to propagate // errors received while accepting the Browser and WebContent sockets. @@ -96,6 +96,10 @@ Web::WebDriver::Response Session::stop() MUST(Core::System::kill(*m_browser_pid, SIGTERM)); m_browser_pid = {}; } + if (m_web_content_socket_path.has_value()) { + MUST(Core::System::unlink(*m_web_content_socket_path)); + m_web_content_socket_path = {}; + } m_started = false; diff --git a/Userland/Services/WebDriver/Session.h b/Userland/Services/WebDriver/Session.h index 426df466bd..8c56ebc09f 100644 --- a/Userland/Services/WebDriver/Session.h +++ b/Userland/Services/WebDriver/Session.h @@ -39,7 +39,7 @@ public: private: using ServerPromise = Core::Promise>; - ErrorOr> create_server(DeprecatedString const& socket_path, NonnullRefPtr promise); + ErrorOr> create_server(NonnullRefPtr promise); NonnullRefPtr m_client; Web::WebDriver::LadybirdOptions m_options; @@ -48,6 +48,7 @@ private: unsigned m_id { 0 }; RefPtr m_web_content_connection; + Optional m_web_content_socket_path; Optional m_browser_pid; }; diff --git a/Userland/Services/WebDriver/main.cpp b/Userland/Services/WebDriver/main.cpp index 29a4eeb242..a3261c377e 100644 --- a/Userland/Services/WebDriver/main.cpp +++ b/Userland/Services/WebDriver/main.cpp @@ -67,8 +67,6 @@ ErrorOr serenity_main(Main::Arguments arguments) auto webdriver_socket_path = DeprecatedString::formatted("{}/webdriver", TRY(Core::StandardPaths::runtime_directory())); TRY(Core::Directory::create(webdriver_socket_path, Core::Directory::CreateDirectories::Yes)); - TRY(Core::System::pledge("stdio accept rpath recvfd inet unix proc exec fattr")); - Core::EventLoop loop; auto server = TRY(Core::TCPServer::try_create()); @@ -106,6 +104,6 @@ ErrorOr serenity_main(Main::Arguments arguments) TRY(Core::System::unveil(webdriver_socket_path, "rwc"sv)); TRY(Core::System::unveil(nullptr, nullptr)); - TRY(Core::System::pledge("stdio accept rpath recvfd unix proc exec fattr")); + TRY(Core::System::pledge("stdio accept cpath rpath recvfd unix proc exec fattr")); return loop.exec(); }