LibWebView+WebContent: Transfer inspected DOM info over IPC as String

Let's avoid a whole bunch of String to ByteString to String conversions.
This commit is contained in:
Timothy Flynn 2025-02-21 11:51:05 -05:00 committed by Tim Flynn
parent 1e841cd453
commit 5478f34992
Notes: github-actions[bot] 2025-02-24 17:07:24 +00:00
6 changed files with 44 additions and 44 deletions

View file

@ -371,7 +371,7 @@ void Application::inspect_tab(DevTools::TabDescription const& description, DevTo
return;
}
view->on_received_dom_tree = [&view = *view, on_complete = move(on_complete)](ByteString const& dom_tree) {
view->on_received_dom_tree = [&view = *view, on_complete = move(on_complete)](String const& dom_tree) {
view.on_received_dom_tree = nullptr;
if (auto parsed_tree = JsonValue::from_string(dom_tree); parsed_tree.is_error()) {

View file

@ -200,9 +200,9 @@ public:
Function<void()> on_request_accept_dialog;
Function<void()> on_request_dismiss_dialog;
Function<void(URL::URL const&, URL::URL const&, String const&)> on_received_source;
Function<void(ByteString const&)> on_received_dom_tree;
Function<void(String const&)> on_received_dom_tree;
Function<void(Optional<DOMNodeProperties>)> on_received_dom_node_properties;
Function<void(ByteString const&)> on_received_accessibility_tree;
Function<void(String const&)> on_received_accessibility_tree;
Function<void(Vector<Web::CSS::StyleSheetIdentifier>)> on_received_style_sheet_list;
Function<void(Web::CSS::StyleSheetIdentifier const&)> on_inspector_requested_style_sheet_source;
Function<void(Web::CSS::StyleSheetIdentifier const&, URL::URL const&, String const&)> on_received_style_sheet_source;

View file

@ -264,7 +264,7 @@ void WebContentClient::did_get_source(u64 page_id, URL::URL const& url, URL::URL
}
}
void WebContentClient::did_inspect_dom_tree(u64 page_id, ByteString const& dom_tree)
void WebContentClient::did_inspect_dom_tree(u64 page_id, String const& dom_tree)
{
if (auto view = view_for_page_id(page_id); view.has_value()) {
if (view->on_received_dom_tree)
@ -272,7 +272,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, ByteString const& fonts)
void WebContentClient::did_inspect_dom_node(u64 page_id, bool has_style, String const& computed_style, String const& resolved_style, String const& custom_properties, String const& node_box_sizing, String const& aria_properties_state, String const& fonts)
{
auto view = view_for_page_id(page_id);
if (!view.has_value() || !view->on_received_dom_node_properties)
@ -282,19 +282,19 @@ void WebContentClient::did_inspect_dom_node(u64 page_id, bool has_style, ByteStr
if (has_style) {
properties = ViewImplementation::DOMNodeProperties {
.computed_style_json = MUST(String::from_byte_string(computed_style)),
.resolved_style_json = MUST(String::from_byte_string(resolved_style)),
.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))
.computed_style_json = computed_style,
.resolved_style_json = resolved_style,
.custom_properties_json = custom_properties,
.node_box_sizing_json = node_box_sizing,
.aria_properties_state_json = aria_properties_state,
.fonts_json = fonts,
};
}
view->on_received_dom_node_properties(move(properties));
}
void WebContentClient::did_inspect_accessibility_tree(u64 page_id, ByteString const& accessibility_tree)
void WebContentClient::did_inspect_accessibility_tree(u64 page_id, String const& accessibility_tree)
{
if (auto view = view_for_page_id(page_id); view.has_value()) {
if (view->on_received_accessibility_tree)

View file

@ -71,9 +71,9 @@ private:
virtual void did_request_image_context_menu(u64 page_id, Gfx::IntPoint, URL::URL const&, ByteString const&, unsigned, Optional<Gfx::ShareableBitmap> const&) override;
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&, URL::URL const&, String 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, ByteString const& fonts) override;
virtual void did_inspect_accessibility_tree(u64 page_id, ByteString const&) override;
virtual void did_inspect_dom_tree(u64 page_id, String const&) override;
virtual void did_inspect_dom_node(u64 page_id, bool has_style, String const& computed_style, String const& resolved_style, String const& custom_properties, String const& node_box_sizing, String const& aria_properties_state, String const& fonts) override;
virtual void did_inspect_accessibility_tree(u64 page_id, String const&) override;
virtual void did_get_hovered_node_id(u64 page_id, Web::UniqueNodeID const& node_id) override;
virtual void did_finish_editing_dom_node(u64 page_id, Optional<Web::UniqueNodeID> const& node_id) override;
virtual void did_get_dom_node_html(u64 page_id, String const& html) override;

View file

@ -430,7 +430,7 @@ void ConnectionFromClient::inspect_dom_tree(u64 page_id)
{
if (auto page = this->page(page_id); page.has_value()) {
if (auto* doc = page->page().top_level_browsing_context().active_document())
async_did_inspect_dom_tree(page_id, doc->dump_dom_tree_as_json().to_byte_string());
async_did_inspect_dom_tree(page_id, doc->dump_dom_tree_as_json());
}
}
@ -462,7 +462,7 @@ void ConnectionFromClient::inspect_dom_node(u64 page_id, Web::UniqueNodeID const
return;
}
auto serialize_json = [](Web::CSS::ComputedProperties const& properties) -> ByteString {
auto serialize_json = [](Web::CSS::ComputedProperties const& properties) {
StringBuilder builder;
auto serializer = MUST(JsonObjectSerializer<>::try_create(builder));
@ -471,10 +471,10 @@ void ConnectionFromClient::inspect_dom_node(u64 page_id, Web::UniqueNodeID const
});
MUST(serializer.finish());
return builder.to_byte_string();
return MUST(builder.to_string());
};
auto serialize_custom_properties_json = [](Web::DOM::Element const& element, Optional<Web::CSS::Selector::PseudoElement::Type> pseudo_element) -> ByteString {
auto serialize_custom_properties_json = [](Web::DOM::Element const& element, Optional<Web::CSS::Selector::PseudoElement::Type> pseudo_element) {
StringBuilder builder;
auto serializer = MUST(JsonObjectSerializer<>::try_create(builder));
HashTable<FlyString> seen_properties;
@ -498,11 +498,11 @@ void ConnectionFromClient::inspect_dom_node(u64 page_id, Web::UniqueNodeID const
MUST(serializer.finish());
return builder.to_byte_string();
return MUST(builder.to_string());
};
auto serialize_node_box_sizing_json = [](Web::Layout::Node const* layout_node) -> ByteString {
auto serialize_node_box_sizing_json = [](Web::Layout::Node const* layout_node) {
if (!layout_node || !layout_node->is_box() || !layout_node->first_paintable() || !layout_node->first_paintable()->is_paintable_box()) {
return "{}";
return "{}"_string;
}
auto const& paintable_box = as<Web::Painting::PaintableBox>(*layout_node->first_paintable());
auto const& box_model = paintable_box.box_model();
@ -524,13 +524,13 @@ void ConnectionFromClient::inspect_dom_node(u64 page_id, Web::UniqueNodeID const
MUST(serializer.add("content_height"sv, paintable_box.content_height().to_double()));
MUST(serializer.finish());
return builder.to_byte_string();
return MUST(builder.to_string());
};
auto serialize_aria_properties_state_json = [](Web::DOM::Element const& element) -> ByteString {
auto serialize_aria_properties_state_json = [](Web::DOM::Element const& element) {
auto role_name = element.role_or_default();
if (!role_name.has_value()) {
return "";
return "{}"_string;
}
auto aria_data = MUST(Web::ARIA::AriaData::build_data(element));
auto role = MUST(Web::ARIA::RoleType::build_role_object(role_name.value(), element.is_focusable(), *aria_data));
@ -539,10 +539,10 @@ void ConnectionFromClient::inspect_dom_node(u64 page_id, Web::UniqueNodeID const
auto serializer = MUST(JsonObjectSerializer<>::try_create(builder));
MUST(role->serialize_as_json(serializer));
MUST(serializer.finish());
return builder.to_byte_string();
return MUST(builder.to_string());
};
auto serialize_fonts_json = [](Web::CSS::ComputedProperties const& properties) -> ByteString {
auto serialize_fonts_json = [](Web::CSS::ComputedProperties const& properties) {
StringBuilder builder;
auto serializer = MUST(JsonArraySerializer<>::try_create(builder));
@ -556,7 +556,7 @@ void ConnectionFromClient::inspect_dom_node(u64 page_id, Web::UniqueNodeID const
MUST(font_json_object.finish());
});
MUST(serializer.finish());
return builder.to_byte_string();
return MUST(builder.to_string());
};
if (pseudo_element.has_value()) {
@ -568,9 +568,9 @@ void ConnectionFromClient::inspect_dom_node(u64 page_id, Web::UniqueNodeID const
auto pseudo_element_style = element.pseudo_element_computed_properties(pseudo_element.value());
ByteString computed_values;
ByteString fonts_json;
ByteString resolved_values;
String computed_values;
String fonts_json;
String resolved_values;
if (pseudo_element_style) {
computed_values = serialize_json(*pseudo_element_style);
fonts_json = serialize_fonts_json(*pseudo_element_style);
@ -579,18 +579,18 @@ void ConnectionFromClient::inspect_dom_node(u64 page_id, Web::UniqueNodeID const
dbgln("Inspected pseudo-element has no computed style.");
}
ByteString custom_properties_json = serialize_custom_properties_json(element, pseudo_element);
ByteString node_box_sizing_json = serialize_node_box_sizing_json(pseudo_element_node.ptr());
async_did_inspect_dom_node(page_id, true, move(computed_values), move(resolved_values), move(custom_properties_json), move(node_box_sizing_json), {}, move(fonts_json));
auto custom_properties_json = serialize_custom_properties_json(element, pseudo_element);
auto node_box_sizing_json = serialize_node_box_sizing_json(pseudo_element_node.ptr());
async_did_inspect_dom_node(page_id, true, move(computed_values), move(resolved_values), move(custom_properties_json), move(node_box_sizing_json), "{}"_string, move(fonts_json));
return;
}
ByteString computed_values = serialize_json(*element.computed_properties());
ByteString resolved_values = serialize_json(element.resolved_css_values());
ByteString custom_properties_json = serialize_custom_properties_json(element, {});
ByteString node_box_sizing_json = serialize_node_box_sizing_json(element.layout_node());
ByteString aria_properties_state_json = serialize_aria_properties_state_json(element);
ByteString fonts_json = serialize_fonts_json(*element.computed_properties());
auto computed_values = serialize_json(*element.computed_properties());
auto resolved_values = serialize_json(element.resolved_css_values());
auto custom_properties_json = serialize_custom_properties_json(element, {});
auto node_box_sizing_json = serialize_node_box_sizing_json(element.layout_node());
auto aria_properties_state_json = serialize_aria_properties_state_json(element);
auto fonts_json = serialize_fonts_json(*element.computed_properties());
async_did_inspect_dom_node(page_id, true, move(computed_values), move(resolved_values), move(custom_properties_json), move(node_box_sizing_json), move(aria_properties_state_json), move(fonts_json));
return;
@ -603,7 +603,7 @@ void ConnectionFromClient::inspect_accessibility_tree(u64 page_id)
{
if (auto page = this->page(page_id); page.has_value()) {
if (auto* doc = page->page().top_level_browsing_context().active_document())
async_did_inspect_accessibility_tree(page_id, doc->dump_accessibility_tree_as_json().to_byte_string());
async_did_inspect_accessibility_tree(page_id, doc->dump_accessibility_tree_as_json());
}
}

View file

@ -47,9 +47,9 @@ endpoint WebContentClient
did_request_dismiss_dialog(u64 page_id) =|
did_get_source(u64 page_id, URL::URL url, URL::URL base_url, String source) =|
did_inspect_dom_tree(u64 page_id, ByteString dom_tree) =|
did_inspect_dom_node(u64 page_id, bool has_style, ByteString computed_style, ByteString resolved_style, ByteString custom_properties, ByteString node_box_sizing, ByteString aria_properties_state, ByteString fonts) =|
did_inspect_accessibility_tree(u64 page_id, ByteString accessibility_tree) =|
did_inspect_dom_tree(u64 page_id, String dom_tree) =|
did_inspect_dom_node(u64 page_id, bool has_style, String computed_style, String resolved_style, String custom_properties, String node_box_sizing, String aria_properties_state, String fonts) =|
did_inspect_accessibility_tree(u64 page_id, String accessibility_tree) =|
did_get_hovered_node_id(u64 page_id, Web::UniqueNodeID node_id) =|
did_finish_editing_dom_node(u64 page_id, Optional<Web::UniqueNodeID> node_id) =|
did_get_dom_node_html(u64 page_id, String html) =|