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

@ -6,6 +6,7 @@
#include <AK/JsonObject.h>
#include <LibDevTools/Actors/NodeActor.h>
#include <LibDevTools/Actors/TabActor.h>
#include <LibDevTools/Actors/WalkerActor.h>
namespace DevTools {
@ -29,10 +30,8 @@ void NodeActor::handle_message(StringView type, JsonObject const&)
response.set("from"sv, name());
if (type == "getUniqueSelector"sv) {
if (auto walker = m_walker.strong_ref()) {
if (auto const& dom_node = walker->dom_node(name()); dom_node.has_value())
response.set("value"sv, dom_node->node.get_string("name"sv)->to_ascii_lowercase());
}
if (auto dom_node = WalkerActor::dom_node_for(m_walker, name()); dom_node.has_value())
response.set("value"sv, dom_node->node.get_string("name"sv)->to_ascii_lowercase());
send_message(move(response));
return;