LibDevTools: Add a helper to extract a DOM node JSON object more easily

The pattern of:

    auto tab = get_tab();
    auto walker = get_walker();

    if (tab && walker) {
        if (auto node = walker->dom_node(node_id)) {
            delegate().do_something(tab->description(), node);
        }
    }

Is getting a bit unergonomic and is often repeated. This patch just adds
a helper to WalkerActor to do most of this work, so now we have:

    if (auto node = WalkerActor::dom_node_for(get_walker(), node_id)) {
        delegate().do_something(node->tab->description(), node);
    }
This commit is contained in:
Timothy Flynn 2025-03-05 16:16:49 -05:00 committed by Andreas Kling
commit ee88edc750
Notes: github-actions[bot] 2025-03-08 00:28:09 +00:00
5 changed files with 22 additions and 19 deletions

View file

@ -249,8 +249,19 @@ JsonValue WalkerActor::serialize_node(JsonObject const& node) const
return serialized;
}
Optional<WalkerActor::DOMNode> WalkerActor::dom_node_for(WeakPtr<WalkerActor> const& weak_walker, StringView actor)
{
if (auto walker = weak_walker.strong_ref())
return walker->dom_node(actor);
return {};
}
Optional<WalkerActor::DOMNode> WalkerActor::dom_node(StringView actor)
{
auto tab = m_tab.strong_ref();
if (!tab)
return {};
auto maybe_dom_node = m_actor_to_dom_node_map.get(actor);
if (!maybe_dom_node.has_value() || !maybe_dom_node.value())
return {};
@ -268,7 +279,7 @@ Optional<WalkerActor::DOMNode> WalkerActor::dom_node(StringView actor)
else
node_id = dom_node.get_integer<Web::UniqueNodeID::Type>("id"sv).value();
return DOMNode { .node = dom_node, .id = node_id, .pseudo_element = pseudo_element };
return DOMNode { .node = dom_node, .id = node_id, .pseudo_element = pseudo_element, .tab = tab.release_nonnull() };
}
Optional<JsonObject const&> WalkerActor::find_node_by_selector(JsonObject const& node, StringView selector)