mirror of
https://github.com/RGBCube/serenity
synced 2025-05-29 13:55:07 +00:00
WebContent+WebDriver: Implement POST /session/{id}/window
endpoint
This commit is contained in:
parent
b04cf15b3e
commit
88ecc4a1e5
7 changed files with 44 additions and 0 deletions
|
@ -63,6 +63,7 @@ static constexpr auto s_webdriver_endpoints = Array {
|
||||||
ROUTE(GET, "/session/:session_id/title"sv, get_title),
|
ROUTE(GET, "/session/:session_id/title"sv, get_title),
|
||||||
ROUTE(GET, "/session/:session_id/window"sv, get_window_handle),
|
ROUTE(GET, "/session/:session_id/window"sv, get_window_handle),
|
||||||
ROUTE(DELETE, "/session/:session_id/window"sv, close_window),
|
ROUTE(DELETE, "/session/:session_id/window"sv, close_window),
|
||||||
|
ROUTE(POST, "/session/:session_id/window"sv, switch_to_window),
|
||||||
ROUTE(GET, "/session/:session_id/window/handles"sv, get_window_handles),
|
ROUTE(GET, "/session/:session_id/window/handles"sv, get_window_handles),
|
||||||
ROUTE(GET, "/session/:session_id/window/rect"sv, get_window_rect),
|
ROUTE(GET, "/session/:session_id/window/rect"sv, get_window_rect),
|
||||||
ROUTE(POST, "/session/:session_id/window/rect"sv, set_window_rect),
|
ROUTE(POST, "/session/:session_id/window/rect"sv, set_window_rect),
|
||||||
|
|
|
@ -49,6 +49,7 @@ public:
|
||||||
// 11. Contexts, https://w3c.github.io/webdriver/#contexts
|
// 11. Contexts, https://w3c.github.io/webdriver/#contexts
|
||||||
virtual Response get_window_handle(Parameters parameters, JsonValue payload) = 0;
|
virtual Response get_window_handle(Parameters parameters, JsonValue payload) = 0;
|
||||||
virtual Response close_window(Parameters parameters, JsonValue payload) = 0;
|
virtual Response close_window(Parameters parameters, JsonValue payload) = 0;
|
||||||
|
virtual Response switch_to_window(Parameters parameters, JsonValue payload) = 0;
|
||||||
virtual Response get_window_handles(Parameters parameters, JsonValue payload) = 0;
|
virtual Response get_window_handles(Parameters parameters, JsonValue payload) = 0;
|
||||||
virtual Response get_window_rect(Parameters parameters, JsonValue payload) = 0;
|
virtual Response get_window_rect(Parameters parameters, JsonValue payload) = 0;
|
||||||
virtual Response set_window_rect(Parameters parameters, JsonValue payload) = 0;
|
virtual Response set_window_rect(Parameters parameters, JsonValue payload) = 0;
|
||||||
|
|
|
@ -17,6 +17,7 @@ endpoint WebDriverClient {
|
||||||
get_title() => (Web::WebDriver::Response response)
|
get_title() => (Web::WebDriver::Response response)
|
||||||
get_window_handle() => (Web::WebDriver::Response response)
|
get_window_handle() => (Web::WebDriver::Response response)
|
||||||
close_window() => (Web::WebDriver::Response response)
|
close_window() => (Web::WebDriver::Response response)
|
||||||
|
switch_to_window(JsonValue payload) => (Web::WebDriver::Response response)
|
||||||
get_window_handles() => (Web::WebDriver::Response response)
|
get_window_handles() => (Web::WebDriver::Response response)
|
||||||
get_window_rect() => (Web::WebDriver::Response response)
|
get_window_rect() => (Web::WebDriver::Response response)
|
||||||
set_window_rect(JsonValue payload) => (Web::WebDriver::Response response)
|
set_window_rect(JsonValue payload) => (Web::WebDriver::Response response)
|
||||||
|
|
|
@ -481,6 +481,36 @@ Messages::WebDriverClient::CloseWindowResponse WebDriverConnection::close_window
|
||||||
return get_window_handles().take_response();
|
return get_window_handles().take_response();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 11.3 Switch to Window, https://w3c.github.io/webdriver/#dfn-switch-to-window
|
||||||
|
Messages::WebDriverClient::SwitchToWindowResponse WebDriverConnection::switch_to_window(JsonValue const& payload)
|
||||||
|
{
|
||||||
|
// 1. Let handle be the result of getting the property "handle" from the parameters argument.
|
||||||
|
// 2. If handle is undefined, return error with error code invalid argument.
|
||||||
|
auto handle = TRY(get_property(payload, "handle"sv));
|
||||||
|
|
||||||
|
// 3. If there is an active user prompt, that prevents the focusing of another top-level browsing
|
||||||
|
// context, return error with error code unexpected alert open.
|
||||||
|
if (m_page_client.page().has_pending_dialog())
|
||||||
|
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::UnexpectedAlertOpen, "A user dialog is open"sv);
|
||||||
|
|
||||||
|
// 4. If handle is equal to the associated window handle for some top-level browsing context in the
|
||||||
|
// current session, let context be the that browsing context, and set the current top-level
|
||||||
|
// browsing context with context.
|
||||||
|
// Otherwise, return error with error code no such window.
|
||||||
|
auto const& maybe_window = m_windows.get(handle);
|
||||||
|
|
||||||
|
if (!maybe_window.has_value())
|
||||||
|
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::NoSuchWindow, "Window not found");
|
||||||
|
|
||||||
|
m_current_window_handle = handle;
|
||||||
|
|
||||||
|
// FIXME: 5. Update any implementation-specific state that would result from the user selecting the current
|
||||||
|
// browsing context for interaction, without altering OS-level focus.
|
||||||
|
|
||||||
|
// 6. Return success with data null.
|
||||||
|
return JsonValue {};
|
||||||
|
}
|
||||||
|
|
||||||
// 11.4 Get Window Handles, https://w3c.github.io/webdriver/#dfn-get-window-handles
|
// 11.4 Get Window Handles, https://w3c.github.io/webdriver/#dfn-get-window-handles
|
||||||
Messages::WebDriverClient::GetWindowHandlesResponse WebDriverConnection::get_window_handles()
|
Messages::WebDriverClient::GetWindowHandlesResponse WebDriverConnection::get_window_handles()
|
||||||
{
|
{
|
||||||
|
|
|
@ -52,6 +52,7 @@ private:
|
||||||
virtual Messages::WebDriverClient::GetTitleResponse get_title() override;
|
virtual Messages::WebDriverClient::GetTitleResponse get_title() override;
|
||||||
virtual Messages::WebDriverClient::GetWindowHandleResponse get_window_handle() override;
|
virtual Messages::WebDriverClient::GetWindowHandleResponse get_window_handle() override;
|
||||||
virtual Messages::WebDriverClient::CloseWindowResponse close_window() override;
|
virtual Messages::WebDriverClient::CloseWindowResponse close_window() override;
|
||||||
|
virtual Messages::WebDriverClient::SwitchToWindowResponse switch_to_window(JsonValue const& payload) override;
|
||||||
virtual Messages::WebDriverClient::GetWindowHandlesResponse get_window_handles() override;
|
virtual Messages::WebDriverClient::GetWindowHandlesResponse get_window_handles() override;
|
||||||
virtual Messages::WebDriverClient::GetWindowRectResponse get_window_rect() override;
|
virtual Messages::WebDriverClient::GetWindowRectResponse get_window_rect() override;
|
||||||
virtual Messages::WebDriverClient::SetWindowRectResponse set_window_rect(JsonValue const& payload) override;
|
virtual Messages::WebDriverClient::SetWindowRectResponse set_window_rect(JsonValue const& payload) override;
|
||||||
|
|
|
@ -322,6 +322,15 @@ Web::WebDriver::Response Client::close_window(Web::WebDriver::Parameters paramet
|
||||||
return open_windows;
|
return open_windows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 11.3 Switch to Window, https://w3c.github.io/webdriver/#dfn-switch-to-window
|
||||||
|
// POST /session/{session id}/window
|
||||||
|
Web::WebDriver::Response Client::switch_to_window(Web::WebDriver::Parameters parameters, AK::JsonValue payload)
|
||||||
|
{
|
||||||
|
dbgln_if(WEBDRIVER_DEBUG, "Handling POST /session/<session_id>/window");
|
||||||
|
auto* session = TRY(find_session_with_id(parameters[0]));
|
||||||
|
return session->web_content_connection().switch_to_window(payload);
|
||||||
|
}
|
||||||
|
|
||||||
// 11.4 Get Window Handles, https://w3c.github.io/webdriver/#dfn-get-window-handles
|
// 11.4 Get Window Handles, https://w3c.github.io/webdriver/#dfn-get-window-handles
|
||||||
// GET /session/{session id}/window/handles
|
// GET /session/{session id}/window/handles
|
||||||
Web::WebDriver::Response Client::get_window_handles(Web::WebDriver::Parameters parameters, JsonValue)
|
Web::WebDriver::Response Client::get_window_handles(Web::WebDriver::Parameters parameters, JsonValue)
|
||||||
|
|
|
@ -46,6 +46,7 @@ private:
|
||||||
virtual Web::WebDriver::Response get_title(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
virtual Web::WebDriver::Response get_title(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
virtual Web::WebDriver::Response get_window_handle(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
virtual Web::WebDriver::Response get_window_handle(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
virtual Web::WebDriver::Response close_window(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
virtual Web::WebDriver::Response close_window(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
|
virtual Web::WebDriver::Response switch_to_window(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
virtual Web::WebDriver::Response get_window_handles(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
virtual Web::WebDriver::Response get_window_handles(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
virtual Web::WebDriver::Response get_window_rect(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
virtual Web::WebDriver::Response get_window_rect(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
virtual Web::WebDriver::Response set_window_rect(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
virtual Web::WebDriver::Response set_window_rect(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue