mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-29 04:09:13 +00:00
LibDevTools: Send an unknown actor error for failed DOM node lookups
DevTools will ask us to find nodes by their actor names. If the actor is missing, we should inform DevTools of the error instead of just dropping the request. The diff here is a bit noisy, just due to a leftward shift of code that used to be in an if-statement.
This commit is contained in:
parent
49b964bf19
commit
a7b577126a
Notes:
github-actions[bot]
2025-03-12 16:49:17 +00:00
Author: https://github.com/trflynn89
Commit: a7b577126a
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3904
3 changed files with 270 additions and 209 deletions
|
@ -99,9 +99,13 @@ void NodeActor::handle_message(StringView type, JsonObject const& message)
|
|||
response.set("from"sv, name());
|
||||
|
||||
if (type == "getUniqueSelector"sv) {
|
||||
if (auto dom_node = WalkerActor::dom_node_for(m_walker, name()); dom_node.has_value())
|
||||
response.set("value"sv, dom_node->node.get_string("name"sv)->to_ascii_lowercase());
|
||||
auto dom_node = WalkerActor::dom_node_for(m_walker, name());
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(name());
|
||||
return;
|
||||
}
|
||||
|
||||
response.set("value"sv, dom_node->node.get_string("name"sv)->to_ascii_lowercase());
|
||||
send_message(move(response));
|
||||
return;
|
||||
}
|
||||
|
@ -117,7 +121,12 @@ void NodeActor::handle_message(StringView type, JsonObject const& message)
|
|||
if (!attribute_to_replace.has_value() && replacement_attributes.is_empty())
|
||||
return;
|
||||
|
||||
if (auto dom_node = WalkerActor::dom_node_for(m_walker, name()); dom_node.has_value()) {
|
||||
auto dom_node = WalkerActor::dom_node_for(m_walker, name());
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(name());
|
||||
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 {
|
||||
|
@ -135,7 +144,6 @@ void NodeActor::handle_message(StringView type, JsonObject const& message)
|
|||
} else {
|
||||
devtools().delegate().add_dom_node_attributes(dom_node->tab->description(), dom_node->identifier.id, move(replacement_attributes), move(on_complete));
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -147,7 +155,12 @@ void NodeActor::handle_message(StringView type, JsonObject const& message)
|
|||
return;
|
||||
}
|
||||
|
||||
if (auto dom_node = WalkerActor::dom_node_for(m_walker, name()); dom_node.has_value()) {
|
||||
auto dom_node = WalkerActor::dom_node_for(m_walker, name());
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(name());
|
||||
return;
|
||||
}
|
||||
|
||||
auto block_token = block_responses();
|
||||
|
||||
devtools().delegate().set_dom_node_text(
|
||||
|
@ -161,7 +174,6 @@ void NodeActor::handle_message(StringView type, JsonObject const& message)
|
|||
if (auto self = weak_self.strong_ref())
|
||||
self->finished_editing_dom_node(move(block_token));
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -96,8 +96,10 @@ template<typename Callback>
|
|||
void PageStyleActor::inspect_dom_node(StringView node_actor, Callback&& callback)
|
||||
{
|
||||
auto dom_node = WalkerActor::dom_node_for(InspectorActor::walker_for(m_inspector), node_actor);
|
||||
if (!dom_node.has_value())
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(node_actor);
|
||||
return;
|
||||
}
|
||||
|
||||
auto block_token = block_responses();
|
||||
|
||||
|
|
|
@ -55,16 +55,19 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
return;
|
||||
}
|
||||
|
||||
auto ancestor_node = WalkerActor::dom_node_for(*this, *node);
|
||||
if (!ancestor_node.has_value()) {
|
||||
send_unknown_actor_error(*node);
|
||||
return;
|
||||
}
|
||||
|
||||
JsonArray nodes;
|
||||
|
||||
if (auto ancestor_node = m_actor_to_dom_node_map.get(*node); ancestor_node.has_value()) {
|
||||
if (auto children = ancestor_node.value()->get_array("children"sv); children.has_value()) {
|
||||
|
||||
if (auto children = ancestor_node->node.get_array("children"sv); children.has_value()) {
|
||||
children->for_each([&](JsonValue const& child) {
|
||||
nodes.must_append(serialize_node(child.as_object()));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
response.set("hasFirst"sv, !nodes.is_empty());
|
||||
response.set("hasLast"sv, !nodes.is_empty());
|
||||
|
@ -80,7 +83,12 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
return;
|
||||
}
|
||||
|
||||
if (auto dom_node = WalkerActor::dom_node_for(*this, *node); dom_node.has_value()) {
|
||||
auto dom_node = WalkerActor::dom_node_for(*this, *node);
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(*node);
|
||||
return;
|
||||
}
|
||||
|
||||
auto block_token = block_responses();
|
||||
|
||||
devtools().delegate().clone_dom_node(
|
||||
|
@ -97,7 +105,6 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
self->send_message(move(message), move(block_token));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -115,7 +122,12 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
return;
|
||||
}
|
||||
|
||||
if (auto dom_node = WalkerActor::dom_node_for(*this, *node); dom_node.has_value()) {
|
||||
auto dom_node = WalkerActor::dom_node_for(*this, *node);
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(*node);
|
||||
return;
|
||||
}
|
||||
|
||||
auto block_token = block_responses();
|
||||
|
||||
devtools().delegate().set_dom_node_tag(
|
||||
|
@ -132,7 +144,6 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
self->send_message(move(message), move(block_token));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -170,7 +181,12 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
return;
|
||||
}
|
||||
|
||||
if (auto dom_node = WalkerActor::dom_node_for(*this, *node); dom_node.has_value()) {
|
||||
auto dom_node = WalkerActor::dom_node_for(*this, *node);
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(*node);
|
||||
return;
|
||||
}
|
||||
|
||||
auto block_token = block_responses();
|
||||
|
||||
devtools().delegate().get_dom_node_inner_html(
|
||||
|
@ -188,7 +204,6 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
self->send_message(move(message), move(block_token));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -203,7 +218,12 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
return;
|
||||
}
|
||||
|
||||
if (auto dom_node = WalkerActor::dom_node_for(*this, *node); dom_node.has_value()) {
|
||||
auto dom_node = WalkerActor::dom_node_for(*this, *node);
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(*node);
|
||||
return;
|
||||
}
|
||||
|
||||
auto block_token = block_responses();
|
||||
|
||||
devtools().delegate().create_child_element(
|
||||
|
@ -229,7 +249,6 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
self->send_message(move(message), move(block_token));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -248,18 +267,28 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
}
|
||||
|
||||
auto dom_node = WalkerActor::dom_node_for(*this, *node);
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(*node);
|
||||
return;
|
||||
}
|
||||
|
||||
auto parent_dom_node = WalkerActor::dom_node_for(*this, *parent);
|
||||
if (!parent_dom_node.has_value()) {
|
||||
send_unknown_actor_error(*parent);
|
||||
return;
|
||||
}
|
||||
|
||||
Optional<Web::UniqueNodeID> sibling_node_id;
|
||||
if (auto sibling = message.get_string("sibling"sv); sibling.has_value()) {
|
||||
auto sibling_dom_node = WalkerActor::dom_node_for(*this, *sibling);
|
||||
if (!sibling_dom_node.has_value())
|
||||
if (!sibling_dom_node.has_value()) {
|
||||
send_unknown_actor_error(*sibling);
|
||||
return;
|
||||
}
|
||||
|
||||
sibling_node_id = sibling_dom_node->identifier.id;
|
||||
}
|
||||
|
||||
if (dom_node.has_value() && parent_dom_node.has_value()) {
|
||||
auto block_token = block_responses();
|
||||
|
||||
devtools().delegate().insert_dom_node_before(
|
||||
|
@ -276,7 +305,6 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
self->send_message(move(message), move(block_token));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -300,7 +328,12 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
return;
|
||||
}
|
||||
|
||||
if (auto dom_node = WalkerActor::dom_node_for(*this, *node); dom_node.has_value()) {
|
||||
auto dom_node = WalkerActor::dom_node_for(*this, *node);
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(*node);
|
||||
return;
|
||||
}
|
||||
|
||||
auto block_token = block_responses();
|
||||
|
||||
devtools().delegate().get_dom_node_outer_html(
|
||||
|
@ -318,7 +351,6 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
self->send_message(move(message), move(block_token));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -330,12 +362,15 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
return;
|
||||
}
|
||||
|
||||
JsonValue previous_sibling;
|
||||
auto dom_node = WalkerActor::dom_node_for(*this, *node);
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(*node);
|
||||
return;
|
||||
}
|
||||
|
||||
if (auto dom_node = WalkerActor::dom_node_for(*this, *node); dom_node.has_value()) {
|
||||
JsonValue previous_sibling;
|
||||
if (auto previous_sibling_node = previous_sibling_for_node(dom_node->node); previous_sibling_node.has_value())
|
||||
previous_sibling = serialize_node(*previous_sibling_node);
|
||||
}
|
||||
|
||||
response.set("node"sv, move(previous_sibling));
|
||||
send_message(move(response));
|
||||
|
@ -355,11 +390,16 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
return;
|
||||
}
|
||||
|
||||
if (auto ancestor_node = m_actor_to_dom_node_map.get(*node); ancestor_node.has_value()) {
|
||||
if (auto selected_node = find_node_by_selector(*ancestor_node.value(), *selector); selected_node.has_value()) {
|
||||
auto ancestor_node = WalkerActor::dom_node_for(*this, *node);
|
||||
if (!ancestor_node.has_value()) {
|
||||
send_unknown_actor_error(*node);
|
||||
return;
|
||||
}
|
||||
|
||||
if (auto selected_node = find_node_by_selector(ancestor_node->node, *selector); selected_node.has_value()) {
|
||||
response.set("node"sv, serialize_node(*selected_node));
|
||||
|
||||
if (auto parent = m_dom_node_to_parent_map.get(&selected_node.value()); parent.value() && parent.value() != ancestor_node.value()) {
|
||||
if (auto parent = m_dom_node_to_parent_map.get(&selected_node.value()); parent.value() && parent.value() != &ancestor_node->node) {
|
||||
// FIXME: Should this be a stack of nodes leading to `ancestor_node`?
|
||||
JsonArray new_parents;
|
||||
new_parents.must_append(serialize_node(*parent.value()));
|
||||
|
@ -367,7 +407,6 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
response.set("newParents"sv, move(new_parents));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
send_message(move(response));
|
||||
return;
|
||||
|
@ -380,7 +419,12 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
return;
|
||||
}
|
||||
|
||||
if (auto dom_node = WalkerActor::dom_node_for(*this, *node); dom_node.has_value()) {
|
||||
auto dom_node = WalkerActor::dom_node_for(*this, *node);
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(*node);
|
||||
return;
|
||||
}
|
||||
|
||||
JsonValue next_sibling;
|
||||
if (auto next_sibling_node = next_sibling_for_node(dom_node->node); next_sibling_node.has_value())
|
||||
next_sibling = serialize_node(*next_sibling_node);
|
||||
|
@ -406,7 +450,6 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
self->send_message(move(message), move(block_token));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -429,7 +472,12 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
return;
|
||||
}
|
||||
|
||||
if (auto dom_node = WalkerActor::dom_node_for(*this, *node); dom_node.has_value()) {
|
||||
auto dom_node = WalkerActor::dom_node_for(*this, *node);
|
||||
if (!dom_node.has_value()) {
|
||||
send_unknown_actor_error(*node);
|
||||
return;
|
||||
}
|
||||
|
||||
auto block_token = block_responses();
|
||||
|
||||
devtools().delegate().set_dom_node_outer_html(
|
||||
|
@ -446,7 +494,6 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
|
|||
self->send_message(move(message), move(block_token));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue