From 77b6d0bf166b0b0deca80e6791c0f1054ad57f6e Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Thu, 3 Nov 2022 12:46:05 -0400 Subject: [PATCH] WebContent: Add a static helper to find an element by its remote ID Instead of repeating the same checks for each WebDriver /element endpoint, add a helper to perform the lookup. --- .../WebContent/ConnectionFromClient.cpp | 69 +++++++------------ 1 file changed, 25 insertions(+), 44 deletions(-) diff --git a/Userland/Services/WebContent/ConnectionFromClient.cpp b/Userland/Services/WebContent/ConnectionFromClient.cpp index 546ca2abf6..38f9211276 100644 --- a/Userland/Services/WebContent/ConnectionFromClient.cpp +++ b/Userland/Services/WebContent/ConnectionFromClient.cpp @@ -489,35 +489,31 @@ Messages::WebContentServer::QuerySelectorAllResponse ConnectionFromClient::query return { return_list }; } -Messages::WebContentServer::GetElementAttributeResponse ConnectionFromClient::get_element_attribute(i32 element_id, String const& name) +static Optional find_element_by_id(i32 element_id) { auto* node = Web::DOM::Node::from_id(element_id); - if (!node) + if (!node || !node->is_element()) + return {}; + + return verify_cast(*node); +} + +Messages::WebContentServer::GetElementAttributeResponse ConnectionFromClient::get_element_attribute(i32 element_id, String const& name) +{ + auto element = find_element_by_id(element_id); + if (!element.has_value()) return Optional {}; - if (!node->is_element()) - return Optional {}; - - auto& element = verify_cast(*node); - - if (!element.has_attribute(name)) - return Optional {}; - - return { element.get_attribute(name) }; + return { element->get_attribute(name) }; } Messages::WebContentServer::GetElementPropertyResponse ConnectionFromClient::get_element_property(i32 element_id, String const& name) { - auto* node = Web::DOM::Node::from_id(element_id); - if (!node) + auto element = find_element_by_id(element_id); + if (!element.has_value()) return Optional {}; - if (!node->is_element()) - return Optional {}; - - auto& element = verify_cast(*node); - - auto property_or_error = element.get(name); + auto property_or_error = element->get(name); if (property_or_error.is_throw_completion()) return Optional {}; @@ -526,7 +522,7 @@ Messages::WebContentServer::GetElementPropertyResponse ConnectionFromClient::get if (property.is_undefined()) return Optional {}; - auto string_or_error = property.to_string(element.vm()); + auto string_or_error = property.to_string(element->vm()); if (string_or_error.is_error()) return Optional {}; @@ -556,18 +552,13 @@ Messages::WebContentServer::GetActiveDocumentsTypeResponse ConnectionFromClient: Messages::WebContentServer::GetComputedValueForElementResponse ConnectionFromClient::get_computed_value_for_element(i32 element_id, String const& property_name) { - auto* node = Web::DOM::Node::from_id(element_id); - if (!node) + auto element = find_element_by_id(element_id); + if (!element.has_value()) return { "" }; - if (!node->is_element()) - return { "" }; - - auto& element = verify_cast(*node); - auto property_id = Web::CSS::property_id_from_string(property_name); - auto computed_values = element.computed_css_values(); + auto computed_values = element->computed_css_values(); if (!computed_values) return { "" }; @@ -578,30 +569,20 @@ Messages::WebContentServer::GetComputedValueForElementResponse ConnectionFromCli Messages::WebContentServer::GetElementTextResponse ConnectionFromClient::get_element_text(i32 element_id) { - auto* node = Web::DOM::Node::from_id(element_id); - if (!node) + auto element = find_element_by_id(element_id); + if (!element.has_value()) return { "" }; - if (!node->is_element()) - return { "" }; - - auto& element = verify_cast(*node); - - return { element.layout_node()->dom_node()->text_content() }; + return { element->layout_node()->dom_node()->text_content() }; } Messages::WebContentServer::GetElementTagNameResponse ConnectionFromClient::get_element_tag_name(i32 element_id) { - auto* node = Web::DOM::Node::from_id(element_id); - if (!node) + auto element = find_element_by_id(element_id); + if (!element.has_value()) return { "" }; - if (!node->is_element()) - return { "" }; - - auto& element = verify_cast(*node); - - return { element.tag_name() }; + return { element->tag_name() }; } Messages::WebContentServer::GetSelectedTextResponse ConnectionFromClient::get_selected_text()