diff --git a/Libraries/LibDevTools/Actor.h b/Libraries/LibDevTools/Actor.h index 7c6a202d654..8b5460e6dfe 100644 --- a/Libraries/LibDevTools/Actor.h +++ b/Libraries/LibDevTools/Actor.h @@ -7,6 +7,7 @@ #pragma once #include +#include #include #include #include @@ -80,6 +81,28 @@ protected: return result; } + template + auto async_handler(Handler&& handler) + { + return [weak_self = make_weak_ptr(), handler = forward(handler), block_token = block_responses()](auto result) mutable { + if (result.is_error()) { + dbgln_if(DEVTOOLS_DEBUG, "Error performing async action: {}", result.error()); + return; + } + + if (auto self = weak_self.strong_ref()) { + JsonObject response; + handler(*self, result.release_value(), response); + self->send_message(move(response), move(block_token)); + } + }; + } + + auto default_async_handler() + { + return async_handler([](auto&, auto, auto) { }); + } + private: DevToolsServer& m_devtools; String m_name; diff --git a/Libraries/LibDevTools/Actors/ConsoleActor.cpp b/Libraries/LibDevTools/Actors/ConsoleActor.cpp index f2cc9e723a7..08f4371c6f7 100644 --- a/Libraries/LibDevTools/Actors/ConsoleActor.cpp +++ b/Libraries/LibDevTools/Actors/ConsoleActor.cpp @@ -4,7 +4,6 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include #include #include #include @@ -15,6 +14,18 @@ namespace DevTools { +static void received_console_result(JsonObject& response, String result_id, String input, JsonValue result) +{ + response.set("type"sv, "evaluationResult"_string); + response.set("timestamp"sv, AK::UnixDateTime::now().milliseconds_since_epoch()); + response.set("resultID"sv, move(result_id)); + response.set("input"sv, move(input)); + response.set("result"sv, move(result)); + response.set("exception"sv, JsonValue {}); + response.set("exceptionMessage"sv, JsonValue {}); + response.set("helperResult"sv, JsonValue {}); +} + NonnullRefPtr ConsoleActor::create(DevToolsServer& devtools, String name, WeakPtr tab) { return adopt_ref(*new ConsoleActor(devtools, move(name), move(tab))); @@ -55,18 +66,10 @@ void ConsoleActor::handle_message(StringView type, JsonObject const& message) } if (auto tab = m_tab.strong_ref()) { - auto block_token = block_responses(); - devtools().delegate().evaluate_javascript(tab->description(), *text, - [result_id, input = *text, weak_self = make_weak_ptr(), block_token = move(block_token)](ErrorOr result) mutable { - if (result.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to inspect DOM node: {}", result.error()); - return; - } - - if (auto self = weak_self.strong_ref()) - self->received_console_result(move(result_id), move(input), result.release_value(), move(block_token)); - }); + async_handler([result_id, input = *text](auto&, auto result, auto& response) { + received_console_result(response, move(result_id), move(input), move(result)); + })); } return; @@ -75,19 +78,4 @@ void ConsoleActor::handle_message(StringView type, JsonObject const& message) send_unrecognized_packet_type_error(type); } -void ConsoleActor::received_console_result(String result_id, String input, JsonValue result, BlockToken block_token) -{ - JsonObject message; - message.set("type"sv, "evaluationResult"_string); - message.set("timestamp"sv, AK::UnixDateTime::now().milliseconds_since_epoch()); - message.set("resultID"sv, move(result_id)); - message.set("input"sv, move(input)); - message.set("result"sv, move(result)); - message.set("exception"sv, JsonValue {}); - message.set("exceptionMessage"sv, JsonValue {}); - message.set("helperResult"sv, JsonValue {}); - - send_message(move(message), move(block_token)); -} - } diff --git a/Libraries/LibDevTools/Actors/ConsoleActor.h b/Libraries/LibDevTools/Actors/ConsoleActor.h index fd0b819ab66..6cbd0cf5e7f 100644 --- a/Libraries/LibDevTools/Actors/ConsoleActor.h +++ b/Libraries/LibDevTools/Actors/ConsoleActor.h @@ -23,8 +23,6 @@ public: private: ConsoleActor(DevToolsServer&, String name, WeakPtr); - void received_console_result(String result_id, String input, JsonValue result, BlockToken); - WeakPtr m_tab; u64 m_execution_id { 0 }; diff --git a/Libraries/LibDevTools/Actors/InspectorActor.cpp b/Libraries/LibDevTools/Actors/InspectorActor.cpp index f8732fea800..da86778141d 100644 --- a/Libraries/LibDevTools/Actors/InspectorActor.cpp +++ b/Libraries/LibDevTools/Actors/InspectorActor.cpp @@ -58,22 +58,15 @@ void InspectorActor::handle_message(StringView type, JsonObject const& message) if (type == "getWalker"sv) { if (auto tab = m_tab.strong_ref()) { - auto block_token = block_responses(); - devtools().delegate().inspect_tab(tab->description(), - [weak_self = make_weak_ptr(), block_token = move(block_token)](ErrorOr dom_tree) mutable { - if (dom_tree.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to retrieve DOM tree: {}", dom_tree.error()); - return; - } - if (!WalkerActor::is_suitable_for_dom_inspection(dom_tree.value())) { + async_handler([](auto& self, auto dom_tree, auto& response) { + if (!WalkerActor::is_suitable_for_dom_inspection(dom_tree)) { dbgln_if(DEVTOOLS_DEBUG, "Did not receive a suitable DOM tree: {}", dom_tree); return; } - if (auto self = weak_self.strong_ref()) - self->received_dom_tree(move(dom_tree.release_value().as_object()), move(block_token)); - }); + self.received_dom_tree(response, move(dom_tree.as_object())); + })); } return; @@ -88,7 +81,7 @@ void InspectorActor::handle_message(StringView type, JsonObject const& message) send_unrecognized_packet_type_error(type); } -void InspectorActor::received_dom_tree(JsonObject dom_tree, BlockToken block_token) +void InspectorActor::received_dom_tree(JsonObject& response, JsonObject dom_tree) { auto& walker_actor = devtools().register_actor(m_tab, move(dom_tree)); m_walker = walker_actor; @@ -97,9 +90,7 @@ void InspectorActor::received_dom_tree(JsonObject dom_tree, BlockToken block_tok walker.set("actor"sv, walker_actor.name()); walker.set("root"sv, walker_actor.serialize_root()); - JsonObject message; - message.set("walker"sv, move(walker)); - send_message(move(message), move(block_token)); + response.set("walker"sv, move(walker)); } RefPtr InspectorActor::tab_for(WeakPtr const& weak_inspector) diff --git a/Libraries/LibDevTools/Actors/InspectorActor.h b/Libraries/LibDevTools/Actors/InspectorActor.h index 8f76acc0a4a..a8a97015911 100644 --- a/Libraries/LibDevTools/Actors/InspectorActor.h +++ b/Libraries/LibDevTools/Actors/InspectorActor.h @@ -27,7 +27,7 @@ public: private: InspectorActor(DevToolsServer&, String name, WeakPtr); - void received_dom_tree(JsonObject, BlockToken); + void received_dom_tree(JsonObject& response, JsonObject dom_tree); WeakPtr m_tab; WeakPtr m_walker; diff --git a/Libraries/LibDevTools/Actors/NodeActor.cpp b/Libraries/LibDevTools/Actors/NodeActor.cpp index c092aa6abad..b972a856d19 100644 --- a/Libraries/LibDevTools/Actors/NodeActor.cpp +++ b/Libraries/LibDevTools/Actors/NodeActor.cpp @@ -124,23 +124,10 @@ void NodeActor::handle_message(StringView type, JsonObject const& message) return; } - auto block_token = block_responses(); - - auto on_complete = [weak_self = make_weak_ptr(), block_token = move(block_token)](ErrorOr node_id) mutable { - if (node_id.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to edit DOM node: {}", node_id.error()); - return; - } - - if (auto self = weak_self.strong_ref()) - self->send_message({}, move(block_token)); - }; - - if (attribute_to_replace.has_value()) { - devtools().delegate().replace_dom_node_attribute(dom_node->tab->description(), dom_node->identifier.id, *attribute_to_replace, move(replacement_attributes), move(on_complete)); - } else { - devtools().delegate().add_dom_node_attributes(dom_node->tab->description(), dom_node->identifier.id, move(replacement_attributes), move(on_complete)); - } + if (attribute_to_replace.has_value()) + devtools().delegate().replace_dom_node_attribute(dom_node->tab->description(), dom_node->identifier.id, *attribute_to_replace, move(replacement_attributes), default_async_handler()); + else + devtools().delegate().add_dom_node_attributes(dom_node->tab->description(), dom_node->identifier.id, move(replacement_attributes), default_async_handler()); return; } @@ -156,20 +143,7 @@ void NodeActor::handle_message(StringView type, JsonObject const& message) return; } - auto block_token = block_responses(); - - devtools().delegate().set_dom_node_text( - dom_node->tab->description(), dom_node->identifier.id, *value, - [weak_self = make_weak_ptr(), block_token = move(block_token)](ErrorOr node_id) mutable { - if (node_id.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to edit DOM node: {}", node_id.error()); - return; - } - - if (auto self = weak_self.strong_ref()) - self->send_message({}, move(block_token)); - }); - + devtools().delegate().set_dom_node_text(dom_node->tab->description(), dom_node->identifier.id, *value, default_async_handler()); return; } diff --git a/Libraries/LibDevTools/Actors/PageStyleActor.cpp b/Libraries/LibDevTools/Actors/PageStyleActor.cpp index c9fe821e79b..2bb74430c8b 100644 --- a/Libraries/LibDevTools/Actors/PageStyleActor.cpp +++ b/Libraries/LibDevTools/Actors/PageStyleActor.cpp @@ -15,6 +15,63 @@ namespace DevTools { +static void received_layout(JsonObject& response, JsonObject const& computed_style, JsonObject const& node_box_sizing) +{ + response.set("autoMargins"sv, JsonObject {}); + + auto pixel_value = [&](auto const& object, auto key) { + return object.get_double_with_precision_loss(key).value_or(0); + }; + auto set_pixel_value_from = [&](auto const& object, auto object_key, auto message_key) { + response.set(message_key, MUST(String::formatted("{}px", pixel_value(object, object_key)))); + }; + auto set_computed_value_from = [&](auto const& object, auto key) { + response.set(key, object.get_string(key).value_or(String {})); + }; + + response.set("width"sv, pixel_value(node_box_sizing, "content_width"sv)); + response.set("height"sv, pixel_value(node_box_sizing, "content_height"sv)); + + // FIXME: This response should also contain "top", "right", "bottom", and "left", but our box model metrics in + // WebContent do not provide this information. + + set_pixel_value_from(node_box_sizing, "border_top"sv, "border-top-width"sv); + set_pixel_value_from(node_box_sizing, "border_right"sv, "border-right-width"sv); + set_pixel_value_from(node_box_sizing, "border_bottom"sv, "border-bottom-width"sv); + set_pixel_value_from(node_box_sizing, "border_left"sv, "border-left-width"sv); + + set_pixel_value_from(node_box_sizing, "margin_top"sv, "margin-top"sv); + set_pixel_value_from(node_box_sizing, "margin_right"sv, "margin-right"sv); + set_pixel_value_from(node_box_sizing, "margin_bottom"sv, "margin-bottom"sv); + set_pixel_value_from(node_box_sizing, "margin_left"sv, "margin-left"sv); + + set_pixel_value_from(node_box_sizing, "padding_top"sv, "padding-top"sv); + set_pixel_value_from(node_box_sizing, "padding_right"sv, "padding-right"sv); + set_pixel_value_from(node_box_sizing, "padding_bottom"sv, "padding-bottom"sv); + set_pixel_value_from(node_box_sizing, "padding_left"sv, "padding-left"sv); + + set_computed_value_from(computed_style, "box-sizing"sv); + set_computed_value_from(computed_style, "display"sv); + set_computed_value_from(computed_style, "float"sv); + set_computed_value_from(computed_style, "line-height"sv); + set_computed_value_from(computed_style, "position"sv); + set_computed_value_from(computed_style, "z-index"sv); +} + +static void received_computed_style(JsonObject& response, JsonObject const& computed_style) +{ + JsonObject computed; + + computed_style.for_each_member([&](String const& name, JsonValue const& value) { + JsonObject property; + property.set("matched"sv, true); + property.set("value"sv, value); + computed.set(name, move(property)); + }); + + response.set("computed"sv, move(computed)); +} + NonnullRefPtr PageStyleActor::create(DevToolsServer& devtools, String name, WeakPtr inspector) { return adopt_ref(*new PageStyleActor(devtools, move(name), move(inspector))); @@ -45,8 +102,8 @@ void PageStyleActor::handle_message(StringView type, JsonObject const& message) if (!node.has_value()) return; - inspect_dom_node(*node, [](auto& self, auto const& properties, auto block_token) { - self.received_computed_style(properties.computed_style, move(block_token)); + inspect_dom_node(*node, [](auto& response, auto const& properties) { + received_computed_style(response, properties.computed_style); }); return; @@ -57,8 +114,8 @@ void PageStyleActor::handle_message(StringView type, JsonObject const& message) if (!node.has_value()) return; - inspect_dom_node(*node, [](auto& self, auto const& properties, auto block_token) { - self.received_layout(properties.computed_style, properties.node_box_sizing, move(block_token)); + inspect_dom_node(*node, [](auto& response, auto const& properties) { + received_layout(response, properties.computed_style, properties.node_box_sizing); }); return; @@ -96,81 +153,10 @@ void PageStyleActor::inspect_dom_node(StringView node_actor, Callback&& callback return; } - auto block_token = block_responses(); - - devtools().delegate().inspect_dom_node( - dom_node->tab->description(), dom_node->identifier.id, dom_node->identifier.pseudo_element, - [weak_self = make_weak_ptr(), block_token = move(block_token), callback = forward(callback)](ErrorOr properties) mutable { - if (properties.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to inspect DOM node: {}", properties.error()); - return; - } - - if (auto self = weak_self.strong_ref()) - callback(*self, properties.value(), move(block_token)); - }); -} - -void PageStyleActor::received_layout(JsonObject const& computed_style, JsonObject const& node_box_sizing, BlockToken block_token) -{ - JsonObject message; - message.set("autoMargins"sv, JsonObject {}); - - auto pixel_value = [&](auto const& object, auto key) { - return object.get_double_with_precision_loss(key).value_or(0); - }; - auto set_pixel_value_from = [&](auto const& object, auto object_key, auto message_key) { - message.set(message_key, MUST(String::formatted("{}px", pixel_value(object, object_key)))); - }; - auto set_computed_value_from = [&](auto const& object, auto key) { - message.set(key, object.get_string(key).value_or(String {})); - }; - - message.set("width"sv, pixel_value(node_box_sizing, "content_width"sv)); - message.set("height"sv, pixel_value(node_box_sizing, "content_height"sv)); - - // FIXME: This response should also contain "top", "right", "bottom", and "left", but our box model metrics in - // WebContent do not provide this information. - - set_pixel_value_from(node_box_sizing, "border_top"sv, "border-top-width"sv); - set_pixel_value_from(node_box_sizing, "border_right"sv, "border-right-width"sv); - set_pixel_value_from(node_box_sizing, "border_bottom"sv, "border-bottom-width"sv); - set_pixel_value_from(node_box_sizing, "border_left"sv, "border-left-width"sv); - - set_pixel_value_from(node_box_sizing, "margin_top"sv, "margin-top"sv); - set_pixel_value_from(node_box_sizing, "margin_right"sv, "margin-right"sv); - set_pixel_value_from(node_box_sizing, "margin_bottom"sv, "margin-bottom"sv); - set_pixel_value_from(node_box_sizing, "margin_left"sv, "margin-left"sv); - - set_pixel_value_from(node_box_sizing, "padding_top"sv, "padding-top"sv); - set_pixel_value_from(node_box_sizing, "padding_right"sv, "padding-right"sv); - set_pixel_value_from(node_box_sizing, "padding_bottom"sv, "padding-bottom"sv); - set_pixel_value_from(node_box_sizing, "padding_left"sv, "padding-left"sv); - - set_computed_value_from(computed_style, "box-sizing"sv); - set_computed_value_from(computed_style, "display"sv); - set_computed_value_from(computed_style, "float"sv); - set_computed_value_from(computed_style, "line-height"sv); - set_computed_value_from(computed_style, "position"sv); - set_computed_value_from(computed_style, "z-index"sv); - - send_message(move(message), move(block_token)); -} - -void PageStyleActor::received_computed_style(JsonObject const& computed_style, BlockToken block_token) -{ - JsonObject computed; - - computed_style.for_each_member([&](String const& name, JsonValue const& value) { - JsonObject property; - property.set("matched"sv, true); - property.set("value"sv, value); - computed.set(name, move(property)); - }); - - JsonObject message; - message.set("computed"sv, move(computed)); - send_message(move(message), move(block_token)); + devtools().delegate().inspect_dom_node(dom_node->tab->description(), dom_node->identifier.id, dom_node->identifier.pseudo_element, + async_handler([callback = forward(callback)](auto&, auto properties, auto& response) { + callback(response, properties); + })); } } diff --git a/Libraries/LibDevTools/Actors/PageStyleActor.h b/Libraries/LibDevTools/Actors/PageStyleActor.h index f642c959d43..855fabd547a 100644 --- a/Libraries/LibDevTools/Actors/PageStyleActor.h +++ b/Libraries/LibDevTools/Actors/PageStyleActor.h @@ -33,9 +33,6 @@ private: template void inspect_dom_node(StringView node_actor, Callback&&); - void received_layout(JsonObject const& computed_style, JsonObject const& node_box_sizing, BlockToken); - void received_computed_style(JsonObject const& computed_style, BlockToken); - WeakPtr m_inspector; }; diff --git a/Libraries/LibDevTools/Actors/WalkerActor.cpp b/Libraries/LibDevTools/Actors/WalkerActor.cpp index 5aed15304e3..58d95ae499d 100644 --- a/Libraries/LibDevTools/Actors/WalkerActor.cpp +++ b/Libraries/LibDevTools/Actors/WalkerActor.cpp @@ -84,20 +84,7 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message) return; } - auto block_token = block_responses(); - - devtools().delegate().clone_dom_node( - dom_node->tab->description(), dom_node->identifier.id, - [weak_self = make_weak_ptr(), block_token = move(block_token)](ErrorOr node_id) mutable { - if (node_id.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to edit DOM node: {}", node_id.error()); - return; - } - - if (auto self = weak_self.strong_ref()) - self->send_message({}, move(block_token)); - }); - + devtools().delegate().clone_dom_node(dom_node->tab->description(), dom_node->identifier.id, default_async_handler()); return; } @@ -116,20 +103,7 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message) return; } - auto block_token = block_responses(); - - devtools().delegate().set_dom_node_tag( - dom_node->tab->description(), dom_node->identifier.id, *tag_name, - [weak_self = make_weak_ptr(), block_token = move(block_token)](ErrorOr node_id) mutable { - if (node_id.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to edit DOM node: {}", node_id.error()); - return; - } - - if (auto self = weak_self.strong_ref()) - self->send_message({}, move(block_token)); - }); - + devtools().delegate().set_dom_node_tag(dom_node->tab->description(), dom_node->identifier.id, *tag_name, default_async_handler()); return; } @@ -170,22 +144,10 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message) return; } - auto block_token = block_responses(); - - devtools().delegate().get_dom_node_inner_html( - dom_node->tab->description(), dom_node->identifier.id, - [weak_self = make_weak_ptr(), block_token = move(block_token)](ErrorOr html) mutable { - if (html.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to edit DOM node: {}", html.error()); - return; - } - - if (auto self = weak_self.strong_ref()) { - JsonObject message; - message.set("value"sv, html.release_value()); - self->send_message(move(message), move(block_token)); - } - }); + devtools().delegate().get_dom_node_inner_html(dom_node->tab->description(), dom_node->identifier.id, + async_handler([](auto&, auto html, auto& response) { + response.set("value"sv, move(html)); + })); return; } @@ -204,30 +166,18 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message) return; } - auto block_token = block_responses(); + devtools().delegate().create_child_element(dom_node->tab->description(), dom_node->identifier.id, + async_handler([](auto& self, auto node_id, auto& response) { + JsonArray nodes; - devtools().delegate().create_child_element( - dom_node->tab->description(), dom_node->identifier.id, - [weak_self = make_weak_ptr(), block_token = move(block_token)](ErrorOr node_id) mutable { - if (node_id.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to edit DOM node: {}", node_id.error()); - return; + if (auto actor = self.m_dom_node_id_to_actor_map.get(node_id); actor.has_value()) { + if (auto dom_node = WalkerActor::dom_node_for(self, *actor); dom_node.has_value()) + nodes.must_append(self.serialize_node(dom_node->node)); } - if (auto self = weak_self.strong_ref()) { - JsonArray nodes; - - if (auto actor = self->m_dom_node_id_to_actor_map.get(node_id.value()); actor.has_value()) { - if (auto dom_node = WalkerActor::dom_node_for(self, *actor); dom_node.has_value()) - nodes.must_append(self->serialize_node(dom_node->node)); - } - - JsonObject message; - message.set("newParents"sv, JsonArray {}); - message.set("nodes"sv, move(nodes)); - self->send_message(move(message), move(block_token)); - } - }); + response.set("newParents"sv, JsonArray {}); + response.set("nodes"sv, move(nodes)); + })); return; } @@ -264,20 +214,7 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message) sibling_node_id = sibling_dom_node->identifier.id; } - auto block_token = block_responses(); - - devtools().delegate().insert_dom_node_before( - dom_node->tab->description(), dom_node->identifier.id, parent_dom_node->identifier.id, sibling_node_id, - [weak_self = make_weak_ptr(), block_token = move(block_token)](ErrorOr node_id) mutable { - if (node_id.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to edit DOM node: {}", node_id.error()); - return; - } - - if (auto self = weak_self.strong_ref()) - self->send_message({}, move(block_token)); - }); - + devtools().delegate().insert_dom_node_before(dom_node->tab->description(), dom_node->identifier.id, parent_dom_node->identifier.id, sibling_node_id, default_async_handler()); return; } @@ -302,22 +239,10 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message) return; } - auto block_token = block_responses(); - - devtools().delegate().get_dom_node_outer_html( - dom_node->tab->description(), dom_node->identifier.id, - [weak_self = make_weak_ptr(), block_token = move(block_token)](ErrorOr html) mutable { - if (html.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to edit DOM node: {}", html.error()); - return; - } - - if (auto self = weak_self.strong_ref()) { - JsonObject message; - message.set("value"sv, html.release_value()); - self->send_message(move(message), move(block_token)); - } - }); + devtools().delegate().get_dom_node_outer_html(dom_node->tab->description(), dom_node->identifier.id, + async_handler([](auto&, auto html, auto& response) { + response.set("value"sv, move(html)); + })); return; } @@ -392,22 +317,10 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message) if (!parent_node.has_value()) return; - auto block_token = block_responses(); - - devtools().delegate().remove_dom_node( - dom_node->tab->description(), dom_node->identifier.id, - [weak_self = make_weak_ptr(), next_sibling = move(next_sibling), block_token = move(block_token)](ErrorOr node_id) mutable { - if (node_id.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to edit DOM node: {}", node_id.error()); - return; - } - - if (auto self = weak_self.strong_ref()) { - JsonObject message; - message.set("nextSibling"sv, move(next_sibling)); - self->send_message(move(message), move(block_token)); - } - }); + devtools().delegate().remove_dom_node(dom_node->tab->description(), dom_node->identifier.id, + async_handler([next_sibling = move(next_sibling)](auto&, auto, auto& response) mutable { + response.set("nextSibling"sv, move(next_sibling)); + })); return; } @@ -432,20 +345,7 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message) return; } - auto block_token = block_responses(); - - devtools().delegate().set_dom_node_outer_html( - dom_node->tab->description(), dom_node->identifier.id, value.release_value(), - [weak_self = make_weak_ptr(), block_token = move(block_token)](ErrorOr node_id) mutable { - if (node_id.is_error()) { - dbgln_if(DEVTOOLS_DEBUG, "Unable to edit DOM node: {}", node_id.error()); - return; - } - - if (auto self = weak_self.strong_ref()) - self->send_message({}, move(block_token)); - }); - + devtools().delegate().set_dom_node_outer_html(dom_node->tab->description(), dom_node->identifier.id, value.release_value(), default_async_handler()); return; }