Commit 7fdc16fb authored by Martin Robinson's avatar Martin Robinson Committed by Commit Bot

Use ATK_ROLE_APPLICATION for toplevel applications

The accessibility code for Aura on Linux was using the ATK_ROLE_EMBEDDED
role for elements with the role ax::mojom::Role::kApplication so that
it would not apply to ARIA applications. To be consistent with other
applications, ATK_ROLE_APPLICATION is more appropriate. We only use this
when the element is the root of the accessibility tree.

TEST=accessibility_unittests --gtest_filter=AXPlatformNodeAuraLinuxTest.*

Bug: 867006
Change-Id: I6c64b142cf3307c906f73235ed8247e828cd2394
Reviewed-on: https://chromium-review.googlesource.com/1148397Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Commit-Queue: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#577920}
parent fbc6125c
......@@ -980,9 +980,13 @@ AtkRole AXPlatformNodeAuraLinux::GetAtkRole() {
case ax::mojom::Role::kAnnotation:
return ATK_ROLE_PANEL;
case ax::mojom::Role::kApplication:
// Don't use ATK_ROLE_APPLICATION, which is for top level app windows,
// not ARIA applications.
return ATK_ROLE_EMBEDDED;
// Only use ATK_ROLE_APPLICATION for elements with no parent, since it
// is only for top level app windows and not ARIA applications.
if (!GetParent()) {
return ATK_ROLE_APPLICATION;
} else {
return ATK_ROLE_EMBEDDED;
}
case ax::mojom::Role::kArticle:
return ATK_ROLE_ARTICLE;
case ax::mojom::Role::kAudio:
......
......@@ -143,6 +143,7 @@ TEST_F(AXPlatformNodeAuraLinuxTest, TestAtkObjectRole) {
AXNodeData root;
root.id = 1;
root.child_ids.push_back(2);
root.role = ax::mojom::Role::kApplication;
AXNodeData child;
child.id = 2;
......@@ -150,6 +151,12 @@ TEST_F(AXPlatformNodeAuraLinuxTest, TestAtkObjectRole) {
Init(root, child);
AXNode* child_node = GetRootNode()->children()[0];
AtkObject* root_obj(AtkObjectFromNode(GetRootNode()));
ASSERT_TRUE(ATK_IS_OBJECT(root_obj));
g_object_ref(root_obj);
EXPECT_EQ(ATK_ROLE_APPLICATION, atk_object_get_role(root_obj));
g_object_unref(root_obj);
child.role = ax::mojom::Role::kAlert;
child_node->SetData(child);
AtkObject* child_obj(AtkObjectFromNode(child_node));
......@@ -173,6 +180,14 @@ TEST_F(AXPlatformNodeAuraLinuxTest, TestAtkObjectRole) {
g_object_ref(child_obj);
EXPECT_EQ(ATK_ROLE_CANVAS, atk_object_get_role(child_obj));
g_object_unref(child_obj);
child.role = ax::mojom::Role::kApplication;
child_node->SetData(child);
child_obj = AtkObjectFromNode(child_node);
ASSERT_TRUE(ATK_IS_OBJECT(child_obj));
g_object_ref(child_obj);
EXPECT_EQ(ATK_ROLE_EMBEDDED, atk_object_get_role(child_obj));
g_object_unref(child_obj);
}
TEST_F(AXPlatformNodeAuraLinuxTest, TestAtkObjectState) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment