Title: [284676] trunk
Revision
284676
Author
[email protected]
Date
2021-10-22 03:05:08 -0700 (Fri, 22 Oct 2021)

Log Message

[GTK][a11y] Localized role name doesn't work with ATSPI enabled
https://bugs.webkit.org/show_bug.cgi?id=232136

Reviewed by Adrian Perez de Castro.

Source/WebCore:

I switched to use SortedArrayMap in AccessibilityAtspi::localizedRoleName() but I didn't realize the array was
not actually sorted. We just need to sort it for SortedArrayMap to work as expected.

* accessibility/atspi/AccessibilityAtspi.cpp:

Tools:

Add a few tests for localized role name.

* TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
(testAccessibleBasicHierarchy):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (284675 => 284676)


--- trunk/Source/WebCore/ChangeLog	2021-10-22 08:51:03 UTC (rev 284675)
+++ trunk/Source/WebCore/ChangeLog	2021-10-22 10:05:08 UTC (rev 284676)
@@ -1,5 +1,17 @@
 2021-10-22  Carlos Garcia Campos  <[email protected]>
 
+        [GTK][a11y] Localized role name doesn't work with ATSPI enabled
+        https://bugs.webkit.org/show_bug.cgi?id=232136
+
+        Reviewed by Adrian Perez de Castro.
+
+        I switched to use SortedArrayMap in AccessibilityAtspi::localizedRoleName() but I didn't realize the array was
+        not actually sorted. We just need to sort it for SortedArrayMap to work as expected.
+
+        * accessibility/atspi/AccessibilityAtspi.cpp:
+
+2021-10-22  Carlos Garcia Campos  <[email protected]>
+
         [GTK][a11y] Add implementation of text interface when building with ATSPI
         https://bugs.webkit.org/show_bug.cgi?id=230258
 

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp (284675 => 284676)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp	2021-10-22 08:51:03 UTC (rev 284675)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp	2021-10-22 10:05:08 UTC (rev 284676)
@@ -221,126 +221,126 @@
 };
 
 static constexpr std::pair<AccessibilityRole, RoleNameEntry> roleNames[] = {
-    { AccessibilityRole::Unknown, { "unknown", N_("unknown") } },
-    { AccessibilityRole::Button, { "push button", N_("push button") } },
-    { AccessibilityRole::RadioButton, { "radio button", N_("radio button") } },
-    { AccessibilityRole::CheckBox, { "check box", N_("check box") } },
-    { AccessibilityRole::Slider, { "slider", N_("slider") } },
-    { AccessibilityRole::TabGroup, { "page tab list", N_("page tab list") } },
-    { AccessibilityRole::TextField, { "entry", N_("entry") } },
-    { AccessibilityRole::StaticText, { "text", N_("text") } },
-    { AccessibilityRole::TextArea, { "entry", N_("entry") } },
-    { AccessibilityRole::ScrollArea, { "scroll pane", N_("scroll pane") } },
-    { AccessibilityRole::PopUpButton, { "combo box", N_("combo box") } },
-    { AccessibilityRole::MenuButton, { "menu item", N_("menu item") } },
-    { AccessibilityRole::Table, { "table", N_("table") } },
     { AccessibilityRole::Application, { "application", N_("application") } },
-    { AccessibilityRole::Group, { "panel", N_("panel") } },
-    { AccessibilityRole::TextGroup, { "section", N_("section") } },
-    { AccessibilityRole::RadioGroup, { "panel", N_("panel") } },
-    { AccessibilityRole::List, { "list", N_("list") } },
-    { AccessibilityRole::Directory, { "directory pane", N_("directory pane") } },
-    { AccessibilityRole::ScrollBar, { "scroll bar", N_("scroll bar") } },
-    { AccessibilityRole::Image, { "image", N_("image") } },
-    { AccessibilityRole::MenuBar, { "menu bar", N_("menu bar") } },
-    { AccessibilityRole::Menu, { "menu", N_("menu") } },
-    { AccessibilityRole::MenuItem, { "menu item", N_("menu item") } },
-    { AccessibilityRole::MenuItemCheckbox, { "check menu item", N_("check menu item") } },
-    { AccessibilityRole::MenuItemRadio, { "radio menu item", N_("radio menu item") } },
-    { AccessibilityRole::Row, { "table row", N_("table row") } },
-    { AccessibilityRole::Toolbar, { "tool bar", N_("tool bar") } },
-    { AccessibilityRole::BusyIndicator, { "progress bar", N_("progress bar") } },
-    { AccessibilityRole::ProgressIndicator, { "progress bar", N_("progress bar") } },
-    { AccessibilityRole::Meter, { "level bar", N_("level bar") } },
-    { AccessibilityRole::Window, { "window", N_("window") } },
-    { AccessibilityRole::Outline, { "tree", N_("tree") } },
-    { AccessibilityRole::ComboBox, { "combo box", N_("combo box") } },
-    { AccessibilityRole::SplitGroup, { "split pane", N_("split pane") } },
-    { AccessibilityRole::Splitter, { "separator", N_("separator") } },
-    { AccessibilityRole::ColorWell, { "push button", N_("push button") } },
-    { AccessibilityRole::Link, { "link", N_("link") } },
-    { AccessibilityRole::Grid, { "table", N_("table") } },
-    { AccessibilityRole::TreeGrid, { "tree table", N_("tree table") } },
-    { AccessibilityRole::WebCoreLink, { "link", N_("link") } },
-    { AccessibilityRole::ImageMapLink, { "link", N_("link") } },
-    { AccessibilityRole::ImageMap, { "image map", N_("image map") } },
-    { AccessibilityRole::ListMarker, { "text", N_("text") } },
-    { AccessibilityRole::WebArea, { "document web", N_("document web") } },
-    { AccessibilityRole::Heading, { "heading", N_("heading") } },
-    { AccessibilityRole::ListBox, { "heading", N_("list box") } },
-    { AccessibilityRole::ListBoxOption, { "list item", N_("list item") } },
-    { AccessibilityRole::Cell, { "table cell", N_("table cell") } },
-    { AccessibilityRole::GridCell, { "table cell", N_("table cell") } },
-    { AccessibilityRole::ColumnHeader, { "column header", N_("column header") } },
-    { AccessibilityRole::RowHeader, { "row header", N_("row header") } },
-    { AccessibilityRole::Definition, { "definition", N_("definition") } },
-    { AccessibilityRole::DescriptionListDetail, { "description value", N_("description value") } },
-    { AccessibilityRole::DescriptionListTerm, { "description term", N_("description term") } },
-    { AccessibilityRole::Term, { "description term", N_("description term") } },
-    { AccessibilityRole::DescriptionList, { "description list", N_("description list") } },
-    { AccessibilityRole::LandmarkBanner, { "landmark", N_("landmark") } },
-    { AccessibilityRole::LandmarkComplementary, { "landmark", N_("landmark") } },
-    { AccessibilityRole::LandmarkDocRegion, { "landmark", N_("landmark") } },
-    { AccessibilityRole::LandmarkContentInfo, { "landmark", N_("landmark") } },
-    { AccessibilityRole::LandmarkMain, { "landmark", N_("landmark") } },
-    { AccessibilityRole::LandmarkNavigation, { "landmark", N_("landmark") } },
-    { AccessibilityRole::LandmarkRegion, { "landmark", N_("landmark") } },
-    { AccessibilityRole::LandmarkSearch, { "landmark", N_("landmark") } },
     { AccessibilityRole::ApplicationAlert, { "notification", N_("notification") } },
     { AccessibilityRole::ApplicationAlertDialog, { "alert", N_("alert") } },
     { AccessibilityRole::ApplicationDialog, { "dialog", N_("dialog") } },
     { AccessibilityRole::ApplicationGroup, { "grouping", N_("grouping") } },
-    { AccessibilityRole::ApplicationTextGroup, { "section", N_("section") } },
     { AccessibilityRole::ApplicationLog, { "log", N_("log") } },
     { AccessibilityRole::ApplicationMarquee, { "marquee", N_("marquee") } },
     { AccessibilityRole::ApplicationStatus, { "statusbar", N_("statusbar") } },
+    { AccessibilityRole::ApplicationTextGroup, { "section", N_("section") } },
     { AccessibilityRole::ApplicationTimer, { "timer", N_("timer") } },
+    { AccessibilityRole::Audio, { "audio", N_("audio") } },
+    { AccessibilityRole::Blockquote, { "block quote", N_("block quote") } },
+    { AccessibilityRole::BusyIndicator, { "progress bar", N_("progress bar") } },
+    { AccessibilityRole::Button, { "push button", N_("push button") } },
+    { AccessibilityRole::Canvas, { "canvas", N_("canvas") } },
+    { AccessibilityRole::Caption, { "caption", N_("caption") } },
+    { AccessibilityRole::Cell, { "table cell", N_("table cell") } },
+    { AccessibilityRole::CheckBox, { "check box", N_("check box") } },
+    { AccessibilityRole::ColorWell, { "push button", N_("push button") } },
+    { AccessibilityRole::ColumnHeader, { "column header", N_("column header") } },
+    { AccessibilityRole::ComboBox, { "combo box", N_("combo box") } },
+    { AccessibilityRole::Definition, { "definition", N_("definition") } },
+    { AccessibilityRole::Deletion, { "content deletion", N_("content deletion") } },
+    { AccessibilityRole::DescriptionList, { "description list", N_("description list") } },
+    { AccessibilityRole::DescriptionListTerm, { "description term", N_("description term") } },
+    { AccessibilityRole::DescriptionListDetail, { "description value", N_("description value") } },
+    { AccessibilityRole::Directory, { "directory pane", N_("directory pane") } },
+    { AccessibilityRole::Div, { "section", N_("section") } },
     { AccessibilityRole::Document, { "document frame", N_("document frame") } },
     { AccessibilityRole::DocumentArticle, { "article", N_("article") } },
     { AccessibilityRole::DocumentMath, { "math", N_("math") } },
     { AccessibilityRole::DocumentNote, { "comment", N_("comment") } },
-    { AccessibilityRole::UserInterfaceTooltip, { "tool tip", N_("tool tip") } },
-    { AccessibilityRole::Tab, { "page tab", N_("page tab") } },
-    { AccessibilityRole::TabList, { "page tab list", N_("page tab list") } },
-    { AccessibilityRole::TabPanel, { "scroll pane", N_("scroll pane") } },
-    { AccessibilityRole::Tree, { "tree", N_("tree") } },
-    { AccessibilityRole::TreeItem, { "tree item", N_("tree item") } },
-    { AccessibilityRole::ListItem, { "list item", N_("list item") } },
-    { AccessibilityRole::Paragraph, { "paragraph", N_("paragraph") } },
-    { AccessibilityRole::Label, { "label", N_("label") } },
-    { AccessibilityRole::Div, { "section", N_("section") } },
-    { AccessibilityRole::Form, { "form", N_("form") } },
-    { AccessibilityRole::SpinButton, { "spin button", N_("spin button") } },
-    { AccessibilityRole::Footer, { "footer", N_("footer") } },
-    { AccessibilityRole::ToggleButton, { "toggle button", N_("toggle button") } },
-    { AccessibilityRole::Canvas, { "canvas", N_("canvas") } },
-    { AccessibilityRole::SVGRoot, { "panel", N_("panel") } },
-    { AccessibilityRole::Legend, { "label", N_("label") } },
-    { AccessibilityRole::MathElement, { "math", N_("math") } },
-    { AccessibilityRole::Audio, { "audio", N_("audio") } },
-    { AccessibilityRole::Video, { "video", N_("video") } },
-    { AccessibilityRole::HorizontalRule, { "separator", N_("separator") } },
-    { AccessibilityRole::Blockquote, { "block quote", N_("block quote") } },
-    { AccessibilityRole::Switch, { "toggle button", N_("toggle button") } },
-    { AccessibilityRole::SearchField, { "entry", N_("entry") } },
-    { AccessibilityRole::Pre, { "section", N_("section") } },
-    { AccessibilityRole::SVGTextPath, { "text", N_("text") } },
-    { AccessibilityRole::SVGText, { "section", N_("section") } },
-    { AccessibilityRole::SVGTSpan, { "text", N_("text") } },
-    { AccessibilityRole::Inline, { "text", N_("text") } },
-    { AccessibilityRole::Mark, { "mar", N_("mark") } },
-    { AccessibilityRole::Time, { "text", N_("text") } },
     { AccessibilityRole::Feed, { "panel", N_("panel") } },
     { AccessibilityRole::Figure, { "panel", N_("panel") } },
+    { AccessibilityRole::Footer, { "footer", N_("footer") } },
     { AccessibilityRole::Footnote, { "footnote", N_("footnote") } },
+    { AccessibilityRole::Form, { "form", N_("form") } },
     { AccessibilityRole::GraphicsDocument, { "document frame", N_("document frame") } },
     { AccessibilityRole::GraphicsObject, { "panel", N_("panel") } },
     { AccessibilityRole::GraphicsSymbol, { "image", N_("image") } },
-    { AccessibilityRole::Caption, { "caption", N_("caption") } },
-    { AccessibilityRole::Deletion, { "content deletion", N_("content deletion") } },
+    { AccessibilityRole::Grid, { "table", N_("table") } },
+    { AccessibilityRole::GridCell, { "table cell", N_("table cell") } },
+    { AccessibilityRole::Group, { "panel", N_("panel") } },
+    { AccessibilityRole::Heading, { "heading", N_("heading") } },
+    { AccessibilityRole::HorizontalRule, { "separator", N_("separator") } },
+    { AccessibilityRole::Inline, { "text", N_("text") } },
+    { AccessibilityRole::Image, { "image", N_("image") } },
+    { AccessibilityRole::ImageMap, { "image map", N_("image map") } },
+    { AccessibilityRole::ImageMapLink, { "link", N_("link") } },
     { AccessibilityRole::Insertion, { "content insertion", N_("content insertion") } },
+    { AccessibilityRole::Label, { "label", N_("label") } },
+    { AccessibilityRole::LandmarkBanner, { "landmark", N_("landmark") } },
+    { AccessibilityRole::LandmarkComplementary, { "landmark", N_("landmark") } },
+    { AccessibilityRole::LandmarkContentInfo, { "landmark", N_("landmark") } },
+    { AccessibilityRole::LandmarkDocRegion, { "landmark", N_("landmark") } },
+    { AccessibilityRole::LandmarkMain, { "landmark", N_("landmark") } },
+    { AccessibilityRole::LandmarkNavigation, { "landmark", N_("landmark") } },
+    { AccessibilityRole::LandmarkRegion, { "landmark", N_("landmark") } },
+    { AccessibilityRole::LandmarkSearch, { "landmark", N_("landmark") } },
+    { AccessibilityRole::Legend, { "label", N_("label") } },
+    { AccessibilityRole::Link, { "link", N_("link") } },
+    { AccessibilityRole::List, { "list", N_("list") } },
+    { AccessibilityRole::ListBox, { "heading", N_("list box") } },
+    { AccessibilityRole::ListBoxOption, { "list item", N_("list item") } },
+    { AccessibilityRole::ListItem, { "list item", N_("list item") } },
+    { AccessibilityRole::ListMarker, { "text", N_("text") } },
+    { AccessibilityRole::Mark, { "mar", N_("mark") } },
+    { AccessibilityRole::MathElement, { "math", N_("math") } },
+    { AccessibilityRole::Menu, { "menu", N_("menu") } },
+    { AccessibilityRole::MenuBar, { "menu bar", N_("menu bar") } },
+    { AccessibilityRole::MenuButton, { "menu item", N_("menu item") } },
+    { AccessibilityRole::MenuItem, { "menu item", N_("menu item") } },
+    { AccessibilityRole::MenuItemCheckbox, { "check menu item", N_("check menu item") } },
+    { AccessibilityRole::MenuItemRadio, { "radio menu item", N_("radio menu item") } },
+    { AccessibilityRole::Meter, { "level bar", N_("level bar") } },
+    { AccessibilityRole::Outline, { "tree", N_("tree") } },
+    { AccessibilityRole::Paragraph, { "paragraph", N_("paragraph") } },
+    { AccessibilityRole::PopUpButton, { "combo box", N_("combo box") } },
+    { AccessibilityRole::Pre, { "section", N_("section") } },
+    { AccessibilityRole::ProgressIndicator, { "progress bar", N_("progress bar") } },
+    { AccessibilityRole::RadioButton, { "radio button", N_("radio button") } },
+    { AccessibilityRole::RadioGroup, { "panel", N_("panel") } },
+    { AccessibilityRole::RowHeader, { "row header", N_("row header") } },
+    { AccessibilityRole::Row, { "table row", N_("table row") } },
+    { AccessibilityRole::ScrollArea, { "scroll pane", N_("scroll pane") } },
+    { AccessibilityRole::ScrollBar, { "scroll bar", N_("scroll bar") } },
+    { AccessibilityRole::SearchField, { "entry", N_("entry") } },
+    { AccessibilityRole::Slider, { "slider", N_("slider") } },
+    { AccessibilityRole::SpinButton, { "spin button", N_("spin button") } },
+    { AccessibilityRole::SplitGroup, { "split pane", N_("split pane") } },
+    { AccessibilityRole::Splitter, { "separator", N_("separator") } },
+    { AccessibilityRole::StaticText, { "text", N_("text") } },
     { AccessibilityRole::Subscript, { "subscript", N_("subscript") } },
-    { AccessibilityRole::Superscript, { "superscript", N_("superscript") } }
+    { AccessibilityRole::Superscript, { "superscript", N_("superscript") } },
+    { AccessibilityRole::Switch, { "toggle button", N_("toggle button") } },
+    { AccessibilityRole::SVGRoot, { "panel", N_("panel") } },
+    { AccessibilityRole::SVGText, { "section", N_("section") } },
+    { AccessibilityRole::SVGTSpan, { "text", N_("text") } },
+    { AccessibilityRole::SVGTextPath, { "text", N_("text") } },
+    { AccessibilityRole::TabGroup, { "page tab list", N_("page tab list") } },
+    { AccessibilityRole::TabList, { "page tab list", N_("page tab list") } },
+    { AccessibilityRole::TabPanel, { "scroll pane", N_("scroll pane") } },
+    { AccessibilityRole::Tab, { "page tab", N_("page tab") } },
+    { AccessibilityRole::Table, { "table", N_("table") } },
+    { AccessibilityRole::Term, { "description term", N_("description term") } },
+    { AccessibilityRole::TextArea, { "entry", N_("entry") } },
+    { AccessibilityRole::TextField, { "entry", N_("entry") } },
+    { AccessibilityRole::TextGroup, { "section", N_("section") } },
+    { AccessibilityRole::Time, { "text", N_("text") } },
+    { AccessibilityRole::Tree, { "tree", N_("tree") } },
+    { AccessibilityRole::TreeGrid, { "tree table", N_("tree table") } },
+    { AccessibilityRole::TreeItem, { "tree item", N_("tree item") } },
+    { AccessibilityRole::ToggleButton, { "toggle button", N_("toggle button") } },
+    { AccessibilityRole::Toolbar, { "tool bar", N_("tool bar") } },
+    { AccessibilityRole::Unknown, { "unknown", N_("unknown") } },
+    { AccessibilityRole::UserInterfaceTooltip, { "tool tip", N_("tool tip") } },
+    { AccessibilityRole::Video, { "video", N_("video") } },
+    { AccessibilityRole::WebArea, { "document web", N_("document web") } },
+    { AccessibilityRole::WebCoreLink, { "link", N_("link") } },
+    { AccessibilityRole::Window, { "window", N_("window") } }
 };
 
 const char* AccessibilityAtspi::localizedRoleName(AccessibilityRole role)

Modified: trunk/Tools/ChangeLog (284675 => 284676)


--- trunk/Tools/ChangeLog	2021-10-22 08:51:03 UTC (rev 284675)
+++ trunk/Tools/ChangeLog	2021-10-22 10:05:08 UTC (rev 284676)
@@ -1,5 +1,17 @@
 2021-10-22  Carlos Garcia Campos  <[email protected]>
 
+        [GTK][a11y] Localized role name doesn't work with ATSPI enabled
+        https://bugs.webkit.org/show_bug.cgi?id=232136
+
+        Reviewed by Adrian Perez de Castro.
+
+        Add a few tests for localized role name.
+
+        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
+        (testAccessibleBasicHierarchy):
+
+2021-10-22  Carlos Garcia Campos  <[email protected]>
+
         [GTK][a11y] Add implementation of text interface when building with ATSPI
         https://bugs.webkit.org/show_bug.cgi?id=230258
 

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp (284675 => 284676)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp	2021-10-22 08:51:03 UTC (rev 284675)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp	2021-10-22 10:05:08 UTC (rev 284676)
@@ -200,14 +200,20 @@
     name.reset(atspi_accessible_get_name(h1.get(), nullptr));
     g_assert_cmpstr(name.get(), ==, "This is a test");
     g_assert_cmpint(atspi_accessible_get_role(h1.get(), nullptr), ==, ATSPI_ROLE_HEADING);
+    name.reset(atspi_accessible_get_localized_role_name(h1.get(), nullptr));
+    g_assert_cmpstr(name.get(), ==, "heading");
 
     auto p1 = adoptGRef(atspi_accessible_get_child_at_index(documentWeb.get(), 1, nullptr));
     g_assert_true(ATSPI_IS_ACCESSIBLE(p1.get()));
     g_assert_cmpint(atspi_accessible_get_role(p1.get(), nullptr), ==, ATSPI_ROLE_PARAGRAPH);
+    name.reset(atspi_accessible_get_localized_role_name(p1.get(), nullptr));
+    g_assert_cmpstr(name.get(), ==, "paragraph");
 
     auto p2 = adoptGRef(atspi_accessible_get_child_at_index(documentWeb.get(), 2, nullptr));
     g_assert_true(ATSPI_IS_ACCESSIBLE(p2.get()));
     g_assert_cmpint(atspi_accessible_get_role(p2.get(), nullptr), ==, ATSPI_ROLE_PARAGRAPH);
+    name.reset(atspi_accessible_get_localized_role_name(p2.get(), nullptr));
+    g_assert_cmpstr(name.get(), ==, "paragraph");
 
     auto link = adoptGRef(atspi_accessible_get_child_at_index(p2.get(), 0, nullptr));
     g_assert_true(ATSPI_IS_ACCESSIBLE(link.get()));
@@ -214,6 +220,8 @@
     name.reset(atspi_accessible_get_name(link.get(), nullptr));
     g_assert_cmpstr(name.get(), ==, "a link");
     g_assert_cmpint(atspi_accessible_get_role(link.get(), nullptr), ==, ATSPI_ROLE_LINK);
+    name.reset(atspi_accessible_get_localized_role_name(link.get(), nullptr));
+    g_assert_cmpstr(name.get(), ==, "link");
 
     test->loadHtml(
         "<html>"
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to