From 3f8b65e45c21ed7a59b97da42fab9ba7ccd6811e Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Fri, 21 Feb 2025 16:17:20 -0500 Subject: [PATCH] LibDevTools: Stub out a layout inspector actor The DevTools client will ask for this actor before trying to render any box model or computed style information. We can just stub out this actor for now. --- .../Actors/LayoutInspectorActor.cpp | 45 +++++++++++++++++++ .../LibDevTools/Actors/LayoutInspectorActor.h | 27 +++++++++++ Libraries/LibDevTools/Actors/WalkerActor.cpp | 13 ++++++ Libraries/LibDevTools/Actors/WalkerActor.h | 2 + Libraries/LibDevTools/CMakeLists.txt | 1 + Libraries/LibDevTools/Forward.h | 1 + 6 files changed, 89 insertions(+) create mode 100644 Libraries/LibDevTools/Actors/LayoutInspectorActor.cpp create mode 100644 Libraries/LibDevTools/Actors/LayoutInspectorActor.h diff --git a/Libraries/LibDevTools/Actors/LayoutInspectorActor.cpp b/Libraries/LibDevTools/Actors/LayoutInspectorActor.cpp new file mode 100644 index 00000000000..1a53fb318e2 --- /dev/null +++ b/Libraries/LibDevTools/Actors/LayoutInspectorActor.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2025, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +namespace DevTools { + +NonnullRefPtr LayoutInspectorActor::create(DevToolsServer& devtools, String name) +{ + return adopt_ref(*new LayoutInspectorActor(devtools, move(name))); +} + +LayoutInspectorActor::LayoutInspectorActor(DevToolsServer& devtools, String name) + : Actor(devtools, move(name)) +{ +} + +LayoutInspectorActor::~LayoutInspectorActor() = default; + +void LayoutInspectorActor::handle_message(StringView type, JsonObject const&) +{ + JsonObject response; + response.set("from"sv, name()); + + if (type == "getCurrentFlexbox"sv) { + response.set("flexbox"sv, JsonValue {}); + send_message(move(response)); + return; + } + + if (type == "getGrids"sv) { + response.set("grids"sv, JsonArray {}); + send_message(move(response)); + return; + } + + send_unrecognized_packet_type_error(type); +} + +} diff --git a/Libraries/LibDevTools/Actors/LayoutInspectorActor.h b/Libraries/LibDevTools/Actors/LayoutInspectorActor.h new file mode 100644 index 00000000000..986bcbf572c --- /dev/null +++ b/Libraries/LibDevTools/Actors/LayoutInspectorActor.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace DevTools { + +class LayoutInspectorActor final : public Actor { +public: + static constexpr auto base_name = "layout-inspector"sv; + + static NonnullRefPtr create(DevToolsServer&, String name); + virtual ~LayoutInspectorActor() override; + + virtual void handle_message(StringView type, JsonObject const&) override; + +private: + LayoutInspectorActor(DevToolsServer&, String name); +}; + +} diff --git a/Libraries/LibDevTools/Actors/WalkerActor.cpp b/Libraries/LibDevTools/Actors/WalkerActor.cpp index d793cf8d123..9646ad45599 100644 --- a/Libraries/LibDevTools/Actors/WalkerActor.cpp +++ b/Libraries/LibDevTools/Actors/WalkerActor.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -59,6 +60,18 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message) return; } + if (type == "getLayoutInspector"sv) { + if (!m_layout_inspector) + m_layout_inspector = devtools().register_actor(); + + JsonObject actor; + actor.set("actor"sv, m_layout_inspector->name()); + + response.set("actor"sv, move(actor)); + send_message(move(response)); + return; + } + if (type == "querySelector"sv) { auto node = message.get_string("node"sv); if (!node.has_value()) { diff --git a/Libraries/LibDevTools/Actors/WalkerActor.h b/Libraries/LibDevTools/Actors/WalkerActor.h index 90cc69919be..f8b667b1070 100644 --- a/Libraries/LibDevTools/Actors/WalkerActor.h +++ b/Libraries/LibDevTools/Actors/WalkerActor.h @@ -44,6 +44,8 @@ private: void populate_dom_tree_cache(JsonObject& node, JsonObject const* parent = nullptr); WeakPtr m_tab; + WeakPtr m_layout_inspector; + JsonObject m_dom_tree; HashMap m_dom_node_to_parent_map; diff --git a/Libraries/LibDevTools/CMakeLists.txt b/Libraries/LibDevTools/CMakeLists.txt index 2babaaee865..279c0036966 100644 --- a/Libraries/LibDevTools/CMakeLists.txt +++ b/Libraries/LibDevTools/CMakeLists.txt @@ -5,6 +5,7 @@ set(SOURCES Actors/FrameActor.cpp Actors/HighlighterActor.cpp Actors/InspectorActor.cpp + Actors/LayoutInspectorActor.cpp Actors/NodeActor.cpp Actors/PageStyleActor.cpp Actors/PreferenceActor.cpp diff --git a/Libraries/LibDevTools/Forward.h b/Libraries/LibDevTools/Forward.h index 637eab76eb1..ddfa9a3e377 100644 --- a/Libraries/LibDevTools/Forward.h +++ b/Libraries/LibDevTools/Forward.h @@ -17,6 +17,7 @@ class DevToolsServer; class FrameActor; class HighlighterActor; class InspectorActor; +class LayoutInspectorActor; class NodeActor; class PageStyleActor; class PreferenceActor;