/* * Copyright (c) 2025, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include #include #include namespace DevTools { NonnullRefPtr HighlighterActor::create(DevToolsServer& devtools, String name, WeakPtr inspector) { return adopt_ref(*new HighlighterActor(devtools, move(name), move(inspector))); } HighlighterActor::HighlighterActor(DevToolsServer& devtools, String name, WeakPtr inspector) : Actor(devtools, move(name)) , m_inspector(move(inspector)) { } HighlighterActor::~HighlighterActor() = default; void HighlighterActor::handle_message(StringView type, JsonObject const& message) { JsonObject response; response.set("from"sv, name()); if (type == "show"sv) { auto node = message.get_string("node"sv); if (!node.has_value()) { send_missing_parameter_error("node"sv); 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); } } send_message(move(response)); return; } if (type == "hide"sv) { if (auto tab = InspectorActor::tab_for(m_inspector)) devtools().delegate().clear_highlighted_dom_node(tab->description()); send_message(move(response)); return; } send_unrecognized_packet_type_error(type); } JsonValue HighlighterActor::serialize_highlighter() const { JsonObject highlighter; highlighter.set("actor"sv, name()); return highlighter; } }