diff --git a/Libraries/LibDevTools/Actors/NodeActor.h b/Libraries/LibDevTools/Actors/NodeActor.h index 8b8d6fd013c..4287e21b993 100644 --- a/Libraries/LibDevTools/Actors/NodeActor.h +++ b/Libraries/LibDevTools/Actors/NodeActor.h @@ -11,20 +11,12 @@ #include #include #include +#include #include #include namespace DevTools { -struct DEVTOOLS_API NodeIdentifier { - static NodeIdentifier for_node(JsonObject const& node); - - bool operator==(NodeIdentifier const&) const = default; - - Web::UniqueNodeID id { 0 }; - Optional pseudo_element; -}; - class NodeActor final : public Actor { public: static constexpr auto base_name = "node"sv; diff --git a/Libraries/LibDevTools/Actors/WalkerActor.cpp b/Libraries/LibDevTools/Actors/WalkerActor.cpp index a9d2c181b66..0a44b037c8a 100644 --- a/Libraries/LibDevTools/Actors/WalkerActor.cpp +++ b/Libraries/LibDevTools/Actors/WalkerActor.cpp @@ -388,19 +388,6 @@ JsonValue WalkerActor::serialize_root() const return serialize_node(m_dom_tree); } -static constexpr Web::DOM::NodeType parse_node_type(StringView type) -{ - if (type == "document"sv) - return Web::DOM::NodeType::DOCUMENT_NODE; - if (type == "element"sv) - return Web::DOM::NodeType::ELEMENT_NODE; - if (type == "text"sv) - return Web::DOM::NodeType::TEXT_NODE; - if (type == "comment"sv) - return Web::DOM::NodeType::COMMENT_NODE; - return Web::DOM::NodeType::INVALID; -} - JsonValue WalkerActor::serialize_node(JsonObject const& node) const { auto tab = m_tab.strong_ref(); @@ -414,7 +401,7 @@ JsonValue WalkerActor::serialize_node(JsonObject const& node) const auto name = node.get_string("name"sv).release_value(); auto type = node.get_string("type"sv).release_value(); - auto dom_type = parse_node_type(type); + auto dom_type = parse_dom_node_type(type); JsonValue node_value; auto is_top_level_document = &node == &m_dom_tree; @@ -450,7 +437,7 @@ JsonValue WalkerActor::serialize_node(JsonObject const& node) const if (auto parent_actor = m_dom_node_id_to_actor_map.get(parent_id); parent_actor.has_value()) { if (auto parent_node = WalkerActor::dom_node_for(this, *parent_actor); parent_node.has_value()) { - dom_type = parse_node_type(parent_node->node.get_string("type"sv).value()); + dom_type = parse_dom_node_type(parent_node->node.get_string("type"sv).value()); is_displayed = !is_top_level_document && parent_node->node.get_bool("visible"sv).value_or(false); } } @@ -518,14 +505,14 @@ JsonValue WalkerActor::serialize_node(JsonObject const& node) const return serialized; } -Optional WalkerActor::dom_node_for(WeakPtr const& weak_walker, StringView actor) +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) +Optional WalkerActor::dom_node(StringView actor) { auto tab = m_tab.strong_ref(); if (!tab) @@ -538,7 +525,7 @@ Optional WalkerActor::dom_node(StringView actor) auto const& dom_node = *maybe_dom_node.value(); auto identifier = NodeIdentifier::for_node(dom_node); - return DOMNode { .node = dom_node, .identifier = move(identifier), .tab = tab.release_nonnull() }; + return Node { .node = dom_node, .identifier = move(identifier), .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 d62ba49813d..11a27c44c15 100644 --- a/Libraries/LibDevTools/Actors/WalkerActor.h +++ b/Libraries/LibDevTools/Actors/WalkerActor.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -28,13 +29,8 @@ public: static bool is_suitable_for_dom_inspection(JsonValue const&); JsonValue serialize_root() const; - struct DOMNode { - JsonObject const& node; - NodeIdentifier identifier; - NonnullRefPtr tab; - }; - static Optional dom_node_for(WeakPtr const&, StringView actor); - Optional dom_node(StringView actor); + static Optional dom_node_for(WeakPtr const&, StringView actor); + Optional dom_node(StringView actor); private: WalkerActor(DevToolsServer&, String name, WeakPtr, JsonObject dom_tree); diff --git a/Libraries/LibDevTools/Forward.h b/Libraries/LibDevTools/Forward.h index c905f716fc1..6158ba9f6b7 100644 --- a/Libraries/LibDevTools/Forward.h +++ b/Libraries/LibDevTools/Forward.h @@ -35,6 +35,7 @@ class WalkerActor; class WatcherActor; struct CSSProperty; +struct Node; struct ProcessDescription; struct TabDescription; diff --git a/Libraries/LibDevTools/Node.h b/Libraries/LibDevTools/Node.h new file mode 100644 index 00000000000..a0b7a4dc897 --- /dev/null +++ b/Libraries/LibDevTools/Node.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2025, Tim Flynn + * Copyright (c) 2025, Sam Atkins + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace DevTools { + +struct DEVTOOLS_API NodeIdentifier { + static NodeIdentifier for_node(JsonObject const& node); + + bool operator==(NodeIdentifier const&) const = default; + + Web::UniqueNodeID id { 0 }; + Optional pseudo_element; +}; + +struct DEVTOOLS_API Node { + JsonObject const& node; + NodeIdentifier identifier; + NonnullRefPtr tab; +}; + +static constexpr Web::DOM::NodeType parse_dom_node_type(StringView type) +{ + if (type == "document"sv) + return Web::DOM::NodeType::DOCUMENT_NODE; + if (type == "element"sv) + return Web::DOM::NodeType::ELEMENT_NODE; + if (type == "text"sv) + return Web::DOM::NodeType::TEXT_NODE; + if (type == "comment"sv) + return Web::DOM::NodeType::COMMENT_NODE; + return Web::DOM::NodeType::INVALID; +} + +}