mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 07:08:10 +00:00
LibWeb+LibWebView+WebContent+WebDriver: Implement Send Alert Text
This commit is contained in:
parent
f9b8742fff
commit
f7bb835d09
13 changed files with 70 additions and 0 deletions
|
@ -96,6 +96,7 @@ static constexpr auto s_webdriver_endpoints = Array {
|
||||||
ROUTE(POST, "/session/:session_id/alert/dismiss"sv, dismiss_alert),
|
ROUTE(POST, "/session/:session_id/alert/dismiss"sv, dismiss_alert),
|
||||||
ROUTE(POST, "/session/:session_id/alert/accept"sv, accept_alert),
|
ROUTE(POST, "/session/:session_id/alert/accept"sv, accept_alert),
|
||||||
ROUTE(GET, "/session/:session_id/alert/text"sv, get_alert_text),
|
ROUTE(GET, "/session/:session_id/alert/text"sv, get_alert_text),
|
||||||
|
ROUTE(POST, "/session/:session_id/alert/text"sv, send_alert_text),
|
||||||
ROUTE(GET, "/session/:session_id/screenshot"sv, take_screenshot),
|
ROUTE(GET, "/session/:session_id/screenshot"sv, take_screenshot),
|
||||||
ROUTE(GET, "/session/:session_id/element/:element_id/screenshot"sv, take_element_screenshot),
|
ROUTE(GET, "/session/:session_id/element/:element_id/screenshot"sv, take_element_screenshot),
|
||||||
};
|
};
|
||||||
|
|
|
@ -90,6 +90,7 @@ public:
|
||||||
virtual Response dismiss_alert(Parameters parameters, JsonValue payload) = 0;
|
virtual Response dismiss_alert(Parameters parameters, JsonValue payload) = 0;
|
||||||
virtual Response accept_alert(Parameters parameters, JsonValue payload) = 0;
|
virtual Response accept_alert(Parameters parameters, JsonValue payload) = 0;
|
||||||
virtual Response get_alert_text(Parameters parameters, JsonValue payload) = 0;
|
virtual Response get_alert_text(Parameters parameters, JsonValue payload) = 0;
|
||||||
|
virtual Response send_alert_text(Parameters parameters, JsonValue payload) = 0;
|
||||||
|
|
||||||
// 17. Screen capture, https://w3c.github.io/webdriver/#screen-capture
|
// 17. Screen capture, https://w3c.github.io/webdriver/#screen-capture
|
||||||
virtual Response take_screenshot(Parameters parameters, JsonValue payload) = 0;
|
virtual Response take_screenshot(Parameters parameters, JsonValue payload) = 0;
|
||||||
|
|
|
@ -378,6 +378,12 @@ void OutOfProcessWebView::notify_server_did_request_prompt(Badge<WebContentClien
|
||||||
m_dialog = nullptr;
|
m_dialog = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OutOfProcessWebView::notify_server_did_request_set_prompt_text(Badge<WebContentClient>, String const& message)
|
||||||
|
{
|
||||||
|
if (m_dialog && is<GUI::InputBox>(*m_dialog))
|
||||||
|
static_cast<GUI::InputBox&>(*m_dialog).set_text_value(message);
|
||||||
|
}
|
||||||
|
|
||||||
void OutOfProcessWebView::notify_server_did_request_accept_dialog(Badge<WebContentClient>)
|
void OutOfProcessWebView::notify_server_did_request_accept_dialog(Badge<WebContentClient>)
|
||||||
{
|
{
|
||||||
if (m_dialog)
|
if (m_dialog)
|
||||||
|
|
|
@ -158,6 +158,7 @@ private:
|
||||||
virtual void notify_server_did_request_alert(Badge<WebContentClient>, String const& message) override;
|
virtual void notify_server_did_request_alert(Badge<WebContentClient>, String const& message) override;
|
||||||
virtual void notify_server_did_request_confirm(Badge<WebContentClient>, String const& message) override;
|
virtual void notify_server_did_request_confirm(Badge<WebContentClient>, String const& message) override;
|
||||||
virtual void notify_server_did_request_prompt(Badge<WebContentClient>, String const& message, String const& default_) override;
|
virtual void notify_server_did_request_prompt(Badge<WebContentClient>, String const& message, String const& default_) override;
|
||||||
|
virtual void notify_server_did_request_set_prompt_text(Badge<WebContentClient>, String const& message) override;
|
||||||
virtual void notify_server_did_request_accept_dialog(Badge<WebContentClient>) override;
|
virtual void notify_server_did_request_accept_dialog(Badge<WebContentClient>) override;
|
||||||
virtual void notify_server_did_request_dismiss_dialog(Badge<WebContentClient>) override;
|
virtual void notify_server_did_request_dismiss_dialog(Badge<WebContentClient>) override;
|
||||||
virtual void notify_server_did_get_source(const AK::URL& url, String const& source) override;
|
virtual void notify_server_did_get_source(const AK::URL& url, String const& source) override;
|
||||||
|
|
|
@ -44,6 +44,7 @@ public:
|
||||||
virtual void notify_server_did_request_alert(Badge<WebContentClient>, String const& message) = 0;
|
virtual void notify_server_did_request_alert(Badge<WebContentClient>, String const& message) = 0;
|
||||||
virtual void notify_server_did_request_confirm(Badge<WebContentClient>, String const& message) = 0;
|
virtual void notify_server_did_request_confirm(Badge<WebContentClient>, String const& message) = 0;
|
||||||
virtual void notify_server_did_request_prompt(Badge<WebContentClient>, String const& message, String const& default_) = 0;
|
virtual void notify_server_did_request_prompt(Badge<WebContentClient>, String const& message, String const& default_) = 0;
|
||||||
|
virtual void notify_server_did_request_set_prompt_text(Badge<WebContentClient>, String const& message) = 0;
|
||||||
virtual void notify_server_did_request_accept_dialog(Badge<WebContentClient>) = 0;
|
virtual void notify_server_did_request_accept_dialog(Badge<WebContentClient>) = 0;
|
||||||
virtual void notify_server_did_request_dismiss_dialog(Badge<WebContentClient>) = 0;
|
virtual void notify_server_did_request_dismiss_dialog(Badge<WebContentClient>) = 0;
|
||||||
virtual void notify_server_did_get_source(const AK::URL& url, String const& source) = 0;
|
virtual void notify_server_did_get_source(const AK::URL& url, String const& source) = 0;
|
||||||
|
|
|
@ -191,6 +191,11 @@ void WebContentClient::did_request_prompt(String const& message, String const& d
|
||||||
m_view.notify_server_did_request_prompt({}, message, default_);
|
m_view.notify_server_did_request_prompt({}, message, default_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebContentClient::did_request_set_prompt_text(String const& message)
|
||||||
|
{
|
||||||
|
m_view.notify_server_did_request_set_prompt_text({}, message);
|
||||||
|
}
|
||||||
|
|
||||||
void WebContentClient::did_request_accept_dialog()
|
void WebContentClient::did_request_accept_dialog()
|
||||||
{
|
{
|
||||||
m_view.notify_server_did_request_accept_dialog({});
|
m_view.notify_server_did_request_accept_dialog({});
|
||||||
|
|
|
@ -60,6 +60,7 @@ private:
|
||||||
virtual void did_request_alert(String const&) override;
|
virtual void did_request_alert(String const&) override;
|
||||||
virtual void did_request_confirm(String const&) override;
|
virtual void did_request_confirm(String const&) override;
|
||||||
virtual void did_request_prompt(String const&, String const&) override;
|
virtual void did_request_prompt(String const&, String const&) override;
|
||||||
|
virtual void did_request_set_prompt_text(String const& message) override;
|
||||||
virtual void did_request_accept_dialog() override;
|
virtual void did_request_accept_dialog() override;
|
||||||
virtual void did_request_dismiss_dialog() override;
|
virtual void did_request_dismiss_dialog() override;
|
||||||
virtual Messages::WebContentClient::DidRequestAllCookiesResponse did_request_all_cookies(AK::URL const&) override;
|
virtual Messages::WebContentClient::DidRequestAllCookiesResponse did_request_all_cookies(AK::URL const&) override;
|
||||||
|
|
|
@ -32,6 +32,7 @@ endpoint WebContentClient
|
||||||
did_request_alert(String message) =|
|
did_request_alert(String message) =|
|
||||||
did_request_confirm(String message) =|
|
did_request_confirm(String message) =|
|
||||||
did_request_prompt(String message, String default_) =|
|
did_request_prompt(String message, String default_) =|
|
||||||
|
did_request_set_prompt_text(String message) =|
|
||||||
did_request_accept_dialog() =|
|
did_request_accept_dialog() =|
|
||||||
did_request_dismiss_dialog() =|
|
did_request_dismiss_dialog() =|
|
||||||
did_get_source(URL url, String source) =|
|
did_get_source(URL url, String source) =|
|
||||||
|
|
|
@ -46,6 +46,7 @@ endpoint WebDriverClient {
|
||||||
dismiss_alert() => (Web::WebDriver::Response response)
|
dismiss_alert() => (Web::WebDriver::Response response)
|
||||||
accept_alert() => (Web::WebDriver::Response response)
|
accept_alert() => (Web::WebDriver::Response response)
|
||||||
get_alert_text() => (Web::WebDriver::Response response)
|
get_alert_text() => (Web::WebDriver::Response response)
|
||||||
|
send_alert_text(JsonValue payload) => (Web::WebDriver::Response response)
|
||||||
take_screenshot() => (Web::WebDriver::Response response)
|
take_screenshot() => (Web::WebDriver::Response response)
|
||||||
take_element_screenshot(String element_id) => (Web::WebDriver::Response response)
|
take_element_screenshot(String element_id) => (Web::WebDriver::Response response)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1396,6 +1396,47 @@ Messages::WebDriverClient::GetAlertTextResponse WebDriverConnection::get_alert_t
|
||||||
return JsonValue {};
|
return JsonValue {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 16.4 Send Alert Text, https://w3c.github.io/webdriver/#send-alert-text
|
||||||
|
Messages::WebDriverClient::SendAlertTextResponse WebDriverConnection::send_alert_text(JsonValue const& payload)
|
||||||
|
{
|
||||||
|
// 1. Let text be the result of getting the property "text" from parameters.
|
||||||
|
// 2. If text is not a String, return error with error code invalid argument.
|
||||||
|
auto text = TRY(get_property(payload, "text"sv));
|
||||||
|
|
||||||
|
// 3. 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());
|
||||||
|
|
||||||
|
// 4. If there is no current user prompt, return error with error code no such alert.
|
||||||
|
if (!m_page_host.has_pending_dialog())
|
||||||
|
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::NoSuchAlert, "No user dialog is currently open"sv);
|
||||||
|
|
||||||
|
// 5. Run the substeps of the first matching current user prompt:
|
||||||
|
switch (m_page_host.pending_dialog()) {
|
||||||
|
// -> alert
|
||||||
|
// -> confirm
|
||||||
|
case PageHost::PendingDialog::Alert:
|
||||||
|
case PageHost::PendingDialog::Confirm:
|
||||||
|
// Return error with error code element not interactable.
|
||||||
|
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::ElementNotInteractable, "Only prompt dialogs may receive text"sv);
|
||||||
|
|
||||||
|
// -> prompt
|
||||||
|
case PageHost::PendingDialog::Prompt:
|
||||||
|
// Do nothing.
|
||||||
|
break;
|
||||||
|
|
||||||
|
// -> Otherwise
|
||||||
|
default:
|
||||||
|
// Return error with error code unsupported operation.
|
||||||
|
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::UnsupportedOperation, "Unknown dialog type"sv);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 6. Perform user agent dependent steps to set the value of current user prompt’s text field to text.
|
||||||
|
m_web_content_client.async_did_request_set_prompt_text(move(text));
|
||||||
|
|
||||||
|
// 7. Return success with data null.
|
||||||
|
return JsonValue {};
|
||||||
|
}
|
||||||
|
|
||||||
// 17.1 Take Screenshot, https://w3c.github.io/webdriver/#take-screenshot
|
// 17.1 Take Screenshot, https://w3c.github.io/webdriver/#take-screenshot
|
||||||
Messages::WebDriverClient::TakeScreenshotResponse WebDriverConnection::take_screenshot()
|
Messages::WebDriverClient::TakeScreenshotResponse WebDriverConnection::take_screenshot()
|
||||||
{
|
{
|
||||||
|
|
|
@ -81,6 +81,7 @@ private:
|
||||||
virtual Messages::WebDriverClient::DismissAlertResponse dismiss_alert() override;
|
virtual Messages::WebDriverClient::DismissAlertResponse dismiss_alert() override;
|
||||||
virtual Messages::WebDriverClient::AcceptAlertResponse accept_alert() override;
|
virtual Messages::WebDriverClient::AcceptAlertResponse accept_alert() override;
|
||||||
virtual Messages::WebDriverClient::GetAlertTextResponse get_alert_text() override;
|
virtual Messages::WebDriverClient::GetAlertTextResponse get_alert_text() override;
|
||||||
|
virtual Messages::WebDriverClient::SendAlertTextResponse send_alert_text(JsonValue const& payload) override;
|
||||||
virtual Messages::WebDriverClient::TakeScreenshotResponse take_screenshot() override;
|
virtual Messages::WebDriverClient::TakeScreenshotResponse take_screenshot() override;
|
||||||
virtual Messages::WebDriverClient::TakeElementScreenshotResponse take_element_screenshot(String const& element_id) override;
|
virtual Messages::WebDriverClient::TakeElementScreenshotResponse take_element_screenshot(String const& element_id) override;
|
||||||
|
|
||||||
|
|
|
@ -566,6 +566,15 @@ Web::WebDriver::Response Client::get_alert_text(Web::WebDriver::Parameters param
|
||||||
return session->web_content_connection().get_alert_text();
|
return session->web_content_connection().get_alert_text();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 16.4 Send Alert Text, https://w3c.github.io/webdriver/#send-alert-text
|
||||||
|
// POST /session/{session id}/alert/text
|
||||||
|
Web::WebDriver::Response Client::send_alert_text(Web::WebDriver::Parameters parameters, JsonValue payload)
|
||||||
|
{
|
||||||
|
dbgln_if(WEBDRIVER_DEBUG, "Handling POST /session/<session_id>/alert/text");
|
||||||
|
auto* session = TRY(find_session_with_id(parameters[0]));
|
||||||
|
return session->web_content_connection().send_alert_text(payload);
|
||||||
|
}
|
||||||
|
|
||||||
// 17.1 Take Screenshot, https://w3c.github.io/webdriver/#take-screenshot
|
// 17.1 Take Screenshot, https://w3c.github.io/webdriver/#take-screenshot
|
||||||
// GET /session/{session id}/screenshot
|
// GET /session/{session id}/screenshot
|
||||||
Web::WebDriver::Response Client::take_screenshot(Web::WebDriver::Parameters parameters, JsonValue)
|
Web::WebDriver::Response Client::take_screenshot(Web::WebDriver::Parameters parameters, JsonValue)
|
||||||
|
|
|
@ -79,6 +79,7 @@ private:
|
||||||
virtual Web::WebDriver::Response dismiss_alert(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
virtual Web::WebDriver::Response dismiss_alert(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
virtual Web::WebDriver::Response accept_alert(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
virtual Web::WebDriver::Response accept_alert(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
virtual Web::WebDriver::Response get_alert_text(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
virtual Web::WebDriver::Response get_alert_text(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
|
virtual Web::WebDriver::Response send_alert_text(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
virtual Web::WebDriver::Response take_screenshot(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
virtual Web::WebDriver::Response take_screenshot(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
virtual Web::WebDriver::Response take_element_screenshot(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
virtual Web::WebDriver::Response take_element_screenshot(Web::WebDriver::Parameters parameters, JsonValue payload) override;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue