diff --git a/Userland/Libraries/LibWebView/ViewImplementation.h b/Userland/Libraries/LibWebView/ViewImplementation.h index 9427535b927..2e12d0e4ca4 100644 --- a/Userland/Libraries/LibWebView/ViewImplementation.h +++ b/Userland/Libraries/LibWebView/ViewImplementation.h @@ -38,6 +38,7 @@ public: String custom_properties_json; String node_box_sizing_json; String aria_properties_state_json; + String fonts_json; }; void set_url(Badge, URL::URL url) { m_url = move(url); } diff --git a/Userland/Libraries/LibWebView/WebContentClient.cpp b/Userland/Libraries/LibWebView/WebContentClient.cpp index 7ff57eb2a61..e80723e3f99 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.cpp +++ b/Userland/Libraries/LibWebView/WebContentClient.cpp @@ -282,7 +282,7 @@ void WebContentClient::did_inspect_dom_tree(u64 page_id, ByteString const& dom_t } } -void WebContentClient::did_inspect_dom_node(u64 page_id, bool has_style, ByteString const& computed_style, ByteString const& resolved_style, ByteString const& custom_properties, ByteString const& node_box_sizing, ByteString const& aria_properties_state) +void WebContentClient::did_inspect_dom_node(u64 page_id, bool has_style, ByteString const& computed_style, ByteString const& resolved_style, ByteString const& custom_properties, ByteString const& node_box_sizing, ByteString const& aria_properties_state, ByteString const& fonts) { auto view = view_for_page_id(page_id); if (!view.has_value() || !view->on_received_dom_node_properties) @@ -297,6 +297,7 @@ void WebContentClient::did_inspect_dom_node(u64 page_id, bool has_style, ByteStr .custom_properties_json = MUST(String::from_byte_string(custom_properties)), .node_box_sizing_json = MUST(String::from_byte_string(node_box_sizing)), .aria_properties_state_json = MUST(String::from_byte_string(aria_properties_state)), + .fonts_json = MUST(String::from_byte_string(fonts)) }; } diff --git a/Userland/Libraries/LibWebView/WebContentClient.h b/Userland/Libraries/LibWebView/WebContentClient.h index 01ac7e43f43..9de57eb0d50 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.h +++ b/Userland/Libraries/LibWebView/WebContentClient.h @@ -70,7 +70,7 @@ private: virtual void did_request_media_context_menu(u64 page_id, Gfx::IntPoint, ByteString const&, unsigned, Web::Page::MediaContextMenu const&) override; virtual void did_get_source(u64 page_id, URL::URL const&, ByteString const&) override; virtual void did_inspect_dom_tree(u64 page_id, ByteString const&) override; - virtual void did_inspect_dom_node(u64 page_id, bool has_style, ByteString const& computed_style, ByteString const& resolved_style, ByteString const& custom_properties, ByteString const& node_box_sizing, ByteString const& aria_properties_state) override; + virtual void did_inspect_dom_node(u64 page_id, bool has_style, ByteString const& computed_style, ByteString const& resolved_style, ByteString const& custom_properties, ByteString const& node_box_sizing, ByteString const& aria_properties_state, ByteString const& fonts) override; virtual void did_inspect_accessibility_tree(u64 page_id, ByteString const&) override; virtual void did_get_hovered_node_id(u64 page_id, i32 node_id) override; virtual void did_finish_editing_dom_node(u64 page_id, Optional const& node_id) override; diff --git a/Userland/Services/WebContent/ConnectionFromClient.cpp b/Userland/Services/WebContent/ConnectionFromClient.cpp index 59645b52730..373ace15945 100644 --- a/Userland/Services/WebContent/ConnectionFromClient.cpp +++ b/Userland/Services/WebContent/ConnectionFromClient.cpp @@ -453,7 +453,7 @@ void ConnectionFromClient::inspect_dom_node(u64 page_id, i32 node_id, Optionallayout_node()) { - async_did_inspect_dom_node(page_id, false, {}, {}, {}, {}, {}); + async_did_inspect_dom_node(page_id, false, {}, {}, {}, {}, {}, {}); return; } @@ -462,7 +462,7 @@ void ConnectionFromClient::inspect_dom_node(u64 page_id, i32 node_id, Optionalis_element()) { auto& element = verify_cast(*node); if (!element.computed_css_values()) { - async_did_inspect_dom_node(page_id, false, {}, {}, {}, {}, {}); + async_did_inspect_dom_node(page_id, false, {}, {}, {}, {}, {}, {}); return; } @@ -546,10 +546,28 @@ void ConnectionFromClient::inspect_dom_node(u64 page_id, i32 node_id, Optional ByteString { + StringBuilder builder; + auto serializer = MUST(JsonArraySerializer<>::try_create(builder)); + + auto const& font_list = properties.computed_font_list(); + font_list.for_each_font_entry([&serializer](Gfx::FontCascadeList::Entry const& entry) { + auto const& font = entry.font; + auto font_json_object = MUST(serializer.add_object()); + MUST(font_json_object.add("name"sv, font->family())); + MUST(font_json_object.add("size"sv, font->point_size())); + MUST(font_json_object.add("weight"sv, font->weight())); + MUST(font_json_object.add("variant"sv, font->variant())); + MUST(font_json_object.finish()); + }); + MUST(serializer.finish()); + return builder.to_byte_string(); + }; + if (pseudo_element.has_value()) { auto pseudo_element_node = element.get_pseudo_element_node(pseudo_element.value()); if (!pseudo_element_node) { - async_did_inspect_dom_node(page_id, false, {}, {}, {}, {}, {}); + async_did_inspect_dom_node(page_id, false, {}, {}, {}, {}, {}, {}); return; } @@ -558,8 +576,9 @@ void ConnectionFromClient::inspect_dom_node(u64 page_id, i32 node_id, Optional node_id) =|