From 12015a4db6f4b7b1f1dc949680a18350d0f46c21 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Tue, 7 Mar 2023 10:46:14 -0500 Subject: [PATCH] WebDriver: Remove active sessions from the close-the-session AO These steps now have more than one caller; specifically, they may be called from the Delete Session and Close Window endpoints. The session was only removed from the active session map for the former endpoint. Instead, let's more accurately handle removing the session where the spec tells us to, so that all callers properly perform this step. --- Userland/Services/WebDriver/Client.cpp | 14 +------------- Userland/Services/WebDriver/Client.h | 1 - Userland/Services/WebDriver/Session.cpp | 2 +- 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/Userland/Services/WebDriver/Client.cpp b/Userland/Services/WebDriver/Client.cpp index 18de3eaa8d..6af99076c3 100644 --- a/Userland/Services/WebDriver/Client.cpp +++ b/Userland/Services/WebDriver/Client.cpp @@ -49,18 +49,6 @@ ErrorOr, Web::WebDriver::Error> Client::find_session_with return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::InvalidSessionId, "Invalid session id"); } -ErrorOr, Web::WebDriver::Error> Client::take_session_with_id(StringView session_id) -{ - auto session_id_or_error = session_id.to_uint<>(); - if (!session_id_or_error.has_value()) - return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::InvalidSessionId, "Invalid session id"); - - if (auto session = s_sessions.take(*session_id_or_error); session.has_value()) - return session.release_value(); - - return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::InvalidSessionId, "Invalid session id"); -} - void Client::close_session(unsigned session_id) { if (s_sessions.remove(session_id)) @@ -196,7 +184,7 @@ Web::WebDriver::Response Client::delete_session(Web::WebDriver::Parameters param dbgln_if(WEBDRIVER_DEBUG, "Handling DELETE /session/"); // 1. If the current session is an active session, try to close the session. - auto session = TRY(take_session_with_id(parameters[0])); + auto session = TRY(find_session_with_id(parameters[0])); TRY(session->stop()); // 2. Return success with data null. diff --git a/Userland/Services/WebDriver/Client.h b/Userland/Services/WebDriver/Client.h index 981bf46387..10d4450a4e 100644 --- a/Userland/Services/WebDriver/Client.h +++ b/Userland/Services/WebDriver/Client.h @@ -36,7 +36,6 @@ private: Client(NonnullOwnPtr, LaunchBrowserCallbacks, Core::Object* parent); ErrorOr, Web::WebDriver::Error> find_session_with_id(StringView session_id); - ErrorOr, Web::WebDriver::Error> take_session_with_id(StringView session_id); virtual Web::WebDriver::Response new_session(Web::WebDriver::Parameters parameters, JsonValue payload) override; virtual Web::WebDriver::Response delete_session(Web::WebDriver::Parameters parameters, JsonValue payload) override; diff --git a/Userland/Services/WebDriver/Session.cpp b/Userland/Services/WebDriver/Session.cpp index 392edeeece..0c6fd87434 100644 --- a/Userland/Services/WebDriver/Session.cpp +++ b/Userland/Services/WebDriver/Session.cpp @@ -97,7 +97,7 @@ Web::WebDriver::Response Session::stop() web_content_connection().close_session(); // 2. Remove the current session from active sessions. - // NOTE: Handled by WebDriver::Client. + m_client->close_session(session_id()); // 3. Perform any implementation-specific cleanup steps. if (m_browser_pid.has_value()) {