⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 284676 in webkit


Ignore:
Timestamp:
Oct 22, 2021, 3:05:08 AM (5 years ago)
Author:
Carlos Garcia Campos
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):

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r284675 r284676  
     12021-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][a11y] Localized role name doesn't work with ATSPI enabled
     4        https://bugs.webkit.org/show_bug.cgi?id=232136
     5
     6        Reviewed by Adrian Perez de Castro.
     7
     8        I switched to use SortedArrayMap in AccessibilityAtspi::localizedRoleName() but I didn't realize the array was
     9        not actually sorted. We just need to sort it for SortedArrayMap to work as expected.
     10
     11        * accessibility/atspi/AccessibilityAtspi.cpp:
     12
    1132021-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>
    214
  • trunk/Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp

    r284675 r284676  
    222222
    223223static constexpr std::pair<AccessibilityRole, RoleNameEntry> roleNames[] = {
    224     { AccessibilityRole::Unknown, { "unknown", N_("unknown") } },
     224    { AccessibilityRole::Application, { "application", N_("application") } },
     225    { AccessibilityRole::ApplicationAlert, { "notification", N_("notification") } },
     226    { AccessibilityRole::ApplicationAlertDialog, { "alert", N_("alert") } },
     227    { AccessibilityRole::ApplicationDialog, { "dialog", N_("dialog") } },
     228    { AccessibilityRole::ApplicationGroup, { "grouping", N_("grouping") } },
     229    { AccessibilityRole::ApplicationLog, { "log", N_("log") } },
     230    { AccessibilityRole::ApplicationMarquee, { "marquee", N_("marquee") } },
     231    { AccessibilityRole::ApplicationStatus, { "statusbar", N_("statusbar") } },
     232    { AccessibilityRole::ApplicationTextGroup, { "section", N_("section") } },
     233    { AccessibilityRole::ApplicationTimer, { "timer", N_("timer") } },
     234    { AccessibilityRole::Audio, { "audio", N_("audio") } },
     235    { AccessibilityRole::Blockquote, { "block quote", N_("block quote") } },
     236    { AccessibilityRole::BusyIndicator, { "progress bar", N_("progress bar") } },
    225237    { AccessibilityRole::Button, { "push button", N_("push button") } },
    226     { AccessibilityRole::RadioButton, { "radio button", N_("radio button") } },
     238    { AccessibilityRole::Canvas, { "canvas", N_("canvas") } },
     239    { AccessibilityRole::Caption, { "caption", N_("caption") } },
     240    { AccessibilityRole::Cell, { "table cell", N_("table cell") } },
    227241    { AccessibilityRole::CheckBox, { "check box", N_("check box") } },
    228     { AccessibilityRole::Slider, { "slider", N_("slider") } },
    229     { AccessibilityRole::TabGroup, { "page tab list", N_("page tab list") } },
    230     { AccessibilityRole::TextField, { "entry", N_("entry") } },
    231     { AccessibilityRole::StaticText, { "text", N_("text") } },
    232     { AccessibilityRole::TextArea, { "entry", N_("entry") } },
    233     { AccessibilityRole::ScrollArea, { "scroll pane", N_("scroll pane") } },
    234     { AccessibilityRole::PopUpButton, { "combo box", N_("combo box") } },
    235     { AccessibilityRole::MenuButton, { "menu item", N_("menu item") } },
    236     { AccessibilityRole::Table, { "table", N_("table") } },
    237     { AccessibilityRole::Application, { "application", N_("application") } },
     242    { AccessibilityRole::ColorWell, { "push button", N_("push button") } },
     243    { AccessibilityRole::ColumnHeader, { "column header", N_("column header") } },
     244    { AccessibilityRole::ComboBox, { "combo box", N_("combo box") } },
     245    { AccessibilityRole::Definition, { "definition", N_("definition") } },
     246    { AccessibilityRole::Deletion, { "content deletion", N_("content deletion") } },
     247    { AccessibilityRole::DescriptionList, { "description list", N_("description list") } },
     248    { AccessibilityRole::DescriptionListTerm, { "description term", N_("description term") } },
     249    { AccessibilityRole::DescriptionListDetail, { "description value", N_("description value") } },
     250    { AccessibilityRole::Directory, { "directory pane", N_("directory pane") } },
     251    { AccessibilityRole::Div, { "section", N_("section") } },
     252    { AccessibilityRole::Document, { "document frame", N_("document frame") } },
     253    { AccessibilityRole::DocumentArticle, { "article", N_("article") } },
     254    { AccessibilityRole::DocumentMath, { "math", N_("math") } },
     255    { AccessibilityRole::DocumentNote, { "comment", N_("comment") } },
     256    { AccessibilityRole::Feed, { "panel", N_("panel") } },
     257    { AccessibilityRole::Figure, { "panel", N_("panel") } },
     258    { AccessibilityRole::Footer, { "footer", N_("footer") } },
     259    { AccessibilityRole::Footnote, { "footnote", N_("footnote") } },
     260    { AccessibilityRole::Form, { "form", N_("form") } },
     261    { AccessibilityRole::GraphicsDocument, { "document frame", N_("document frame") } },
     262    { AccessibilityRole::GraphicsObject, { "panel", N_("panel") } },
     263    { AccessibilityRole::GraphicsSymbol, { "image", N_("image") } },
     264    { AccessibilityRole::Grid, { "table", N_("table") } },
     265    { AccessibilityRole::GridCell, { "table cell", N_("table cell") } },
    238266    { AccessibilityRole::Group, { "panel", N_("panel") } },
    239     { AccessibilityRole::TextGroup, { "section", N_("section") } },
    240     { AccessibilityRole::RadioGroup, { "panel", N_("panel") } },
    241     { AccessibilityRole::List, { "list", N_("list") } },
    242     { AccessibilityRole::Directory, { "directory pane", N_("directory pane") } },
    243     { AccessibilityRole::ScrollBar, { "scroll bar", N_("scroll bar") } },
     267    { AccessibilityRole::Heading, { "heading", N_("heading") } },
     268    { AccessibilityRole::HorizontalRule, { "separator", N_("separator") } },
     269    { AccessibilityRole::Inline, { "text", N_("text") } },
    244270    { AccessibilityRole::Image, { "image", N_("image") } },
    245     { AccessibilityRole::MenuBar, { "menu bar", N_("menu bar") } },
    246     { AccessibilityRole::Menu, { "menu", N_("menu") } },
    247     { AccessibilityRole::MenuItem, { "menu item", N_("menu item") } },
    248     { AccessibilityRole::MenuItemCheckbox, { "check menu item", N_("check menu item") } },
    249     { AccessibilityRole::MenuItemRadio, { "radio menu item", N_("radio menu item") } },
    250     { AccessibilityRole::Row, { "table row", N_("table row") } },
    251     { AccessibilityRole::Toolbar, { "tool bar", N_("tool bar") } },
    252     { AccessibilityRole::BusyIndicator, { "progress bar", N_("progress bar") } },
    253     { AccessibilityRole::ProgressIndicator, { "progress bar", N_("progress bar") } },
    254     { AccessibilityRole::Meter, { "level bar", N_("level bar") } },
    255     { AccessibilityRole::Window, { "window", N_("window") } },
    256     { AccessibilityRole::Outline, { "tree", N_("tree") } },
    257     { AccessibilityRole::ComboBox, { "combo box", N_("combo box") } },
    258     { AccessibilityRole::SplitGroup, { "split pane", N_("split pane") } },
    259     { AccessibilityRole::Splitter, { "separator", N_("separator") } },
    260     { AccessibilityRole::ColorWell, { "push button", N_("push button") } },
    261     { AccessibilityRole::Link, { "link", N_("link") } },
    262     { AccessibilityRole::Grid, { "table", N_("table") } },
    263     { AccessibilityRole::TreeGrid, { "tree table", N_("tree table") } },
    264     { AccessibilityRole::WebCoreLink, { "link", N_("link") } },
     271    { AccessibilityRole::ImageMap, { "image map", N_("image map") } },
    265272    { AccessibilityRole::ImageMapLink, { "link", N_("link") } },
    266     { AccessibilityRole::ImageMap, { "image map", N_("image map") } },
    267     { AccessibilityRole::ListMarker, { "text", N_("text") } },
    268     { AccessibilityRole::WebArea, { "document web", N_("document web") } },
    269     { AccessibilityRole::Heading, { "heading", N_("heading") } },
    270     { AccessibilityRole::ListBox, { "heading", N_("list box") } },
    271     { AccessibilityRole::ListBoxOption, { "list item", N_("list item") } },
    272     { AccessibilityRole::Cell, { "table cell", N_("table cell") } },
    273     { AccessibilityRole::GridCell, { "table cell", N_("table cell") } },
    274     { AccessibilityRole::ColumnHeader, { "column header", N_("column header") } },
    275     { AccessibilityRole::RowHeader, { "row header", N_("row header") } },
    276     { AccessibilityRole::Definition, { "definition", N_("definition") } },
    277     { AccessibilityRole::DescriptionListDetail, { "description value", N_("description value") } },
    278     { AccessibilityRole::DescriptionListTerm, { "description term", N_("description term") } },
    279     { AccessibilityRole::Term, { "description term", N_("description term") } },
    280     { AccessibilityRole::DescriptionList, { "description list", N_("description list") } },
     273    { AccessibilityRole::Insertion, { "content insertion", N_("content insertion") } },
     274    { AccessibilityRole::Label, { "label", N_("label") } },
    281275    { AccessibilityRole::LandmarkBanner, { "landmark", N_("landmark") } },
    282276    { AccessibilityRole::LandmarkComplementary, { "landmark", N_("landmark") } },
     277    { AccessibilityRole::LandmarkContentInfo, { "landmark", N_("landmark") } },
    283278    { AccessibilityRole::LandmarkDocRegion, { "landmark", N_("landmark") } },
    284     { AccessibilityRole::LandmarkContentInfo, { "landmark", N_("landmark") } },
    285279    { AccessibilityRole::LandmarkMain, { "landmark", N_("landmark") } },
    286280    { AccessibilityRole::LandmarkNavigation, { "landmark", N_("landmark") } },
    287281    { AccessibilityRole::LandmarkRegion, { "landmark", N_("landmark") } },
    288282    { AccessibilityRole::LandmarkSearch, { "landmark", N_("landmark") } },
    289     { AccessibilityRole::ApplicationAlert, { "notification", N_("notification") } },
    290     { AccessibilityRole::ApplicationAlertDialog, { "alert", N_("alert") } },
    291     { AccessibilityRole::ApplicationDialog, { "dialog", N_("dialog") } },
    292     { AccessibilityRole::ApplicationGroup, { "grouping", N_("grouping") } },
    293     { AccessibilityRole::ApplicationTextGroup, { "section", N_("section") } },
    294     { AccessibilityRole::ApplicationLog, { "log", N_("log") } },
    295     { AccessibilityRole::ApplicationMarquee, { "marquee", N_("marquee") } },
    296     { AccessibilityRole::ApplicationStatus, { "statusbar", N_("statusbar") } },
    297     { AccessibilityRole::ApplicationTimer, { "timer", N_("timer") } },
    298     { AccessibilityRole::Document, { "document frame", N_("document frame") } },
    299     { AccessibilityRole::DocumentArticle, { "article", N_("article") } },
    300     { AccessibilityRole::DocumentMath, { "math", N_("math") } },
    301     { AccessibilityRole::DocumentNote, { "comment", N_("comment") } },
    302     { AccessibilityRole::UserInterfaceTooltip, { "tool tip", N_("tool tip") } },
    303     { AccessibilityRole::Tab, { "page tab", N_("page tab") } },
     283    { AccessibilityRole::Legend, { "label", N_("label") } },
     284    { AccessibilityRole::Link, { "link", N_("link") } },
     285    { AccessibilityRole::List, { "list", N_("list") } },
     286    { AccessibilityRole::ListBox, { "heading", N_("list box") } },
     287    { AccessibilityRole::ListBoxOption, { "list item", N_("list item") } },
     288    { AccessibilityRole::ListItem, { "list item", N_("list item") } },
     289    { AccessibilityRole::ListMarker, { "text", N_("text") } },
     290    { AccessibilityRole::Mark, { "mar", N_("mark") } },
     291    { AccessibilityRole::MathElement, { "math", N_("math") } },
     292    { AccessibilityRole::Menu, { "menu", N_("menu") } },
     293    { AccessibilityRole::MenuBar, { "menu bar", N_("menu bar") } },
     294    { AccessibilityRole::MenuButton, { "menu item", N_("menu item") } },
     295    { AccessibilityRole::MenuItem, { "menu item", N_("menu item") } },
     296    { AccessibilityRole::MenuItemCheckbox, { "check menu item", N_("check menu item") } },
     297    { AccessibilityRole::MenuItemRadio, { "radio menu item", N_("radio menu item") } },
     298    { AccessibilityRole::Meter, { "level bar", N_("level bar") } },
     299    { AccessibilityRole::Outline, { "tree", N_("tree") } },
     300    { AccessibilityRole::Paragraph, { "paragraph", N_("paragraph") } },
     301    { AccessibilityRole::PopUpButton, { "combo box", N_("combo box") } },
     302    { AccessibilityRole::Pre, { "section", N_("section") } },
     303    { AccessibilityRole::ProgressIndicator, { "progress bar", N_("progress bar") } },
     304    { AccessibilityRole::RadioButton, { "radio button", N_("radio button") } },
     305    { AccessibilityRole::RadioGroup, { "panel", N_("panel") } },
     306    { AccessibilityRole::RowHeader, { "row header", N_("row header") } },
     307    { AccessibilityRole::Row, { "table row", N_("table row") } },
     308    { AccessibilityRole::ScrollArea, { "scroll pane", N_("scroll pane") } },
     309    { AccessibilityRole::ScrollBar, { "scroll bar", N_("scroll bar") } },
     310    { AccessibilityRole::SearchField, { "entry", N_("entry") } },
     311    { AccessibilityRole::Slider, { "slider", N_("slider") } },
     312    { AccessibilityRole::SpinButton, { "spin button", N_("spin button") } },
     313    { AccessibilityRole::SplitGroup, { "split pane", N_("split pane") } },
     314    { AccessibilityRole::Splitter, { "separator", N_("separator") } },
     315    { AccessibilityRole::StaticText, { "text", N_("text") } },
     316    { AccessibilityRole::Subscript, { "subscript", N_("subscript") } },
     317    { AccessibilityRole::Superscript, { "superscript", N_("superscript") } },
     318    { AccessibilityRole::Switch, { "toggle button", N_("toggle button") } },
     319    { AccessibilityRole::SVGRoot, { "panel", N_("panel") } },
     320    { AccessibilityRole::SVGText, { "section", N_("section") } },
     321    { AccessibilityRole::SVGTSpan, { "text", N_("text") } },
     322    { AccessibilityRole::SVGTextPath, { "text", N_("text") } },
     323    { AccessibilityRole::TabGroup, { "page tab list", N_("page tab list") } },
    304324    { AccessibilityRole::TabList, { "page tab list", N_("page tab list") } },
    305325    { AccessibilityRole::TabPanel, { "scroll pane", N_("scroll pane") } },
     326    { AccessibilityRole::Tab, { "page tab", N_("page tab") } },
     327    { AccessibilityRole::Table, { "table", N_("table") } },
     328    { AccessibilityRole::Term, { "description term", N_("description term") } },
     329    { AccessibilityRole::TextArea, { "entry", N_("entry") } },
     330    { AccessibilityRole::TextField, { "entry", N_("entry") } },
     331    { AccessibilityRole::TextGroup, { "section", N_("section") } },
     332    { AccessibilityRole::Time, { "text", N_("text") } },
    306333    { AccessibilityRole::Tree, { "tree", N_("tree") } },
     334    { AccessibilityRole::TreeGrid, { "tree table", N_("tree table") } },
    307335    { AccessibilityRole::TreeItem, { "tree item", N_("tree item") } },
    308     { AccessibilityRole::ListItem, { "list item", N_("list item") } },
    309     { AccessibilityRole::Paragraph, { "paragraph", N_("paragraph") } },
    310     { AccessibilityRole::Label, { "label", N_("label") } },
    311     { AccessibilityRole::Div, { "section", N_("section") } },
    312     { AccessibilityRole::Form, { "form", N_("form") } },
    313     { AccessibilityRole::SpinButton, { "spin button", N_("spin button") } },
    314     { AccessibilityRole::Footer, { "footer", N_("footer") } },
    315336    { AccessibilityRole::ToggleButton, { "toggle button", N_("toggle button") } },
    316     { AccessibilityRole::Canvas, { "canvas", N_("canvas") } },
    317     { AccessibilityRole::SVGRoot, { "panel", N_("panel") } },
    318     { AccessibilityRole::Legend, { "label", N_("label") } },
    319     { AccessibilityRole::MathElement, { "math", N_("math") } },
    320     { AccessibilityRole::Audio, { "audio", N_("audio") } },
     337    { AccessibilityRole::Toolbar, { "tool bar", N_("tool bar") } },
     338    { AccessibilityRole::Unknown, { "unknown", N_("unknown") } },
     339    { AccessibilityRole::UserInterfaceTooltip, { "tool tip", N_("tool tip") } },
    321340    { AccessibilityRole::Video, { "video", N_("video") } },
    322     { AccessibilityRole::HorizontalRule, { "separator", N_("separator") } },
    323     { AccessibilityRole::Blockquote, { "block quote", N_("block quote") } },
    324     { AccessibilityRole::Switch, { "toggle button", N_("toggle button") } },
    325     { AccessibilityRole::SearchField, { "entry", N_("entry") } },
    326     { AccessibilityRole::Pre, { "section", N_("section") } },
    327     { AccessibilityRole::SVGTextPath, { "text", N_("text") } },
    328     { AccessibilityRole::SVGText, { "section", N_("section") } },
    329     { AccessibilityRole::SVGTSpan, { "text", N_("text") } },
    330     { AccessibilityRole::Inline, { "text", N_("text") } },
    331     { AccessibilityRole::Mark, { "mar", N_("mark") } },
    332     { AccessibilityRole::Time, { "text", N_("text") } },
    333     { AccessibilityRole::Feed, { "panel", N_("panel") } },
    334     { AccessibilityRole::Figure, { "panel", N_("panel") } },
    335     { AccessibilityRole::Footnote, { "footnote", N_("footnote") } },
    336     { AccessibilityRole::GraphicsDocument, { "document frame", N_("document frame") } },
    337     { AccessibilityRole::GraphicsObject, { "panel", N_("panel") } },
    338     { AccessibilityRole::GraphicsSymbol, { "image", N_("image") } },
    339     { AccessibilityRole::Caption, { "caption", N_("caption") } },
    340     { AccessibilityRole::Deletion, { "content deletion", N_("content deletion") } },
    341     { AccessibilityRole::Insertion, { "content insertion", N_("content insertion") } },
    342     { AccessibilityRole::Subscript, { "subscript", N_("subscript") } },
    343     { AccessibilityRole::Superscript, { "superscript", N_("superscript") } }
     341    { AccessibilityRole::WebArea, { "document web", N_("document web") } },
     342    { AccessibilityRole::WebCoreLink, { "link", N_("link") } },
     343    { AccessibilityRole::Window, { "window", N_("window") } }
    344344};
    345345
  • trunk/Tools/ChangeLog

    r284675 r284676  
     12021-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][a11y] Localized role name doesn't work with ATSPI enabled
     4        https://bugs.webkit.org/show_bug.cgi?id=232136
     5
     6        Reviewed by Adrian Perez de Castro.
     7
     8        Add a few tests for localized role name.
     9
     10        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
     11        (testAccessibleBasicHierarchy):
     12
    1132021-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>
    214
  • trunk/Tools/TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp

    r284675 r284676  
    201201    g_assert_cmpstr(name.get(), ==, "This is a test");
    202202    g_assert_cmpint(atspi_accessible_get_role(h1.get(), nullptr), ==, ATSPI_ROLE_HEADING);
     203    name.reset(atspi_accessible_get_localized_role_name(h1.get(), nullptr));
     204    g_assert_cmpstr(name.get(), ==, "heading");
    203205
    204206    auto p1 = adoptGRef(atspi_accessible_get_child_at_index(documentWeb.get(), 1, nullptr));
    205207    g_assert_true(ATSPI_IS_ACCESSIBLE(p1.get()));
    206208    g_assert_cmpint(atspi_accessible_get_role(p1.get(), nullptr), ==, ATSPI_ROLE_PARAGRAPH);
     209    name.reset(atspi_accessible_get_localized_role_name(p1.get(), nullptr));
     210    g_assert_cmpstr(name.get(), ==, "paragraph");
    207211
    208212    auto p2 = adoptGRef(atspi_accessible_get_child_at_index(documentWeb.get(), 2, nullptr));
    209213    g_assert_true(ATSPI_IS_ACCESSIBLE(p2.get()));
    210214    g_assert_cmpint(atspi_accessible_get_role(p2.get(), nullptr), ==, ATSPI_ROLE_PARAGRAPH);
     215    name.reset(atspi_accessible_get_localized_role_name(p2.get(), nullptr));
     216    g_assert_cmpstr(name.get(), ==, "paragraph");
    211217
    212218    auto link = adoptGRef(atspi_accessible_get_child_at_index(p2.get(), 0, nullptr));
     
    215221    g_assert_cmpstr(name.get(), ==, "a link");
    216222    g_assert_cmpint(atspi_accessible_get_role(link.get(), nullptr), ==, ATSPI_ROLE_LINK);
     223    name.reset(atspi_accessible_get_localized_role_name(link.get(), nullptr));
     224    g_assert_cmpstr(name.get(), ==, "link");
    217225
    218226    test->loadHtml(
Note: See TracChangeset for help on using the changeset viewer.