diff --git a/Userland/Libraries/LibWeb/WebDriver/Client.cpp b/Userland/Libraries/LibWeb/WebDriver/Client.cpp index ca5ab4feff9..003d1129712 100644 --- a/Userland/Libraries/LibWeb/WebDriver/Client.cpp +++ b/Userland/Libraries/LibWeb/WebDriver/Client.cpp @@ -69,6 +69,7 @@ static constexpr auto s_webdriver_endpoints = Array { ROUTE(POST, "/session/:session_id/window/maximize"sv, maximize_window), ROUTE(POST, "/session/:session_id/window/minimize"sv, minimize_window), ROUTE(POST, "/session/:session_id/window/fullscreen"sv, fullscreen_window), + ROUTE(POST, "/session/:session_id/window/consume-user-activation"sv, consume_user_activation), ROUTE(POST, "/session/:session_id/element"sv, find_element), ROUTE(POST, "/session/:session_id/elements"sv, find_elements), ROUTE(POST, "/session/:session_id/element/:element_id/element"sv, find_element_from_element), diff --git a/Userland/Libraries/LibWeb/WebDriver/Client.h b/Userland/Libraries/LibWeb/WebDriver/Client.h index 639938aa6ee..fe1497a251d 100644 --- a/Userland/Libraries/LibWeb/WebDriver/Client.h +++ b/Userland/Libraries/LibWeb/WebDriver/Client.h @@ -59,6 +59,9 @@ public: virtual Response minimize_window(Parameters parameters, JsonValue payload) = 0; virtual Response fullscreen_window(Parameters parameters, JsonValue payload) = 0; + // Extension: https://html.spec.whatwg.org/multipage/interaction.html#user-activation-user-agent-automation + virtual Response consume_user_activation(Parameters parameters, JsonValue payload) = 0; + // 12. Elements, https://w3c.github.io/webdriver/#elements virtual Response find_element(Parameters parameters, JsonValue payload) = 0; virtual Response find_elements(Parameters parameters, JsonValue payload) = 0; diff --git a/Userland/Services/WebContent/WebDriverClient.ipc b/Userland/Services/WebContent/WebDriverClient.ipc index c26fcb2edce..8c988c15d57 100644 --- a/Userland/Services/WebContent/WebDriverClient.ipc +++ b/Userland/Services/WebContent/WebDriverClient.ipc @@ -24,6 +24,7 @@ endpoint WebDriverClient { maximize_window() => (Web::WebDriver::Response response) minimize_window() => (Web::WebDriver::Response response) fullscreen_window() => (Web::WebDriver::Response response) + consume_user_activation() => (Web::WebDriver::Response response) find_element(JsonValue payload) => (Web::WebDriver::Response response) find_elements(JsonValue payload) => (Web::WebDriver::Response response) find_element_from_element(JsonValue payload, String element_id) => (Web::WebDriver::Response response) diff --git a/Userland/Services/WebContent/WebDriverConnection.cpp b/Userland/Services/WebContent/WebDriverConnection.cpp index d53be5e7663..bb45e0e4420 100644 --- a/Userland/Services/WebContent/WebDriverConnection.cpp +++ b/Userland/Services/WebContent/WebDriverConnection.cpp @@ -754,6 +754,27 @@ Messages::WebDriverClient::FullscreenWindowResponse WebDriverConnection::fullscr return serialize_rect(rect); } +// Extension Consume User Activation, https://html.spec.whatwg.org/multipage/interaction.html#user-activation-user-agent-automation +Messages::WebDriverClient::ConsumeUserActivationResponse WebDriverConnection::consume_user_activation() +{ + // FIXME: This should probably be in the spec steps + // If the current top-level browsing context is no longer open, return error with error code no such window. + TRY(ensure_open_top_level_browsing_context()); + + // 1. Let window be current browsing context's active window. + auto* window = m_page_client->page().top_level_browsing_context().active_window(); + + // 2. Let consume be true if window has transient activation; otherwise false. + bool consume = window->has_transient_activation(); + + // 3. If consume is true, then consume user activation of window. + if (consume) + window->consume_user_activation(); + + // 4. Return success with data consume. + return consume; +} + // 12.3.2 Find Element, https://w3c.github.io/webdriver/#dfn-find-element Messages::WebDriverClient::FindElementResponse WebDriverConnection::find_element(JsonValue const& payload) { diff --git a/Userland/Services/WebContent/WebDriverConnection.h b/Userland/Services/WebContent/WebDriverConnection.h index 6b0a7559dc1..35170edb83a 100644 --- a/Userland/Services/WebContent/WebDriverConnection.h +++ b/Userland/Services/WebContent/WebDriverConnection.h @@ -61,6 +61,7 @@ private: virtual Messages::WebDriverClient::MaximizeWindowResponse maximize_window() override; virtual Messages::WebDriverClient::MinimizeWindowResponse minimize_window() override; virtual Messages::WebDriverClient::FullscreenWindowResponse fullscreen_window() override; + virtual Messages::WebDriverClient::ConsumeUserActivationResponse consume_user_activation() override; virtual Messages::WebDriverClient::FindElementResponse find_element(JsonValue const& payload) override; virtual Messages::WebDriverClient::FindElementsResponse find_elements(JsonValue const& payload) override; virtual Messages::WebDriverClient::FindElementFromElementResponse find_element_from_element(JsonValue const& payload, String const& element_id) override; diff --git a/Userland/Services/WebDriver/Client.cpp b/Userland/Services/WebDriver/Client.cpp index 529fb61729a..c56bbbd05c8 100644 --- a/Userland/Services/WebDriver/Client.cpp +++ b/Userland/Services/WebDriver/Client.cpp @@ -389,6 +389,15 @@ Web::WebDriver::Response Client::fullscreen_window(Web::WebDriver::Parameters pa return session->web_content_connection().fullscreen_window(); } +// Extension: Consume User Activation, https://html.spec.whatwg.org/multipage/interaction.html#user-activation-user-agent-automation +// POST /session/{session id}/window/consume-user-activation +Web::WebDriver::Response Client::consume_user_activation(Web::WebDriver::Parameters parameters, JsonValue) +{ + dbgln_if(WEBDRIVER_DEBUG, "Handling POST /session//window/consume-user-activation"); + auto session = TRY(find_session_with_id(parameters[0])); + return session->web_content_connection().consume_user_activation(); +} + // 12.3.2 Find Element, https://w3c.github.io/webdriver/#dfn-find-element // POST /session/{session id}/element Web::WebDriver::Response Client::find_element(Web::WebDriver::Parameters parameters, JsonValue payload) diff --git a/Userland/Services/WebDriver/Client.h b/Userland/Services/WebDriver/Client.h index 4c30f169774..4a713fcd67e 100644 --- a/Userland/Services/WebDriver/Client.h +++ b/Userland/Services/WebDriver/Client.h @@ -58,6 +58,7 @@ private: virtual Web::WebDriver::Response maximize_window(Web::WebDriver::Parameters parameters, JsonValue payload) override; virtual Web::WebDriver::Response minimize_window(Web::WebDriver::Parameters parameters, JsonValue payload) override; virtual Web::WebDriver::Response fullscreen_window(Web::WebDriver::Parameters parameters, JsonValue payload) override; + virtual Web::WebDriver::Response consume_user_activation(Web::WebDriver::Parameters parameters, JsonValue payload) override; virtual Web::WebDriver::Response find_element(Web::WebDriver::Parameters parameters, JsonValue payload) override; virtual Web::WebDriver::Response find_elements(Web::WebDriver::Parameters parameters, JsonValue payload) override; virtual Web::WebDriver::Response find_element_from_element(Web::WebDriver::Parameters parameters, JsonValue payload) override;