LibWebView+WebContent: Add a WebContent IPC to add DOM attributes

This commit is contained in:
Timothy Flynn 2023-12-05 16:49:47 -05:00 committed by Andreas Kling
parent 2cdad0f068
commit 86d90f324d
Notes: sideshowbarker 2024-07-17 10:39:39 +09:00
5 changed files with 20 additions and 0 deletions

View File

@ -191,6 +191,11 @@ Optional<i32> ViewImplementation::set_dom_node_tag(i32 node_id, String name)
return client().set_dom_node_tag(node_id, move(name)); return client().set_dom_node_tag(node_id, move(name));
} }
void ViewImplementation::add_dom_node_attributes(i32 node_id, Vector<Attribute> attributes)
{
client().async_add_dom_node_attributes(node_id, move(attributes));
}
void ViewImplementation::replace_dom_node_attribute(i32 node_id, String name, Vector<Attribute> replacement_attributes) void ViewImplementation::replace_dom_node_attribute(i32 node_id, String name, Vector<Attribute> replacement_attributes)
{ {
client().async_replace_dom_node_attribute(node_id, move(name), move(replacement_attributes)); client().async_replace_dom_node_attribute(node_id, move(name), move(replacement_attributes));

View File

@ -65,6 +65,7 @@ public:
void set_dom_node_text(i32 node_id, String text); void set_dom_node_text(i32 node_id, String text);
Optional<i32> set_dom_node_tag(i32 node_id, String name); Optional<i32> set_dom_node_tag(i32 node_id, String name);
void add_dom_node_attributes(i32 node_id, Vector<Attribute> attributes);
void replace_dom_node_attribute(i32 node_id, String name, Vector<Attribute> replacement_attributes); void replace_dom_node_attribute(i32 node_id, String name, Vector<Attribute> replacement_attributes);
void debug_request(DeprecatedString const& request, DeprecatedString const& argument = {}); void debug_request(DeprecatedString const& request, DeprecatedString const& argument = {});

View File

@ -686,6 +686,18 @@ Messages::WebContentServer::SetDomNodeTagResponse ConnectionFromClient::set_dom_
return new_element->unique_id(); return new_element->unique_id();
} }
void ConnectionFromClient::add_dom_node_attributes(i32 node_id, Vector<WebView::Attribute> const& attributes)
{
auto* dom_node = Web::DOM::Node::from_unique_id(node_id);
if (!dom_node || !dom_node->is_element())
return;
auto& element = static_cast<Web::DOM::Element&>(*dom_node);
for (auto const& attribute : attributes)
element.set_attribute(attribute.name, attribute.value).release_value_but_fixme_should_propagate_errors();
}
void ConnectionFromClient::replace_dom_node_attribute(i32 node_id, String const& name, Vector<WebView::Attribute> const& replacement_attributes) void ConnectionFromClient::replace_dom_node_attribute(i32 node_id, String const& name, Vector<WebView::Attribute> const& replacement_attributes)
{ {
auto* dom_node = Web::DOM::Node::from_unique_id(node_id); auto* dom_node = Web::DOM::Node::from_unique_id(node_id);

View File

@ -78,6 +78,7 @@ private:
virtual void set_dom_node_text(i32 node_id, String const& text) override; virtual void set_dom_node_text(i32 node_id, String const& text) override;
virtual Messages::WebContentServer::SetDomNodeTagResponse set_dom_node_tag(i32 node_id, String const& name) override; virtual Messages::WebContentServer::SetDomNodeTagResponse set_dom_node_tag(i32 node_id, String const& name) override;
virtual void add_dom_node_attributes(i32 node_id, Vector<WebView::Attribute> const& attributes) override;
virtual void replace_dom_node_attribute(i32 node_id, String const& name, Vector<WebView::Attribute> const& replacement_attributes) override; virtual void replace_dom_node_attribute(i32 node_id, String const& name, Vector<WebView::Attribute> const& replacement_attributes) override;
virtual Messages::WebContentServer::DumpLayoutTreeResponse dump_layout_tree() override; virtual Messages::WebContentServer::DumpLayoutTreeResponse dump_layout_tree() override;

View File

@ -48,6 +48,7 @@ endpoint WebContentServer
set_dom_node_text(i32 node_id, String text) =| set_dom_node_text(i32 node_id, String text) =|
set_dom_node_tag(i32 node_id, String name) => (Optional<i32> node_id) set_dom_node_tag(i32 node_id, String name) => (Optional<i32> node_id)
add_dom_node_attributes(i32 node_id, Vector<WebView::Attribute> attributes) =|
replace_dom_node_attribute(i32 node_id, String name, Vector<WebView::Attribute> replacement_attributes) =| replace_dom_node_attribute(i32 node_id, String name, Vector<WebView::Attribute> replacement_attributes) =|
take_document_screenshot() => (Gfx::ShareableBitmap data) take_document_screenshot() => (Gfx::ShareableBitmap data)