From 47493b5734ab05b903c8e1ac1c18db46920b60f0 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Sat, 12 Nov 2022 18:17:09 -0500 Subject: [PATCH] WebDriver: Implement Close Window closer to the spec We are expected to return the list of open handles after closing the current handle. Also just return a WebDriver::Response instead of a wrapped Error variant. --- Userland/Services/WebDriver/Client.cpp | 4 ++-- Userland/Services/WebDriver/Client.h | 23 ----------------------- Userland/Services/WebDriver/Session.cpp | 19 +++++++++---------- Userland/Services/WebDriver/Session.h | 2 +- 4 files changed, 12 insertions(+), 36 deletions(-) diff --git a/Userland/Services/WebDriver/Client.cpp b/Userland/Services/WebDriver/Client.cpp index 48a8940d12..5e8fd1151d 100644 --- a/Userland/Services/WebDriver/Client.cpp +++ b/Userland/Services/WebDriver/Client.cpp @@ -559,8 +559,8 @@ Web::WebDriver::Response Client::handle_close_window(Vector const& p { dbgln_if(WEBDRIVER_DEBUG, "Handling DELETE /session//window"); auto* session = TRY(find_session_with_id(parameters[0])); - TRY(unwrap_result(session->close_window())); - return make_json_value(JsonValue()); + auto result = TRY(session->close_window()); + return make_json_value(result); } // 11.4 Get Window Handles, https://w3c.github.io/webdriver/#dfn-get-window-handles diff --git a/Userland/Services/WebDriver/Client.h b/Userland/Services/WebDriver/Client.h index 766ddc0ca2..ca69194564 100644 --- a/Userland/Services/WebDriver/Client.h +++ b/Userland/Services/WebDriver/Client.h @@ -95,29 +95,6 @@ private: ErrorOr, Web::WebDriver::Error> take_session_with_id(StringView session_id); JsonValue make_json_value(JsonValue const&); - template - static ErrorOr unwrap_result(ErrorOr> result) - { - if (result.is_error()) { - Variant error = result.release_error(); - if (error.has()) - return error.get(); - return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::UnsupportedOperation, error.get().string_literal()); - } - - return result.release_value(); - } - static ErrorOr unwrap_result(ErrorOr> result) - { - if (result.is_error()) { - Variant error = result.release_error(); - if (error.has()) - return error.get(); - return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::UnsupportedOperation, error.get().string_literal()); - } - return {}; - } - NonnullOwnPtr m_socket; static Vector s_routes; String m_prefix = "/"; diff --git a/Userland/Services/WebDriver/Session.cpp b/Userland/Services/WebDriver/Session.cpp index 526cb35bf7..323ba5fde5 100644 --- a/Userland/Services/WebDriver/Session.cpp +++ b/Userland/Services/WebDriver/Session.cpp @@ -142,23 +142,22 @@ Web::WebDriver::Response Session::get_window_handle() } // 11.2 Close Window, https://w3c.github.io/webdriver/#dfn-close-window -ErrorOr> Session::close_window() +Web::WebDriver::Response Session::close_window() { // 1. If the current top-level browsing context is no longer open, return error with error code no such window. TRY(check_for_open_top_level_browsing_context_or_return_error()); - // 2. Close the current top-level browsing context. + // FIXME: 2. Handle any user prompts and return its value if it is an error. + + // 3. Close the current top-level browsing context. m_windows.remove(m_current_window_handle); - // 3. If there are no more open top-level browsing contexts, then close the session. - if (m_windows.is_empty()) { - auto result = stop(); - if (result.is_error()) { - return Variant(result.release_error()); - } - } + // 4. If there are no more open top-level browsing contexts, then close the session. + if (m_windows.is_empty()) + TRY(stop()); - return {}; + // 5. Return the result of running the remote end steps for the Get Window Handles command. + return get_window_handles(); } // 11.4 Get Window Handles, https://w3c.github.io/webdriver/#dfn-get-window-handles diff --git a/Userland/Services/WebDriver/Session.h b/Userland/Services/WebDriver/Session.h index 2518d72a37..4385765e47 100644 --- a/Userland/Services/WebDriver/Session.h +++ b/Userland/Services/WebDriver/Session.h @@ -48,7 +48,7 @@ public: ErrorOr start(); Web::WebDriver::Response stop(); Web::WebDriver::Response get_window_handle(); - ErrorOr> close_window(); + Web::WebDriver::Response close_window(); Web::WebDriver::Response get_window_handles() const; Web::WebDriver::Response take_element_screenshot(StringView element_id);