diff --git a/Userland/Libraries/LibWebView/ViewImplementation.cpp b/Userland/Libraries/LibWebView/ViewImplementation.cpp index ba78fc8401..8beef56bbe 100644 --- a/Userland/Libraries/LibWebView/ViewImplementation.cpp +++ b/Userland/Libraries/LibWebView/ViewImplementation.cpp @@ -191,6 +191,11 @@ Optional ViewImplementation::set_dom_node_tag(i32 node_id, String name) return client().set_dom_node_tag(node_id, move(name)); } +void ViewImplementation::add_dom_node_attributes(i32 node_id, Vector attributes) +{ + client().async_add_dom_node_attributes(node_id, move(attributes)); +} + void ViewImplementation::replace_dom_node_attribute(i32 node_id, String name, Vector replacement_attributes) { client().async_replace_dom_node_attribute(node_id, move(name), move(replacement_attributes)); diff --git a/Userland/Libraries/LibWebView/ViewImplementation.h b/Userland/Libraries/LibWebView/ViewImplementation.h index e8677e0f78..90ddfbb09c 100644 --- a/Userland/Libraries/LibWebView/ViewImplementation.h +++ b/Userland/Libraries/LibWebView/ViewImplementation.h @@ -65,6 +65,7 @@ public: void set_dom_node_text(i32 node_id, String text); Optional set_dom_node_tag(i32 node_id, String name); + void add_dom_node_attributes(i32 node_id, Vector attributes); void replace_dom_node_attribute(i32 node_id, String name, Vector replacement_attributes); void debug_request(DeprecatedString const& request, DeprecatedString const& argument = {}); diff --git a/Userland/Services/WebContent/ConnectionFromClient.cpp b/Userland/Services/WebContent/ConnectionFromClient.cpp index 81ba66bdfb..d0f205c7f5 100644 --- a/Userland/Services/WebContent/ConnectionFromClient.cpp +++ b/Userland/Services/WebContent/ConnectionFromClient.cpp @@ -686,6 +686,18 @@ Messages::WebContentServer::SetDomNodeTagResponse ConnectionFromClient::set_dom_ return new_element->unique_id(); } +void ConnectionFromClient::add_dom_node_attributes(i32 node_id, Vector 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(*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 const& replacement_attributes) { auto* dom_node = Web::DOM::Node::from_unique_id(node_id); diff --git a/Userland/Services/WebContent/ConnectionFromClient.h b/Userland/Services/WebContent/ConnectionFromClient.h index af8857ed9f..906bb9c89c 100644 --- a/Userland/Services/WebContent/ConnectionFromClient.h +++ b/Userland/Services/WebContent/ConnectionFromClient.h @@ -78,6 +78,7 @@ private: 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 void add_dom_node_attributes(i32 node_id, Vector const& attributes) override; virtual void replace_dom_node_attribute(i32 node_id, String const& name, Vector const& replacement_attributes) override; virtual Messages::WebContentServer::DumpLayoutTreeResponse dump_layout_tree() override; diff --git a/Userland/Services/WebContent/WebContentServer.ipc b/Userland/Services/WebContent/WebContentServer.ipc index a2adb80391..28faeae0b0 100644 --- a/Userland/Services/WebContent/WebContentServer.ipc +++ b/Userland/Services/WebContent/WebContentServer.ipc @@ -48,6 +48,7 @@ endpoint WebContentServer set_dom_node_text(i32 node_id, String text) =| set_dom_node_tag(i32 node_id, String name) => (Optional node_id) + add_dom_node_attributes(i32 node_id, Vector attributes) =| replace_dom_node_attribute(i32 node_id, String name, Vector replacement_attributes) =| take_document_screenshot() => (Gfx::ShareableBitmap data)