0

Remove redundant Role::kPresentation/kIgnored (use kNone)

Also fixes an actual bug, where the computed role for 'none' was
capitalized as 'None'.

Bug: None
Change-Id: I344ee1b5d018dac8d92f69bfcacc04631e1172e1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2828456
Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org>
Reviewed-by: Shengfa Lin <shengfa@google.com>
Reviewed-by: Peter Kasting <pkasting@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Aaron Leventhal <aleventhal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#874502}
This commit is contained in:
Aaron Leventhal
2021-04-21 00:44:52 +00:00
committed by Chromium LUCI CQ
parent 0588be0fb6
commit 609f569cd5
41 changed files with 91 additions and 122 deletions

@@ -783,7 +783,7 @@ AutomationPredicate.structuralContainer = AutomationPredicate.roles([
Role.ALERT_DIALOG, Role.CLIENT, Role.DIALOG, Role.LAYOUT_TABLE, Role.ALERT_DIALOG, Role.CLIENT, Role.DIALOG, Role.LAYOUT_TABLE,
Role.LAYOUT_TABLE_CELL, Role.LAYOUT_TABLE_ROW, Role.ROOT_WEB_AREA, Role.LAYOUT_TABLE_CELL, Role.LAYOUT_TABLE_ROW, Role.ROOT_WEB_AREA,
Role.WEB_VIEW, Role.WINDOW, Role.EMBEDDED_OBJECT, Role.IFRAME, Role.WEB_VIEW, Role.WINDOW, Role.EMBEDDED_OBJECT, Role.IFRAME,
Role.IFRAME_PRESENTATIONAL, Role.PLUGIN_OBJECT, Role.IGNORED, Role.UNKNOWN, Role.IFRAME_PRESENTATIONAL, Role.PLUGIN_OBJECT, Role.NONE, Role.UNKNOWN,
Role.PANE Role.PANE
]); ]);

@@ -108,7 +108,7 @@ class RatingStar : public views::ImageView {
// views::ImageView: // views::ImageView:
void GetAccessibleNodeData(ui::AXNodeData* node_data) override { void GetAccessibleNodeData(ui::AXNodeData* node_data) override {
node_data->role = ax::mojom::Role::kIgnored; node_data->role = ax::mojom::Role::kNone;
} }
}; };
@@ -128,7 +128,7 @@ class RatingLabel : public views::Label {
// views::Label: // views::Label:
void GetAccessibleNodeData(ui::AXNodeData* node_data) override { void GetAccessibleNodeData(ui::AXNodeData* node_data) override {
node_data->role = ax::mojom::Role::kIgnored; node_data->role = ax::mojom::Role::kNone;
} }
}; };

@@ -606,7 +606,7 @@ void ExtensionInstallDialogRatingsSectionTest::TestRatingsSectionA11y(
for (views::View* child : rating_view->children()) { for (views::View* child : rating_view->children()) {
ui::AXNodeData node_data; ui::AXNodeData node_data;
child->GetAccessibleNodeData(&node_data); child->GetAccessibleNodeData(&node_data);
EXPECT_EQ(ax::mojom::Role::kIgnored, node_data.role); EXPECT_EQ(ax::mojom::Role::kNone, node_data.role);
} }
CloseAndWait(modal_dialog); CloseAndWait(modal_dialog);

@@ -273,7 +273,7 @@ TabHoverCardBubbleView::~TabHoverCardBubbleView() = default;
ax::mojom::Role TabHoverCardBubbleView::GetAccessibleWindowRole() { ax::mojom::Role TabHoverCardBubbleView::GetAccessibleWindowRole() {
// Override the role so that hover cards are not read when they appear because // Override the role so that hover cards are not read when they appear because
// tabs handle accessibility text. // tabs handle accessibility text.
return ax::mojom::Role::kIgnored; return ax::mojom::Role::kNone;
} }
void TabHoverCardBubbleView::Layout() { void TabHoverCardBubbleView::Layout() {

@@ -599,7 +599,7 @@ class ChromeDriverTest(ChromeDriverBaseTestWithWebServer):
# GetComputedLabel for ignored node should return empty string. # GetComputedLabel for ignored node should return empty string.
self.assertEquals(ignoredHeaderElement.GetComputedLabel(), '') self.assertEquals(ignoredHeaderElement.GetComputedLabel(), '')
self.assertEquals(ignoredHeaderElement.GetComputedRole(), 'Ignored') self.assertEquals(ignoredHeaderElement.GetComputedRole(), 'none')
def testGetComputedAttributesForUnrenderedNode(self): def testGetComputedAttributesForUnrenderedNode(self):
self._driver.Load( self._driver.Load(
@@ -610,7 +610,7 @@ class ChromeDriverTest(ChromeDriverBaseTestWithWebServer):
# GetComputedLabel for unrendered node should return empty string. # GetComputedLabel for unrendered node should return empty string.
self.assertEquals(unrenderedHeaderElement.GetComputedLabel(), '') self.assertEquals(unrenderedHeaderElement.GetComputedLabel(), '')
self.assertEquals(unrenderedHeaderElement.GetComputedRole(), 'Ignored') self.assertEquals(unrenderedHeaderElement.GetComputedRole(), 'none')
def testLoadUrl(self): def testLoadUrl(self):
self._driver.Load(self.GetHttpUrlForFile('/chromedriver/empty.html')) self._driver.Load(self.GetHttpUrlForFile('/chromedriver/empty.html'))

@@ -1365,9 +1365,6 @@ std::u16string BrowserAccessibilityAndroid::GetRoleDescription() const {
case ax::mojom::Role::kIframePresentational: case ax::mojom::Role::kIframePresentational:
// No role description. // No role description.
break; break;
case ax::mojom::Role::kIgnored:
// No role description.
break;
case ax::mojom::Role::kImage: case ax::mojom::Role::kImage:
message_id = IDS_AX_ROLE_GRAPHIC; message_id = IDS_AX_ROLE_GRAPHIC;
break; break;
@@ -1488,9 +1485,6 @@ std::u16string BrowserAccessibilityAndroid::GetRoleDescription() const {
case ax::mojom::Role::kPre: case ax::mojom::Role::kPre:
// No role description. // No role description.
break; break;
case ax::mojom::Role::kPresentational:
// No role description.
break;
case ax::mojom::Role::kProgressIndicator: case ax::mojom::Role::kProgressIndicator:
message_id = IDS_AX_ROLE_PROGRESS_INDICATOR; message_id = IDS_AX_ROLE_PROGRESS_INDICATOR;
break; break;

@@ -871,7 +871,7 @@ void RenderAccessibilityImpl::SendPendingAccessibilityEvents() {
// //
// Consider the following tree : // Consider the following tree :
// ++(0) Role::kRootWebArea // ++(0) Role::kRootWebArea
// ++++<1> Role::kIgnored // ++++<1> Role::kNone
// ++++++[2] Role::kGenericContainer <body> // ++++++[2] Role::kGenericContainer <body>
// ++++++++[3] Role::kGenericContainer with 'visibility: hidden' // ++++++++[3] Role::kGenericContainer with 'visibility: hidden'
// //

@@ -4,7 +4,7 @@ rootWebArea
++++++splitter horizontal name='Ordinary presentation element with id' ++++++splitter horizontal name='Ordinary presentation element with id'
++++++splitter horizontal name='An aria-owned element is never ignored' ++++++splitter horizontal name='An aria-owned element is never ignored'
++++++group ++++++group
++++++++presentational ignored ++++++++none ignored
++++++++++button name='button-in-owned-tree' ++++++++++button name='button-in-owned-tree'
++++++++++++staticText name='button-in-owned-tree' ++++++++++++staticText name='button-in-owned-tree'
++++++++++++++inlineTextBox name='button-in-owned-tree' ++++++++++++++inlineTextBox name='button-in-owned-tree'
@@ -17,5 +17,5 @@ rootWebArea
++++++++checkBox checkedState=false ++++++++checkBox checkedState=false
++++++splitter horizontal name='All the above in one' ++++++splitter horizontal name='All the above in one'
++++++genericContainer ++++++genericContainer
++++++++presentational ignored ++++++++none ignored
++++++++++slider horizontal value='50' valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00 ++++++++++slider horizontal value='50' valueForRange=50.00 minValueForRange=0.00 maxValueForRange=100.00

@@ -4,6 +4,6 @@ rootWebArea language='en-US'
++++++paragraph language='es-ES' ++++++paragraph language='es-ES'
++++++++staticText language='es-ES' name='Espanyol' ++++++++staticText language='es-ES' name='Espanyol'
++++++++++inlineTextBox language='es-ES' name='Espanyol' ++++++++++inlineTextBox language='es-ES' name='Espanyol'
++++++presentational ignored language='fr-FR' ++++++none ignored language='fr-FR'
++++++++staticText language='fr-FR' name='Comment allez-vous?' ++++++++staticText language='fr-FR' name='Comment allez-vous?'
++++++++++inlineTextBox language='fr-FR' name='Comment allez-vous?' ++++++++++inlineTextBox language='fr-FR' name='Comment allez-vous?'

@@ -1,7 +1,7 @@
rootWebArea name='Table with role=presentation' rootWebArea name='Table with role=presentation'
++genericContainer ignored ++genericContainer ignored
++++genericContainer ignored ++++genericContainer ignored
++++++presentational ignored ++++++none ignored
++++++++genericContainer ignored ++++++++genericContainer ignored
++++++++++genericContainer ignored ++++++++++genericContainer ignored
++++++++++++genericContainer ++++++++++++genericContainer

@@ -25,7 +25,7 @@ ax::mojom::Role GetInterestingRole(FuzzedDataProvider& fdp) {
switch (fdp.ConsumeIntegralInRange(0, 12)) { switch (fdp.ConsumeIntegralInRange(0, 12)) {
default: default:
case 0: case 0:
return ax::mojom::Role::kIgnored; return ax::mojom::Role::kNone;
case 1: case 1:
return ax::mojom::Role::kStaticText; return ax::mojom::Role::kStaticText;
case 2: case 2:

@@ -242,7 +242,6 @@
heading, heading,
iframe, iframe,
iframePresentational, iframePresentational,
ignored,
image, image,
imeCandidate, imeCandidate,
inlineTextBox, inlineTextBox,
@@ -284,7 +283,6 @@
popUpButton, popUpButton,
portal, portal,
pre, pre,
presentational,
progressIndicator, progressIndicator,
radioButton, radioButton,
radioGroup, radioGroup,

@@ -201,7 +201,6 @@ bool IsValidRole(ax::mojom::blink::Role role) {
case ax::mojom::blink::Role::kColumn: case ax::mojom::blink::Role::kColumn:
case ax::mojom::blink::Role::kDesktop: case ax::mojom::blink::Role::kDesktop:
case ax::mojom::blink::Role::kKeyboard: case ax::mojom::blink::Role::kKeyboard:
case ax::mojom::blink::Role::kIgnored:
case ax::mojom::blink::Role::kImeCandidate: case ax::mojom::blink::Role::kImeCandidate:
case ax::mojom::blink::Role::kListGrid: case ax::mojom::blink::Role::kListGrid:
case ax::mojom::blink::Role::kPane: case ax::mojom::blink::Role::kPane:
@@ -348,11 +347,14 @@ const RoleEntry kAriaRoles[] = {
{"mark", ax::mojom::blink::Role::kMark}, {"mark", ax::mojom::blink::Role::kMark},
{"meter", ax::mojom::blink::Role::kMeter}, {"meter", ax::mojom::blink::Role::kMeter},
{"navigation", ax::mojom::blink::Role::kNavigation}, {"navigation", ax::mojom::blink::Role::kNavigation},
// role="presentation" is the same as role="none".
{"presentation", ax::mojom::blink::Role::kNone},
// role="none" is listed after role="presentation", so that it is the
// canonical name in devtools and tests.
{"none", ax::mojom::blink::Role::kNone}, {"none", ax::mojom::blink::Role::kNone},
{"note", ax::mojom::blink::Role::kNote}, {"note", ax::mojom::blink::Role::kNote},
{"option", ax::mojom::blink::Role::kListBoxOption}, {"option", ax::mojom::blink::Role::kListBoxOption},
{"paragraph", ax::mojom::blink::Role::kParagraph}, {"paragraph", ax::mojom::blink::Role::kParagraph},
{"presentation", ax::mojom::blink::Role::kPresentational},
{"progressbar", ax::mojom::blink::Role::kProgressIndicator}, {"progressbar", ax::mojom::blink::Role::kProgressIndicator},
{"radio", ax::mojom::blink::Role::kRadioButton}, {"radio", ax::mojom::blink::Role::kRadioButton},
{"radiogroup", ax::mojom::blink::Role::kRadioGroup}, {"radiogroup", ax::mojom::blink::Role::kRadioGroup},
@@ -5060,7 +5062,6 @@ bool AXObject::SupportsNameFromContents(bool recursive) const {
case ax::mojom::blink::Role::kNone: case ax::mojom::blink::Role::kNone:
case ax::mojom::blink::Role::kParagraph: case ax::mojom::blink::Role::kParagraph:
case ax::mojom::blink::Role::kPre: case ax::mojom::blink::Role::kPre:
case ax::mojom::blink::Role::kPresentational:
case ax::mojom::blink::Role::kRegion: case ax::mojom::blink::Role::kRegion:
// Spec says we should always expose the name on rows, // Spec says we should always expose the name on rows,
// but for performance reasons we only do it // but for performance reasons we only do it
@@ -5131,7 +5132,6 @@ bool AXObject::SupportsNameFromContents(bool recursive) const {
case ax::mojom::blink::Role::kColumn: case ax::mojom::blink::Role::kColumn:
case ax::mojom::blink::Role::kDesktop: case ax::mojom::blink::Role::kDesktop:
case ax::mojom::blink::Role::kKeyboard: case ax::mojom::blink::Role::kKeyboard:
case ax::mojom::blink::Role::kIgnored:
case ax::mojom::blink::Role::kImeCandidate: case ax::mojom::blink::Role::kImeCandidate:
case ax::mojom::blink::Role::kListGrid: case ax::mojom::blink::Role::kListGrid:
case ax::mojom::blink::Role::kPane: case ax::mojom::blink::Role::kPane:

@@ -605,7 +605,7 @@ std::unique_ptr<AXNode> InspectorAccessibilityAgent::BuildObjectForIgnoredNode(
.setNodeId(String::Number(ax_id)) .setNodeId(String::Number(ax_id))
.setIgnored(true) .setIgnored(true)
.build(); .build();
ax::mojom::Role role = ax::mojom::Role::kIgnored; ax::mojom::blink::Role role = ax::mojom::blink::Role::kNone;
ignored_node_object->setRole(CreateRoleNameValue(role)); ignored_node_object->setRole(CreateRoleNameValue(role));
if (ax_object && ax_object->IsAXLayoutObject()) { if (ax_object && ax_object->IsAXLayoutObject()) {

@@ -28,7 +28,7 @@ test(function(t) {
// contents. // contents.
assert_equals(axRoot.childrenCount, 1); assert_equals(axRoot.childrenCount, 1);
assert_equals(axRoot.childAtIndex(0).role, 'AXRole: AXGenericContainer'); assert_equals(axRoot.childAtIndex(0).role, 'AXRole: AXGenericContainer');
assert_equals(axParent.childAtIndex(0).role, 'AXRole: AXPresentational'); assert_equals(axParent.childAtIndex(0).role, 'AXRole: AXNone');
}, 'Aria-owns cannot be fooled by pointing it at a presentational node.'); }, 'Aria-owns cannot be fooled by pointing it at a presentational node.');
</script> </script>

@@ -74,7 +74,7 @@ PASS implicitRoleElement.computedRole is "navigation"
PASS roleElement.computedRole is "option" PASS roleElement.computedRole is "option"
PASS implicitRoleElement.computedRole is "option" PASS implicitRoleElement.computedRole is "option"
PASS implicitRoleElement.computedRole is "option" PASS implicitRoleElement.computedRole is "option"
PASS roleElement.computedRole is "presentation" PASS roleElement.computedRole is "none"
PASS roleElement.computedRole is "progressbar" PASS roleElement.computedRole is "progressbar"
PASS implicitRoleElement.computedRole is "progressbar" PASS implicitRoleElement.computedRole is "progressbar"
PASS roleElement.computedRole is "meter" PASS roleElement.computedRole is "meter"

@@ -142,8 +142,8 @@
<option value="2" data-role="option">Second</option> <option value="2" data-role="option">Second</option>
</select> </select>
<div role="presentation">This is presentation</div> <div role="none">This is none/presentation</div>
<nav role="presentation">This is presentation, too</nav> <nav role="none">This is none/presentation, too</nav>
<div role="progressbar">This is a progressbar</div> <div role="progressbar">This is a progressbar</div>
<progress data-role="progressbar" max="100">10</progress> <progress data-role="progressbar" max="100">10</progress>

@@ -53,7 +53,7 @@ AXRole: AXGenericContainer
AXRole: AXGenericContainer AXRole: AXGenericContainer
AXRole: AXStaticText "These two tables have static text roles because they have presentation roles." AXRole: AXStaticText "These two tables have static text roles because they have presentation roles."
AXRole: AXInlineTextBox "These two tables have static text roles because they have presentation roles." AXRole: AXInlineTextBox "These two tables have static text roles because they have presentation roles."
AXRole: AXPresentational AXRole: AXNone
AXRole: AXGenericContainer AXRole: AXGenericContainer
AXRole: AXGenericContainer AXRole: AXGenericContainer
AXRole: AXGenericContainer AXRole: AXGenericContainer
@@ -64,7 +64,7 @@ AXRole: AXGenericContainer
AXRole: AXGenericContainer AXRole: AXGenericContainer
AXRole: AXStaticText "Presentation th" AXRole: AXStaticText "Presentation th"
AXRole: AXInlineTextBox "Presentation th" AXRole: AXInlineTextBox "Presentation th"
AXRole: AXPresentational AXRole: AXNone
AXRole: AXGenericContainer AXRole: AXGenericContainer
AXRole: AXGenericContainer AXRole: AXGenericContainer
AXRole: AXGenericContainer AXRole: AXGenericContainer
@@ -75,7 +75,7 @@ AXRole: AXGenericContainer
AXRole: AXInlineTextBox "The "Presentation th" has a static text role because it has a presentation role." AXRole: AXInlineTextBox "The "Presentation th" has a static text role because it has a presentation role."
AXRole: AXTable AXRole: AXTable
AXRole: AXRowGroup AXRole: AXRowGroup
AXRole: AXPresentational AXRole: AXNone
AXRole: AXGenericContainer AXRole: AXGenericContainer
AXRole: AXStaticText "Presentation th" AXRole: AXStaticText "Presentation th"
AXRole: AXInlineTextBox "Presentation th" AXRole: AXInlineTextBox "Presentation th"
@@ -86,7 +86,7 @@ AXRole: AXGenericContainer
AXRole: AXGenericContainer AXRole: AXGenericContainer
AXRole: AXStaticText "The row for "Explicit th" has a row role even if table has a presentation role because it has an explicit role." AXRole: AXStaticText "The row for "Explicit th" has a row role even if table has a presentation role because it has an explicit role."
AXRole: AXInlineTextBox "The row for "Explicit th" has a row role even if table has a presentation role because it has an explicit role." AXRole: AXInlineTextBox "The row for "Explicit th" has a row role even if table has a presentation role because it has an explicit role."
AXRole: AXPresentational AXRole: AXNone
AXRole: AXGenericContainer AXRole: AXGenericContainer
AXRole: AXRow AXRole: AXRow
AXRole: AXGenericContainer AXRole: AXGenericContainer

@@ -13,8 +13,8 @@ Tests that node without AXNode reports accessibility values.
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }

@@ -3,7 +3,7 @@ Tests that fetching the tree for a node without an AXNode functions correctly.
RootWebArea RootWebArea
main main
article article
*Ignored *none
{ {
domNode : div#hidden domNode : div#hidden
ignored : true ignored : true
@@ -18,8 +18,8 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }

@@ -1,7 +1,7 @@
Tests accessibility values of ignored nodes. Tests accessibility values of ignored nodes.
RootWebArea RootWebArea
*Ignored *none
{ {
domNode : html domNode : html
ignored : true ignored : true
@@ -9,14 +9,14 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
RootWebArea RootWebArea
img img
*Ignored *none
{ {
domNode : svg domNode : svg
ignored : true ignored : true
@@ -35,13 +35,13 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
RootWebArea RootWebArea
*Ignored *none
{ {
domNode : div domNode : div
ignored : true ignored : true
@@ -56,13 +56,13 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
RootWebArea RootWebArea
*Ignored *none
{ {
domNode : div domNode : div
ignored : true ignored : true
@@ -81,13 +81,13 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
RootWebArea RootWebArea
*Ignored *none
{ {
domNode : ol domNode : ol
ignored : true ignored : true
@@ -102,13 +102,13 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
RootWebArea RootWebArea
*Ignored *none
{ {
domNode : li domNode : li
ignored : true ignored : true
@@ -123,8 +123,8 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
@@ -196,7 +196,7 @@ RootWebArea
RootWebArea RootWebArea
LabelText LabelText
*Ignored *none
{ {
domNode : span domNode : span
ignored : true ignored : true
@@ -211,13 +211,13 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
RootWebArea RootWebArea
*Ignored *none
{ {
domNode : div domNode : div
ignored : true ignored : true
@@ -232,13 +232,13 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
RootWebArea RootWebArea
*Ignored *none
{ {
domNode : span domNode : span
ignored : true ignored : true
@@ -253,13 +253,13 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
RootWebArea RootWebArea
*Ignored *none
{ {
domNode : canvas domNode : canvas
ignored : true ignored : true
@@ -274,13 +274,13 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
RootWebArea RootWebArea
*Ignored *none
{ {
domNode : canvas domNode : canvas
ignored : true ignored : true
@@ -295,8 +295,8 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
@@ -417,7 +417,7 @@ RootWebArea
} }
RootWebArea RootWebArea
*Ignored *none
{ {
domNode : button domNode : button
ignored : true ignored : true
@@ -432,13 +432,13 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
RootWebArea RootWebArea
*Ignored *none
{ {
domNode : button domNode : button
ignored : true ignored : true
@@ -458,8 +458,8 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
@@ -506,7 +506,7 @@ RootWebArea
} }
RootWebArea RootWebArea
*Ignored *none
{ {
domNode : div domNode : div
ignored : true ignored : true
@@ -521,8 +521,8 @@ RootWebArea
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }

@@ -17,8 +17,8 @@ Tests accessibility values of ignored nodes in model dialog.
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
{ {

@@ -196,8 +196,8 @@ Tests accessibility values in modal dialog.
] ]
nodeId : <string> nodeId : <string>
role : { role : {
type : internalRole type : role
value : Ignored value : none
} }
} }
{ {

@@ -241,7 +241,6 @@ chrome.automation.RoleType = {
HEADING: 'heading', HEADING: 'heading',
IFRAME: 'iframe', IFRAME: 'iframe',
IFRAME_PRESENTATIONAL: 'iframePresentational', IFRAME_PRESENTATIONAL: 'iframePresentational',
IGNORED: 'ignored',
IMAGE: 'image', IMAGE: 'image',
IME_CANDIDATE: 'imeCandidate', IME_CANDIDATE: 'imeCandidate',
INLINE_TEXT_BOX: 'inlineTextBox', INLINE_TEXT_BOX: 'inlineTextBox',
@@ -274,6 +273,7 @@ chrome.automation.RoleType = {
MENU_LIST_POPUP: 'menuListPopup', MENU_LIST_POPUP: 'menuListPopup',
METER: 'meter', METER: 'meter',
NAVIGATION: 'navigation', NAVIGATION: 'navigation',
NONE: 'none',
NOTE: 'note', NOTE: 'note',
PANE: 'pane', PANE: 'pane',
PARAGRAPH: 'paragraph', PARAGRAPH: 'paragraph',
@@ -283,7 +283,6 @@ chrome.automation.RoleType = {
POP_UP_BUTTON: 'popUpButton', POP_UP_BUTTON: 'popUpButton',
PORTAL: 'portal', PORTAL: 'portal',
PRE: 'pre', PRE: 'pre',
PRESENTATIONAL: 'presentational',
PROGRESS_INDICATOR: 'progressIndicator', PROGRESS_INDICATOR: 'progressIndicator',
RADIO_BUTTON: 'radioButton', RADIO_BUTTON: 'radioButton',
RADIO_GROUP: 'radioGroup', RADIO_GROUP: 'radioGroup',

@@ -338,8 +338,6 @@ const char* ToString(ax::mojom::Role role) {
return "iframe"; return "iframe";
case ax::mojom::Role::kIframePresentational: case ax::mojom::Role::kIframePresentational:
return "iframePresentational"; return "iframePresentational";
case ax::mojom::Role::kIgnored:
return "ignored";
case ax::mojom::Role::kImage: case ax::mojom::Role::kImage:
return "image"; return "image";
case ax::mojom::Role::kImeCandidate: case ax::mojom::Role::kImeCandidate:
@@ -422,8 +420,6 @@ const char* ToString(ax::mojom::Role role) {
return "portal"; return "portal";
case ax::mojom::Role::kPre: case ax::mojom::Role::kPre:
return "pre"; return "pre";
case ax::mojom::Role::kPresentational:
return "presentational";
case ax::mojom::Role::kProgressIndicator: case ax::mojom::Role::kProgressIndicator:
return "progressIndicator"; return "progressIndicator";
case ax::mojom::Role::kRadioButton: case ax::mojom::Role::kRadioButton:

@@ -102,7 +102,7 @@ enum Event {
// //
// Native: this attribute is only used in native UI. // Native: this attribute is only used in native UI.
enum Role { enum Role {
kNone, kNone, // Used for role="none"/"presentation" -- ignored in platform tree.
kAbbr, kAbbr,
kAlert, kAlert,
kAlertDialog, kAlertDialog,
@@ -212,7 +212,6 @@ enum Role {
kHeading, kHeading,
kIframe, kIframe,
kIframePresentational, kIframePresentational,
kIgnored,
kImage, kImage,
kImeCandidate, kImeCandidate,
kInlineTextBox, kInlineTextBox,
@@ -257,7 +256,6 @@ enum Role {
kPopUpButton, kPopUpButton,
kPortal, kPortal,
kPre, kPre,
kPresentational,
kProgressIndicator, kProgressIndicator,
kRadioButton, kRadioButton,
kRadioGroup, kRadioGroup,

@@ -984,8 +984,7 @@ bool AXNodeData::IsSelectable() const {
} }
bool AXNodeData::IsIgnored() const { bool AXNodeData::IsIgnored() const {
return HasState(ax::mojom::State::kIgnored) || return HasState(ax::mojom::State::kIgnored) || role == ax::mojom::Role::kNone;
role == ax::mojom::Role::kIgnored;
} }
bool AXNodeData::IsInvisible() const { bool AXNodeData::IsInvisible() const {

@@ -206,7 +206,6 @@ bool IsControlOnAndroid(const ax::mojom::Role role, bool isFocusable) {
case ax::mojom::Role::kDialog: case ax::mojom::Role::kDialog:
case ax::mojom::Role::kMenu: case ax::mojom::Role::kMenu:
case ax::mojom::Role::kMenuBar: case ax::mojom::Role::kMenuBar:
case ax::mojom::Role::kNone:
case ax::mojom::Role::kTree: case ax::mojom::Role::kTree:
case ax::mojom::Role::kUnknown: case ax::mojom::Role::kUnknown:
return false; return false;
@@ -408,7 +407,6 @@ bool IsPlatformDocument(const ax::mojom::Role role) {
bool IsPresentational(const ax::mojom::Role role) { bool IsPresentational(const ax::mojom::Role role) {
switch (role) { switch (role) {
case ax::mojom::Role::kNone: case ax::mojom::Role::kNone:
case ax::mojom::Role::kPresentational:
return true; return true;
default: default:
return false; return false;
@@ -638,7 +636,6 @@ bool IsStructure(const ax::mojom::Role role) {
case ax::mojom::Role::kApplication: case ax::mojom::Role::kApplication:
case ax::mojom::Role::kArticle: // Subclass of kDocument. case ax::mojom::Role::kArticle: // Subclass of kDocument.
case ax::mojom::Role::kDocument: case ax::mojom::Role::kDocument:
case ax::mojom::Role::kPresentational:
case ax::mojom::Role::kRowGroup: case ax::mojom::Role::kRowGroup:
case ax::mojom::Role::kSplitter: case ax::mojom::Role::kSplitter:
// Dpub roles. // Dpub roles.

@@ -36,7 +36,7 @@ ax::mojom::Role GetInterestingTableRole(unsigned char byte) {
case 10: case 10:
return ax::mojom::Role::kGenericContainer; return ax::mojom::Role::kGenericContainer;
case 11: case 11:
return ax::mojom::Role::kIgnored; return ax::mojom::Role::kNone;
case 12: case 12:
return ax::mojom::Role::kLayoutTable; return ax::mojom::Role::kLayoutTable;
case 13: case 13:

@@ -3503,7 +3503,7 @@ TEST(AXTreeTest, SetSizePosInSetNestedContainer) {
tree_update.nodes[3].id = 4; tree_update.nodes[3].id = 4;
tree_update.nodes[3].role = ax::mojom::Role::kListItem; // 2 of 4 tree_update.nodes[3].role = ax::mojom::Role::kListItem; // 2 of 4
tree_update.nodes[4].id = 5; tree_update.nodes[4].id = 5;
tree_update.nodes[4].role = ax::mojom::Role::kIgnored; tree_update.nodes[4].role = ax::mojom::Role::kNone;
tree_update.nodes[4].child_ids = {6}; tree_update.nodes[4].child_ids = {6};
tree_update.nodes[5].id = 6; tree_update.nodes[5].id = 6;
tree_update.nodes[5].role = ax::mojom::Role::kListItem; // 3 of 4 tree_update.nodes[5].role = ax::mojom::Role::kListItem; // 3 of 4

@@ -2800,8 +2800,6 @@ AtkRole AXPlatformNodeAuraLinux::GetAtkRole() const {
case ax::mojom::Role::kIframe: case ax::mojom::Role::kIframe:
case ax::mojom::Role::kIframePresentational: case ax::mojom::Role::kIframePresentational:
return ATK_ROLE_INTERNAL_FRAME; return ATK_ROLE_INTERNAL_FRAME;
case ax::mojom::Role::kIgnored:
return ATK_ROLE_REDUNDANT_OBJECT;
case ax::mojom::Role::kImage: case ax::mojom::Role::kImage:
return IsImageWithMap() ? ATK_ROLE_IMAGE_MAP : ATK_ROLE_IMAGE; return IsImageWithMap() ? ATK_ROLE_IMAGE_MAP : ATK_ROLE_IMAGE;
case ax::mojom::Role::kInlineTextBox: case ax::mojom::Role::kInlineTextBox:
@@ -3024,7 +3022,6 @@ AtkRole AXPlatformNodeAuraLinux::GetAtkRole() const {
case ax::mojom::Role::kImeCandidate: case ax::mojom::Role::kImeCandidate:
case ax::mojom::Role::kKeyboard: case ax::mojom::Role::kKeyboard:
case ax::mojom::Role::kNone: case ax::mojom::Role::kNone:
case ax::mojom::Role::kPresentational:
return ATK_ROLE_REDUNDANT_OBJECT; return ATK_ROLE_REDUNDANT_OBJECT;
} }
} }

@@ -183,7 +183,7 @@ TEST(AXPlatformNodeBaseTest, InnerTextIgnoresInvisibleAndIgnored) {
SetIsInvisible(&tree, 2, false); SetIsInvisible(&tree, 2, false);
EXPECT_EQ(root->GetInnerText(), u"abde"); EXPECT_EQ(root->GetInnerText(), u"abde");
SetRole(&tree, 2, ax::mojom::Role::kIgnored); SetRole(&tree, 2, ax::mojom::Role::kNone);
EXPECT_EQ(root->GetInnerText(), u"bde"); EXPECT_EQ(root->GetInnerText(), u"bde");
SetRole(&tree, 2, ax::mojom::Role::kStaticText); SetRole(&tree, 2, ax::mojom::Role::kStaticText);
@@ -196,7 +196,7 @@ TEST(AXPlatformNodeBaseTest, InnerTextIgnoresInvisibleAndIgnored) {
SetIsInvisible(&tree, 4, true); SetIsInvisible(&tree, 4, true);
EXPECT_EQ(root->GetInnerText(), u"abde"); EXPECT_EQ(root->GetInnerText(), u"abde");
SetRole(&tree, 4, ax::mojom::Role::kIgnored); SetRole(&tree, 4, ax::mojom::Role::kNone);
EXPECT_EQ(root->GetInnerText(), u"abde"); EXPECT_EQ(root->GetInnerText(), u"abde");
} }
} }

@@ -140,7 +140,6 @@ RoleMap BuildRoleMap() {
{ax::mojom::Role::kHeading, @"AXHeading"}, {ax::mojom::Role::kHeading, @"AXHeading"},
{ax::mojom::Role::kIframe, NSAccessibilityGroupRole}, {ax::mojom::Role::kIframe, NSAccessibilityGroupRole},
{ax::mojom::Role::kIframePresentational, NSAccessibilityGroupRole}, {ax::mojom::Role::kIframePresentational, NSAccessibilityGroupRole},
{ax::mojom::Role::kIgnored, NSAccessibilityUnknownRole},
{ax::mojom::Role::kImage, NSAccessibilityImageRole}, {ax::mojom::Role::kImage, NSAccessibilityImageRole},
{ax::mojom::Role::kInputTime, @"AXTimeField"}, {ax::mojom::Role::kInputTime, @"AXTimeField"},
{ax::mojom::Role::kLabelText, NSAccessibilityGroupRole}, {ax::mojom::Role::kLabelText, NSAccessibilityGroupRole},
@@ -178,7 +177,6 @@ RoleMap BuildRoleMap() {
{ax::mojom::Role::kPopUpButton, NSAccessibilityPopUpButtonRole}, {ax::mojom::Role::kPopUpButton, NSAccessibilityPopUpButtonRole},
{ax::mojom::Role::kPortal, NSAccessibilityButtonRole}, {ax::mojom::Role::kPortal, NSAccessibilityButtonRole},
{ax::mojom::Role::kPre, NSAccessibilityGroupRole}, {ax::mojom::Role::kPre, NSAccessibilityGroupRole},
{ax::mojom::Role::kPresentational, NSAccessibilityGroupRole},
{ax::mojom::Role::kProgressIndicator, {ax::mojom::Role::kProgressIndicator,
NSAccessibilityProgressIndicatorRole}, NSAccessibilityProgressIndicatorRole},
{ax::mojom::Role::kRadioButton, NSAccessibilityRadioButtonRole}, {ax::mojom::Role::kRadioButton, NSAccessibilityRadioButtonRole},

@@ -5599,10 +5599,8 @@ int AXPlatformNodeWin::MSAARole() {
return ROLE_SYSTEM_PANE; return ROLE_SYSTEM_PANE;
case ax::mojom::Role::kImeCandidate: case ax::mojom::Role::kImeCandidate:
case ax::mojom::Role::kIgnored:
case ax::mojom::Role::kKeyboard: case ax::mojom::Role::kKeyboard:
case ax::mojom::Role::kNone: case ax::mojom::Role::kNone:
case ax::mojom::Role::kPresentational:
case ax::mojom::Role::kUnknown: case ax::mojom::Role::kUnknown:
return ROLE_SYSTEM_PANE; return ROLE_SYSTEM_PANE;
} }
@@ -6439,9 +6437,7 @@ std::wstring AXPlatformNodeWin::UIAAriaRole() {
case ax::mojom::Role::kPane: case ax::mojom::Role::kPane:
case ax::mojom::Role::kWindow: case ax::mojom::Role::kWindow:
case ax::mojom::Role::kIgnored:
case ax::mojom::Role::kNone: case ax::mojom::Role::kNone:
case ax::mojom::Role::kPresentational:
case ax::mojom::Role::kUnknown: case ax::mojom::Role::kUnknown:
return L"region"; return L"region";
} }
@@ -7098,11 +7094,9 @@ LONG AXPlatformNodeWin::ComputeUIAControlType() { // NOLINT(runtime/int)
case ax::mojom::Role::kPane: case ax::mojom::Role::kPane:
case ax::mojom::Role::kWindow: case ax::mojom::Role::kWindow:
case ax::mojom::Role::kIgnored:
case ax::mojom::Role::kImeCandidate: case ax::mojom::Role::kImeCandidate:
case ax::mojom::Role::kKeyboard: case ax::mojom::Role::kKeyboard:
case ax::mojom::Role::kNone: case ax::mojom::Role::kNone:
case ax::mojom::Role::kPresentational:
case ax::mojom::Role::kUnknown: case ax::mojom::Role::kUnknown:
return UIA_PaneControlTypeId; return UIA_PaneControlTypeId;
} }

@@ -585,7 +585,7 @@ TEST_F(AXVirtualViewTest, TreeNavigationWithIgnoredVirtualViews) {
virtual_child_2->ChildAtIndex(1)); virtual_child_2->ChildAtIndex(1));
// Try ignoring a node by changing its role, instead of its state. // Try ignoring a node by changing its role, instead of its state.
virtual_child_2->GetCustomData().role = ax::mojom::Role::kIgnored; virtual_child_2->GetCustomData().role = ax::mojom::Role::kNone;
EXPECT_EQ(button_->GetNativeViewAccessible(), virtual_label_->GetParent()); EXPECT_EQ(button_->GetNativeViewAccessible(), virtual_label_->GetParent());
EXPECT_EQ(virtual_label_->GetNativeObject(), virtual_child_1->GetParent()); EXPECT_EQ(virtual_label_->GetNativeObject(), virtual_child_1->GetParent());

@@ -35,7 +35,6 @@ bool IsValidRoleForViews(ax::mojom::Role role) {
case ax::mojom::Role::kDocument: // Used for ARIA role="document". case ax::mojom::Role::kDocument: // Used for ARIA role="document".
case ax::mojom::Role::kIframe: case ax::mojom::Role::kIframe:
case ax::mojom::Role::kIframePresentational: case ax::mojom::Role::kIframePresentational:
case ax::mojom::Role::kNone:
case ax::mojom::Role::kPdfRoot: case ax::mojom::Role::kPdfRoot:
case ax::mojom::Role::kPortal: case ax::mojom::Role::kPortal:
case ax::mojom::Role::kRootWebArea: case ax::mojom::Role::kRootWebArea:

@@ -180,7 +180,7 @@ void ImageView::OnPaint(gfx::Canvas* canvas) {
void ImageView::GetAccessibleNodeData(ui::AXNodeData* node_data) { void ImageView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
const std::u16string& name = GetAccessibleName(); const std::u16string& name = GetAccessibleName();
if (name.empty()) { if (name.empty()) {
node_data->role = ax::mojom::Role::kIgnored; node_data->role = ax::mojom::Role::kNone;
return; return;
} }

@@ -149,7 +149,7 @@ void Link::GetAccessibleNodeData(ui::AXNodeData* node_data) {
Label::GetAccessibleNodeData(node_data); Label::GetAccessibleNodeData(node_data);
// Prevent invisible links from being announced by screen reader. // Prevent invisible links from being announced by screen reader.
node_data->role = node_data->role =
GetText().empty() ? ax::mojom::Role::kIgnored : ax::mojom::Role::kLink; GetText().empty() ? ax::mojom::Role::kNone : ax::mojom::Role::kLink;
} }
void Link::OnFocus() { void Link::OnFocus() {

@@ -295,7 +295,7 @@ void MenuScrollViewContainer::GetAccessibleNodeData(ui::AXNodeData* node_data) {
// number of items inside it, we ignore the MenuScrollViewContainer (which // number of items inside it, we ignore the MenuScrollViewContainer (which
// holds the menu itself: the SubmenuView). // holds the menu itself: the SubmenuView).
#if defined(OS_MAC) #if defined(OS_MAC)
node_data->role = ax::mojom::Role::kIgnored; node_data->role = ax::mojom::Role::kNone;
#else #else
node_data->role = ax::mojom::Role::kMenuBar; node_data->role = ax::mojom::Role::kMenuBar;
#endif #endif

@@ -310,7 +310,7 @@ TabStrip::TabStrip(TabbedPane::Orientation orientation,
} }
SetLayoutManager(std::move(layout)); SetLayoutManager(std::move(layout));
GetViewAccessibility().OverrideRole(ax::mojom::Role::kIgnored); GetViewAccessibility().OverrideRole(ax::mojom::Role::kNone);
// These durations are taken from the Paper Tabs source: // These durations are taken from the Paper Tabs source:
// https://github.com/PolymerElements/paper-tabs/blob/master/paper-tabs.html // https://github.com/PolymerElements/paper-tabs/blob/master/paper-tabs.html

@@ -271,7 +271,7 @@ TEST_F(AXNativeWidgetMacTest, ChildrenAttribute) {
// Check ignored children don't show up in the accessibility tree. // Check ignored children don't show up in the accessibility tree.
widget()->GetContentsView()->AddChildView( widget()->GetContentsView()->AddChildView(
new FlexibleRoleTestView(ax::mojom::Role::kIgnored)); new FlexibleRoleTestView(ax::mojom::Role::kNone));
EXPECT_EQ(kNumChildren, ax_node.accessibilityChildren.count); EXPECT_EQ(kNumChildren, ax_node.accessibilityChildren.count);
} }
@@ -303,7 +303,7 @@ TEST_F(AXNativeWidgetMacTest, ParentAttribute) {
EXPECT_NSEQ(NSAccessibilityGroupRole, ax_parent.accessibilityRole); EXPECT_NSEQ(NSAccessibilityGroupRole, ax_parent.accessibilityRole);
// Test an ignored role parent is skipped in favor of the grandparent. // Test an ignored role parent is skipped in favor of the grandparent.
parent->set_role(ax::mojom::Role::kIgnored); parent->set_role(ax::mojom::Role::kNone);
ASSERT_NSNE(nil, AXParentOf(ax_child)); ASSERT_NSNE(nil, AXParentOf(ax_child));
EXPECT_NSEQ(NSAccessibilityGroupRole, AXParentOf(ax_child).accessibilityRole); EXPECT_NSEQ(NSAccessibilityGroupRole, AXParentOf(ax_child).accessibilityRole);
} }