diff --git a/Libraries/LibDevTools/Actors/HighlighterActor.cpp b/Libraries/LibDevTools/Actors/HighlighterActor.cpp index f136be28840..a69e4caaecf 100644 --- a/Libraries/LibDevTools/Actors/HighlighterActor.cpp +++ b/Libraries/LibDevTools/Actors/HighlighterActor.cpp @@ -39,15 +39,11 @@ void HighlighterActor::handle_message(StringView type, JsonObject const& message return; } - auto tab = InspectorActor::tab_for(m_inspector); - auto walker = InspectorActor::walker_for(m_inspector); response.set("value"sv, false); - if (tab && walker) { - if (auto const& dom_node = walker->dom_node(*node); dom_node.has_value()) { - devtools().delegate().highlight_dom_node(tab->description(), dom_node->id, dom_node->pseudo_element); - response.set("value"sv, true); - } + if (auto dom_node = WalkerActor::dom_node_for(InspectorActor::walker_for(m_inspector), *node); dom_node.has_value()) { + devtools().delegate().highlight_dom_node(dom_node->tab->description(), dom_node->id, dom_node->pseudo_element); + response.set("value"sv, true); } send_message(move(response)); diff --git a/Libraries/LibDevTools/Actors/NodeActor.cpp b/Libraries/LibDevTools/Actors/NodeActor.cpp index 9cabe5441c5..d826bdecd76 100644 --- a/Libraries/LibDevTools/Actors/NodeActor.cpp +++ b/Libraries/LibDevTools/Actors/NodeActor.cpp @@ -6,6 +6,7 @@ #include #include +#include #include 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; diff --git a/Libraries/LibDevTools/Actors/PageStyleActor.cpp b/Libraries/LibDevTools/Actors/PageStyleActor.cpp index 00f14743685..b5f690c998b 100644 --- a/Libraries/LibDevTools/Actors/PageStyleActor.cpp +++ b/Libraries/LibDevTools/Actors/PageStyleActor.cpp @@ -95,19 +95,14 @@ JsonValue PageStyleActor::serialize_style() const template void PageStyleActor::inspect_dom_node(StringView node_actor, Callback&& callback) { - auto tab = InspectorActor::tab_for(m_inspector); - auto walker = InspectorActor::walker_for(m_inspector); - if (!tab || !walker) - return; - - auto const& dom_node = walker->dom_node(node_actor); + auto dom_node = WalkerActor::dom_node_for(InspectorActor::walker_for(m_inspector), node_actor); if (!dom_node.has_value()) return; auto block_token = block_responses(); devtools().delegate().inspect_dom_node( - tab->description(), dom_node->id, dom_node->pseudo_element, + dom_node->tab->description(), dom_node->id, dom_node->pseudo_element, [weak_self = make_weak_ptr(), block_token = move(block_token), callback = forward(callback)](ErrorOr properties) mutable { if (properties.is_error()) { dbgln_if(DEVTOOLS_DEBUG, "Unable to inspect DOM node: {}", properties.error()); diff --git a/Libraries/LibDevTools/Actors/WalkerActor.cpp b/Libraries/LibDevTools/Actors/WalkerActor.cpp index 5b605421993..2b9a4444fc3 100644 --- a/Libraries/LibDevTools/Actors/WalkerActor.cpp +++ b/Libraries/LibDevTools/Actors/WalkerActor.cpp @@ -249,8 +249,19 @@ JsonValue WalkerActor::serialize_node(JsonObject const& node) const return serialized; } +Optional WalkerActor::dom_node_for(WeakPtr const& weak_walker, StringView actor) +{ + if (auto walker = weak_walker.strong_ref()) + return walker->dom_node(actor); + return {}; +} + Optional 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::dom_node(StringView actor) else node_id = dom_node.get_integer("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 WalkerActor::find_node_by_selector(JsonObject const& node, StringView selector) diff --git a/Libraries/LibDevTools/Actors/WalkerActor.h b/Libraries/LibDevTools/Actors/WalkerActor.h index f8b667b1070..ed492797f5c 100644 --- a/Libraries/LibDevTools/Actors/WalkerActor.h +++ b/Libraries/LibDevTools/Actors/WalkerActor.h @@ -32,7 +32,9 @@ public: JsonObject const& node; Web::UniqueNodeID id { 0 }; Optional pseudo_element; + NonnullRefPtr tab; }; + static Optional dom_node_for(WeakPtr const&, StringView actor); Optional dom_node(StringView actor); private: