mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 03:55:24 +00:00
LibDevTools: Add a helper to handle asynchronous request replies
This removes some boilerplate around executing async requests, such as calling dbgln_if on any errors, handling weak pointers to `this`, and dealing with block tokens.
This commit is contained in:
parent
e1ed8722e0
commit
49adec1396
Notes:
github-actions[bot]
2025-03-12 16:48:58 +00:00
Author: https://github.com/trflynn89 Commit: https://github.com/LadybirdBrowser/ladybird/commit/49adec13969 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3904
9 changed files with 140 additions and 283 deletions
|
@ -7,6 +7,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/Badge.h>
|
||||
#include <AK/Debug.h>
|
||||
#include <AK/JsonObject.h>
|
||||
#include <AK/Optional.h>
|
||||
#include <AK/RefCounted.h>
|
||||
|
@ -80,6 +81,28 @@ protected:
|
|||
return result;
|
||||
}
|
||||
|
||||
template<typename ActorType = Actor, typename Handler>
|
||||
auto async_handler(Handler&& handler)
|
||||
{
|
||||
return [weak_self = make_weak_ptr<ActorType>(), handler = forward<Handler>(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;
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <AK/Debug.h>
|
||||
#include <AK/JsonArray.h>
|
||||
#include <AK/JsonObject.h>
|
||||
#include <AK/Time.h>
|
||||
|
@ -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> ConsoleActor::create(DevToolsServer& devtools, String name, WeakPtr<TabActor> 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<ConsoleActor>(), block_token = move(block_token)](ErrorOr<JsonValue> 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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -23,8 +23,6 @@ public:
|
|||
private:
|
||||
ConsoleActor(DevToolsServer&, String name, WeakPtr<TabActor>);
|
||||
|
||||
void received_console_result(String result_id, String input, JsonValue result, BlockToken);
|
||||
|
||||
WeakPtr<TabActor> m_tab;
|
||||
|
||||
u64 m_execution_id { 0 };
|
||||
|
|
|
@ -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<InspectorActor>(), block_token = move(block_token)](ErrorOr<JsonValue> 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<InspectorActor>([](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<WalkerActor>(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<TabActor> InspectorActor::tab_for(WeakPtr<InspectorActor> const& weak_inspector)
|
||||
|
|
|
@ -27,7 +27,7 @@ public:
|
|||
private:
|
||||
InspectorActor(DevToolsServer&, String name, WeakPtr<TabActor>);
|
||||
|
||||
void received_dom_tree(JsonObject, BlockToken);
|
||||
void received_dom_tree(JsonObject& response, JsonObject dom_tree);
|
||||
|
||||
WeakPtr<TabActor> m_tab;
|
||||
WeakPtr<WalkerActor> m_walker;
|
||||
|
|
|
@ -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<NodeActor>(), block_token = move(block_token)](ErrorOr<Web::UniqueNodeID> 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<NodeActor>(), block_token = move(block_token)](ErrorOr<Web::UniqueNodeID> 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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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> PageStyleActor::create(DevToolsServer& devtools, String name, WeakPtr<InspectorActor> 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<PageStyleActor>(), block_token = move(block_token), callback = forward<Callback>(callback)](ErrorOr<DOMNodeProperties> 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>(callback)](auto&, auto properties, auto& response) {
|
||||
callback(response, properties);
|
||||
}));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,9 +33,6 @@ private:
|
|||
template<typename Callback>
|
||||
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<InspectorActor> m_inspector;
|
||||
};
|
||||
|
||||
|
|
|
@ -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<WalkerActor>(), block_token = move(block_token)](ErrorOr<Web::UniqueNodeID> 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<WalkerActor>(), block_token = move(block_token)](ErrorOr<Web::UniqueNodeID> 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<WalkerActor>(), block_token = move(block_token)](ErrorOr<String> 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<WalkerActor>([](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<WalkerActor>(), block_token = move(block_token)](ErrorOr<Web::UniqueNodeID> 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<WalkerActor>(), block_token = move(block_token)](ErrorOr<Web::UniqueNodeID> 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<WalkerActor>(), block_token = move(block_token)](ErrorOr<String> 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<WalkerActor>(), next_sibling = move(next_sibling), block_token = move(block_token)](ErrorOr<Web::UniqueNodeID> 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<WalkerActor>(), block_token = move(block_token)](ErrorOr<Web::UniqueNodeID> 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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue