mirror of
https://github.com/SerenityOS/serenity.git
synced 2026-11-07 04:29:30 -10:00
LibWeb+WebContent: Use NNGCPtr in WebDriver code where appropriate
Some of this code is older than widespread use of GCPtr. These functions returning raw pointers has been a point of confusion at times, so lets just indicate that they are non-null. (cherry picked from commit a96a762305423965a9697c2b7038a229d96ac734)
This commit is contained in:
1 parent
dfa9ed08ac
commit
c2a4606c1f
4 files changed
+30
-30
No files matched your search
@@ -64,7 +64,7 @@ ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, WebDriver::Error> deserialize_web_e
|
||||
auto reference = extract_web_element_reference(object);
|
||||
|
||||
// 3. Let element be the result of trying to get a known element with session and reference.
|
||||
auto* element = TRY(get_known_connected_element(reference));
|
||||
auto element = TRY(get_known_connected_element(reference));
|
||||
|
||||
// 4. Return success with data element.
|
||||
return *element;
|
||||
@@ -90,14 +90,14 @@ ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, Web::WebDriver::Error> get_web_elem
|
||||
// 1. Assert: browsing context is the current browsing context.
|
||||
|
||||
// 2. Let element be equal to the result of trying to get a known element with session and origin.
|
||||
auto* element = TRY(get_known_connected_element(origin));
|
||||
auto element = TRY(get_known_connected_element(origin));
|
||||
|
||||
// 3. Return success with data element.
|
||||
return *element;
|
||||
return element;
|
||||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-get-a-known-element
|
||||
ErrorOr<Web::DOM::Element*, Web::WebDriver::Error> get_known_connected_element(StringView element_id)
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, Web::WebDriver::Error> get_known_connected_element(StringView element_id)
|
||||
{
|
||||
// NOTE: The whole concept of "connected elements" is not implemented yet. See get_or_create_a_web_element_reference().
|
||||
// For now the element is only represented by its ID.
|
||||
@@ -120,7 +120,7 @@ ErrorOr<Web::DOM::Element*, Web::WebDriver::Error> get_known_connected_element(S
|
||||
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::StaleElementReference, ByteString::formatted("Element with ID: {} is stale", element_id));
|
||||
|
||||
// 5. Return success with data node.
|
||||
return static_cast<Web::DOM::Element*>(node);
|
||||
return static_cast<Web::DOM::Element&>(*node);
|
||||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-is-stale
|
||||
@@ -283,7 +283,7 @@ JsonObject shadow_root_reference_object(Web::DOM::ShadowRoot const& shadow_root)
|
||||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-get-a-known-shadow-root
|
||||
ErrorOr<Web::DOM::ShadowRoot*, Web::WebDriver::Error> get_known_shadow_root(StringView shadow_id)
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::ShadowRoot>, Web::WebDriver::Error> get_known_shadow_root(StringView shadow_id)
|
||||
{
|
||||
// NOTE: The whole concept of "known shadow roots" is not implemented yet. See get_or_create_a_shadow_root_reference().
|
||||
// For now the shadow root is only represented by its ID.
|
||||
@@ -296,7 +296,7 @@ ErrorOr<Web::DOM::ShadowRoot*, Web::WebDriver::Error> get_known_shadow_root(Stri
|
||||
if (!node || !node->is_shadow_root())
|
||||
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::NoSuchElement, ByteString::formatted("Could not find shadow root with ID: {}", shadow_id));
|
||||
|
||||
return static_cast<Web::DOM::ShadowRoot*>(node);
|
||||
return static_cast<Web::DOM::ShadowRoot&>(*node);
|
||||
}
|
||||
|
||||
// https://w3c.github.io/webdriver/#dfn-center-point
|
||||
|
||||
@@ -22,7 +22,7 @@ ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, WebDriver::Error> deserialize_web_e
|
||||
ByteString extract_web_element_reference(JsonObject const&);
|
||||
bool represents_a_web_element(JsonValue const& value);
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, Web::WebDriver::Error> get_web_element_origin(StringView origin);
|
||||
ErrorOr<Web::DOM::Element*, Web::WebDriver::Error> get_known_connected_element(StringView element_id);
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::Element>, Web::WebDriver::Error> get_known_connected_element(StringView element_id);
|
||||
|
||||
bool is_element_stale(Web::DOM::Node const& element);
|
||||
bool is_element_interactable(Web::HTML::BrowsingContext const&, Web::DOM::Element const&);
|
||||
@@ -36,7 +36,7 @@ bool is_element_non_typeable_form_control(Web::DOM::Element const&);
|
||||
|
||||
ByteString get_or_create_a_shadow_root_reference(Web::DOM::ShadowRoot const& shadow_root);
|
||||
JsonObject shadow_root_reference_object(Web::DOM::ShadowRoot const& shadow_root);
|
||||
ErrorOr<Web::DOM::ShadowRoot*, Web::WebDriver::Error> get_known_shadow_root(StringView shadow_id);
|
||||
ErrorOr<JS::NonnullGCPtr<Web::DOM::ShadowRoot>, Web::WebDriver::Error> get_known_shadow_root(StringView shadow_id);
|
||||
|
||||
CSSPixelPoint in_view_center_point(DOM::Element const& element, CSSPixelRect viewport);
|
||||
|
||||
|
||||
@@ -551,11 +551,11 @@ Messages::WebDriverClient::SwitchToFrameResponse WebDriverConnection::switch_to_
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known element with session and id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. If element is not a frame or iframe element, return error with error code no such frame.
|
||||
bool is_frame = is<Web::HTML::HTMLFrameElement>(element);
|
||||
bool is_iframe = is<Web::HTML::HTMLIFrameElement>(element);
|
||||
bool is_frame = is<Web::HTML::HTMLFrameElement>(*element);
|
||||
bool is_iframe = is<Web::HTML::HTMLIFrameElement>(*element);
|
||||
|
||||
if (!is_frame && !is_iframe)
|
||||
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::NoSuchFrame, "element is not a frame"sv);
|
||||
@@ -816,7 +816,7 @@ Messages::WebDriverClient::FindElementResponse WebDriverConnection::find_element
|
||||
if (!start_node)
|
||||
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::NoSuchElement, "document element does not exist"sv);
|
||||
|
||||
return start_node;
|
||||
return *start_node;
|
||||
};
|
||||
|
||||
// 9. Let result be the result of trying to Find with start node, location strategy, and selector.
|
||||
@@ -858,7 +858,7 @@ Messages::WebDriverClient::FindElementsResponse WebDriverConnection::find_elemen
|
||||
if (!start_node)
|
||||
return Web::WebDriver::Error::from_code(Web::WebDriver::ErrorCode::NoSuchElement, "document element does not exist"sv);
|
||||
|
||||
return start_node;
|
||||
return *start_node;
|
||||
};
|
||||
|
||||
// 9. Return the result of trying to Find with start node, location strategy, and selector.
|
||||
@@ -1027,7 +1027,7 @@ Messages::WebDriverClient::GetElementShadowRootResponse WebDriverConnection::get
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known connected element with url variable element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. Let shadow root be element's shadow root.
|
||||
auto shadow_root = element->shadow_root();
|
||||
@@ -1053,7 +1053,7 @@ Messages::WebDriverClient::IsElementSelectedResponse WebDriverConnection::is_ele
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known connected element with url variable element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. Let selected be the value corresponding to the first matching statement:
|
||||
bool selected = false;
|
||||
@@ -1089,7 +1089,7 @@ Messages::WebDriverClient::GetElementAttributeResponse WebDriverConnection::get_
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known connected element with url variable element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. Let result be the result of the first matching condition:
|
||||
Optional<ByteString> result;
|
||||
@@ -1123,7 +1123,7 @@ Messages::WebDriverClient::GetElementPropertyResponse WebDriverConnection::get_e
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known connected element with url variable element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
Optional<ByteString> result;
|
||||
|
||||
@@ -1156,7 +1156,7 @@ Messages::WebDriverClient::GetElementCssValueResponse WebDriverConnection::get_e
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known connected element with url variable element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. Let computed value be the result of the first matching condition:
|
||||
ByteString computed_value;
|
||||
@@ -1189,7 +1189,7 @@ Messages::WebDriverClient::GetElementTextResponse WebDriverConnection::get_eleme
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known connected element with url variable element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. Let rendered text be the result of performing implementation-specific steps whose result is exactly the same as the result of a Function.[[Call]](null, element) with bot.dom.getVisibleText as the this value.
|
||||
auto rendered_text = element->text_content();
|
||||
@@ -1208,7 +1208,7 @@ Messages::WebDriverClient::GetElementTagNameResponse WebDriverConnection::get_el
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known connected element with url variable element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. Let qualified name be the result of getting element’s tagName IDL attribute.
|
||||
auto qualified_name = element->tag_name();
|
||||
@@ -1227,7 +1227,7 @@ Messages::WebDriverClient::GetElementRectResponse WebDriverConnection::get_eleme
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known connected element with url variable element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. Calculate the absolute position of element and let it be coordinates.
|
||||
// 5. Let rect be element’s bounding rectangle.
|
||||
@@ -1258,7 +1258,7 @@ Messages::WebDriverClient::IsElementEnabledResponse WebDriverConnection::is_elem
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known connected element with url variable element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. Let enabled be a boolean initially set to true if the current browsing context’s active document’s type is not "xml".
|
||||
// 5. Otherwise, let enabled to false and jump to the last step of this algorithm.
|
||||
@@ -1284,7 +1284,7 @@ Messages::WebDriverClient::GetComputedRoleResponse WebDriverConnection::get_comp
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known connected element with url variable element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. Let role be the result of computing the WAI-ARIA role of element.
|
||||
auto role = element->role_or_default();
|
||||
@@ -1305,7 +1305,7 @@ Messages::WebDriverClient::GetComputedLabelResponse WebDriverConnection::get_com
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known element with url variable element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. Let label be the result of a Accessible Name and Description Computation for the Accessible Name of the element.
|
||||
auto label = element->accessible_name(element->document()).release_value_but_fixme_should_propagate_errors();
|
||||
@@ -1324,7 +1324,7 @@ Messages::WebDriverClient::ElementClickResponse WebDriverConnection::element_cli
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known element with element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. If the element is an input element in the file upload state return error with error code invalid argument.
|
||||
if (is<Web::HTML::HTMLInputElement>(*element)) {
|
||||
@@ -1547,7 +1547,7 @@ Messages::WebDriverClient::ElementClearResponse WebDriverConnection::element_cle
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known element with session and element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. If element is not editable, return an error with error code invalid element state.
|
||||
if (!Web::WebDriver::is_element_editable(*element))
|
||||
@@ -1603,7 +1603,7 @@ Messages::WebDriverClient::ElementSendKeysResponse WebDriverConnection::element_
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 5. Let element be the result of trying to get a known element with session and URL variables[element id].
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 6. Let file be true if element is input element in the file upload state, or false otherwise.
|
||||
auto file = is<Web::HTML::HTMLInputElement>(*element) && static_cast<Web::HTML::HTMLInputElement&>(*element).type_state() == Web::HTML::HTMLInputElement::TypeAttributeState::FileUpload;
|
||||
@@ -2241,7 +2241,7 @@ Messages::WebDriverClient::TakeElementScreenshotResponse WebDriverConnection::ta
|
||||
TRY(handle_any_user_prompts());
|
||||
|
||||
// 3. Let element be the result of trying to get a known connected element with url variable element id.
|
||||
auto* element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
auto element = TRY(Web::WebDriver::get_known_connected_element(element_id));
|
||||
|
||||
// 4. Scroll into view the element.
|
||||
(void)scroll_element_into_view(*element);
|
||||
|
||||
@@ -124,7 +124,7 @@ private:
|
||||
Gfx::IntPoint calculate_absolute_position_of_element(JS::NonnullGCPtr<Web::Geometry::DOMRect> rect);
|
||||
Gfx::IntRect calculate_absolute_rect_of_element(Web::DOM::Element const& element);
|
||||
|
||||
using StartNodeGetter = Function<ErrorOr<Web::DOM::ParentNode*, Web::WebDriver::Error>()>;
|
||||
using StartNodeGetter = Function<ErrorOr<JS::NonnullGCPtr<Web::DOM::ParentNode>, Web::WebDriver::Error>()>;
|
||||
ErrorOr<JsonArray, Web::WebDriver::Error> find(StartNodeGetter&& start_node_getter, Web::WebDriver::LocationStrategy using_, StringView value);
|
||||
|
||||
struct ScriptArguments {
|
||||
|
||||
Reference in new issue
Block a user