LibWebView+WebContent: Expose the Accessibility Tree to Other Processes

This patch also stubs out notify_server_did_get_accessiblity_tree in
ladybird since ViewImplementation now has it. However, this feature
is still immature, so just stubbing out in ladybird for now. Once we
have more robust support in Serenity (namely ARIA properties/state
and accessible names and descriptions) we can port this
functionality over.
This commit is contained in:
Jonah 2022-12-07 19:30:37 -06:00 committed by Sam Atkins
parent a469bbd178
commit 367b1634fd
11 changed files with 37 additions and 0 deletions

View file

@ -1093,3 +1093,8 @@ void WebContentView::notify_server_did_finish_handling_input_event(bool event_wa
// we don't need to do anything here. But we'll need to once we start asking web content first.
(void)event_was_accepted;
}
void WebContentView::notify_server_did_get_accessibility_tree(DeprecatedString const&)
{
dbgln("TODO: support accessibility tree in Ladybird");
}

View file

@ -144,6 +144,7 @@ public:
virtual void notify_server_did_get_source(const AK::URL& url, DeprecatedString const& source) override;
virtual void notify_server_did_get_dom_tree(DeprecatedString const& dom_tree) override;
virtual void notify_server_did_get_dom_node_properties(i32 node_id, DeprecatedString const& specified_style, DeprecatedString const& computed_style, DeprecatedString const& custom_properties, DeprecatedString const& node_box_sizing) override;
virtual void notify_server_did_get_accessibility_tree(DeprecatedString const& accessibility_tree) override;
virtual void notify_server_did_output_js_console_message(i32 message_index) override;
virtual void notify_server_did_get_js_console_messages(i32 start_index, Vector<DeprecatedString> const& message_types, Vector<DeprecatedString> const& messages) override;
virtual void notify_server_did_change_favicon(Gfx::Bitmap const& favicon) override;

View file

@ -830,4 +830,15 @@ void OutOfProcessWebView::notify_server_did_finish_handling_input_event(bool eve
process_next_input_event();
}
void OutOfProcessWebView::inspect_accessibility_tree()
{
client().async_inspect_accessibility_tree();
}
void OutOfProcessWebView::notify_server_did_get_accessibility_tree(DeprecatedString const& accessibility_tree)
{
if (on_get_accessibility_tree)
on_get_accessibility_tree(accessibility_tree);
}
}

View file

@ -50,6 +50,7 @@ public:
DeprecatedString node_box_sizing_json;
};
Optional<DOMNodeProperties> inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement>);
void inspect_accessibility_tree();
void clear_inspected_dom_node();
i32 get_hovered_node_id();
@ -97,6 +98,7 @@ public:
Function<void(const AK::URL&, DeprecatedString const&)> on_get_source;
Function<void(DeprecatedString const&)> on_get_dom_tree;
Function<void(i32 node_id, DeprecatedString const& computed_style, DeprecatedString const& resolved_style, DeprecatedString const& custom_properties, DeprecatedString const& node_box_sizing)> on_get_dom_node_properties;
Function<void(DeprecatedString const&)> on_get_accessibility_tree;
Function<void(i32 message_id)> on_js_console_new_message;
Function<void(i32 start_index, Vector<DeprecatedString> const& message_types, Vector<DeprecatedString> const& messages)> on_get_js_console_messages;
Function<Vector<Web::Cookie::Cookie>(AK::URL const& url)> on_get_all_cookies;
@ -170,6 +172,7 @@ private:
virtual void notify_server_did_get_source(const AK::URL& url, DeprecatedString const& source) override;
virtual void notify_server_did_get_dom_tree(DeprecatedString const& dom_tree) override;
virtual void notify_server_did_get_dom_node_properties(i32 node_id, DeprecatedString const& computed_style, DeprecatedString const& resolved_style, DeprecatedString const& custom_properties, DeprecatedString const& node_box_sizing) override;
virtual void notify_server_did_get_accessibility_tree(DeprecatedString const& accessibility_tree) override;
virtual void notify_server_did_output_js_console_message(i32 message_index) override;
virtual void notify_server_did_get_js_console_messages(i32 start_index, Vector<DeprecatedString> const& message_types, Vector<DeprecatedString> const& messages) override;
virtual void notify_server_did_change_favicon(Gfx::Bitmap const& favicon) override;

View file

@ -50,6 +50,7 @@ public:
virtual void notify_server_did_get_source(const AK::URL& url, DeprecatedString const& source) = 0;
virtual void notify_server_did_get_dom_tree(DeprecatedString const& dom_tree) = 0;
virtual void notify_server_did_get_dom_node_properties(i32 node_id, DeprecatedString const& computed_style, DeprecatedString const& resolved_style, DeprecatedString const& custom_properties, DeprecatedString const& node_box_sizing) = 0;
virtual void notify_server_did_get_accessibility_tree(DeprecatedString const& accessibility_tree) = 0;
virtual void notify_server_did_output_js_console_message(i32 message_index) = 0;
virtual void notify_server_did_get_js_console_messages(i32 start_index, Vector<DeprecatedString> const& message_types, Vector<DeprecatedString> const& messages) = 0;
virtual void notify_server_did_change_favicon(Gfx::Bitmap const& favicon) = 0;

View file

@ -285,4 +285,9 @@ void WebContentClient::did_finish_handling_input_event(bool event_was_accepted)
m_view.notify_server_did_finish_handling_input_event(event_was_accepted);
}
void WebContentClient::did_get_accessibility_tree(DeprecatedString const& accessibility_tree)
{
m_view.notify_server_did_get_accessibility_tree(accessibility_tree);
}
}

View file

@ -54,6 +54,7 @@ private:
virtual void did_get_source(AK::URL const&, DeprecatedString const&) override;
virtual void did_get_dom_tree(DeprecatedString const&) override;
virtual void did_get_dom_node_properties(i32 node_id, DeprecatedString const& computed_style, DeprecatedString const& resolved_style, DeprecatedString const& custom_properties, DeprecatedString const& node_box_sizing) override;
virtual void did_get_accessibility_tree(DeprecatedString const&) override;
virtual void did_output_js_console_message(i32 message_index) override;
virtual void did_get_js_console_messages(i32 start_index, Vector<DeprecatedString> const& message_types, Vector<DeprecatedString> const& messages) override;
virtual void did_change_favicon(Gfx::ShareableBitmap const&) override;

View file

@ -595,4 +595,11 @@ void ConnectionFromClient::prompt_closed(DeprecatedString const& response)
m_page_host->prompt_closed(response);
}
void ConnectionFromClient::inspect_accessibility_tree()
{
if (auto* doc = page().top_level_browsing_context().active_document()) {
async_did_get_accessibility_tree(doc->dump_accessibility_tree_as_json());
}
}
}

View file

@ -68,6 +68,7 @@ private:
virtual void get_source() override;
virtual void inspect_dom_tree() override;
virtual Messages::WebContentServer::InspectDomNodeResponse inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> const& pseudo_element) override;
virtual void inspect_accessibility_tree() override;
virtual Messages::WebContentServer::GetHoveredNodeIdResponse get_hovered_node_id() override;
virtual Messages::WebContentServer::DumpLayoutTreeResponse dump_layout_tree() override;
virtual void set_content_filters(Vector<DeprecatedString> const&) override;

View file

@ -38,6 +38,7 @@ endpoint WebContentClient
did_get_source(URL url, DeprecatedString source) =|
did_get_dom_tree(DeprecatedString dom_tree) =|
did_get_dom_node_properties(i32 node_id, DeprecatedString computed_style, DeprecatedString resolved_style, DeprecatedString custom_properties, DeprecatedString node_box_sizing_json) =|
did_get_accessibility_tree(DeprecatedString accessibility_tree) =|
did_change_favicon(Gfx::ShareableBitmap favicon) =|
did_request_all_cookies(URL url) => (Vector<Web::Cookie::Cookie> cookies)
did_request_named_cookie(URL url, DeprecatedString name) => (Optional<Web::Cookie::Cookie> cookie)

View file

@ -37,6 +37,7 @@ endpoint WebContentServer
get_source() =|
inspect_dom_tree() =|
inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> pseudo_element) => (bool has_style, DeprecatedString computed_style, DeprecatedString resolved_style, DeprecatedString custom_properties, DeprecatedString node_box_sizing)
inspect_accessibility_tree() =|
get_hovered_node_id() => (i32 node_id)
js_console_input(DeprecatedString js_source) =|
js_console_request_messages(i32 start_index) =|