Commit 53f2a6ca authored by je_julie.kim's avatar je_julie.kim Committed by Commit bot

Add conversion rule for aria-grabbed attributes.

This patch adds conversion rule for aria-grabbed attribute and
exposes it only when it's defined.

The related patch is
https://codereview.chromium.org/736943002/

BUG=98817

Review URL: https://codereview.chromium.org/736023002

Cr-Commit-Position: refs/heads/master@{#313349}
parent 210807b6
......@@ -163,7 +163,9 @@ NSArray* BuildAllAttributesArray() {
@"AXARIARelevant",
NSAccessibilityColumnIndexRangeAttribute,
NSAccessibilityEnabledAttribute,
NSAccessibilityExpandedAttribute,
NSAccessibilityFocusedAttribute,
@"AXGrabbed",
NSAccessibilityIndexAttribute,
@"AXLoaded",
@"AXLoadingProcess",
......@@ -179,7 +181,6 @@ NSArray* BuildAllAttributesArray() {
NSAccessibilityVisibleChildrenAttribute,
@"AXVisited",
@"AXLinkedUIElements",
NSAccessibilityExpandedAttribute,
nil];
return [array retain];
}
......
......@@ -109,6 +109,7 @@ NSDictionary* attributeToMethodNameMap = nil;
{ @"AXARIABusy", @"ariaBusy" },
{ @"AXARIALive", @"ariaLive" },
{ @"AXARIARelevant", @"ariaRelevant" },
{ @"AXGrabbed", @"grabbed" },
{ @"AXInvalid", @"invalid" },
{ @"AXLoaded", @"loaded" },
{ @"AXLoadingProgress", @"loadingProgress" },
......@@ -343,6 +344,11 @@ NSDictionary* attributeToMethodNameMap = nil;
return ret;
}
- (NSNumber*)grabbed {
bool boolValue = browserAccessibility_->GetBoolAttribute(ui::AX_ATTR_GRABBED);
return [NSNumber numberWithBool:boolValue];
}
- (id)header {
int headerElementId = -1;
if ([self internalRole] == ui::AX_ROLE_TABLE ||
......@@ -1386,8 +1392,14 @@ NSDictionary* attributeToMethodNameMap = nil;
@"AXARIABusy",
nil]];
}
// Add aria-grabbed attribute only if it has true.
if (browserAccessibility_->HasBoolAttribute(ui::AX_ATTR_GRABBED)) {
[ret addObjectsFromArray:[NSArray arrayWithObjects:
@"AXGrabbed",
nil]];
}
//Add expanded attribute only if it has expanded or collapsed state.
// Add expanded attribute only if it has expanded or collapsed state.
if (GetState(browserAccessibility_, ui::AX_STATE_EXPANDED) ||
GetState(browserAccessibility_, ui::AX_STATE_COLLAPSED)) {
[ret addObjectsFromArray:[NSArray arrayWithObjects:
......
......@@ -3001,6 +3001,9 @@ void BrowserAccessibilityWin::OnUpdateFinished() {
BoolAttributeToIA2(ui::AX_ATTR_LIVE_ATOMIC, "atomic");
BoolAttributeToIA2(ui::AX_ATTR_LIVE_BUSY, "busy");
// Expose aria-grabbed attributes.
BoolAttributeToIA2(ui::AX_ATTR_GRABBED, "grabbed");
// Expose container live region attributes.
StringAttributeToIA2(ui::AX_ATTR_CONTAINER_LIVE_STATUS,
"container-live");
......
......@@ -262,6 +262,10 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaForm) {
RunAriaTest(FILE_PATH_LITERAL("aria-form.html"));
}
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaGrabbed) {
RunAriaTest(FILE_PATH_LITERAL("aria-grabbed.html"));
}
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaImg) {
RunAriaTest(FILE_PATH_LITERAL("aria-img.html"));
}
......
......@@ -378,6 +378,12 @@ void BlinkAXTreeSource::SerializeNode(blink::WebAXObject src,
}
}
blink::WebAXOptionalBool optionalBool = src.isAriaGrabbed();
if (optionalBool == blink::WebAXOptionalBoolFalse)
dst->AddBoolAttribute(ui::AX_ATTR_GRABBED, false);
else if (optionalBool == blink::WebAXOptionalBoolTrue)
dst->AddBoolAttribute(ui::AX_ATTR_GRABBED, true);
// ARIA role.
if (element.hasAttribute("role")) {
dst->AddStringAttribute(ui::AX_ATTR_ROLE,
......
......@@ -5,8 +5,8 @@
@WIN-ALLOW:HASPOPUP*
-->
<ul role="menu" style="list-style-type: none">
<li role="menuitem" aria-haspopup="true" aria-expanded="false">New</span>
<li role="menuitem" aria-haspopup="true" aria-expanded="true">Open</span>
<li role="menuitem" aria-expanded="false">Save</span>
<li role="menuitem" aria-expanded="true">Quit</span>
<li role="menuitem" aria-haspopup="true" aria-expanded="false">New</li>
<li role="menuitem" aria-haspopup="true" aria-expanded="true">Open</li>
<li role="menuitem" aria-expanded="false">Save</li>
<li role="menuitem" aria-expanded="true">Quit</li>
</ul>
\ No newline at end of file
android.webkit.WebView focusable focused scrollable
android.widget.ListView collection hierarchical item_count=3 row_count=3
android.view.View collection_item name='grabbed-true'
android.view.View clickable name='•'
android.view.View clickable name='grabbed-true'
android.widget.Image clickable name='blue'
android.view.View collection_item name='grabbed-false' item_index=1 row_index=1
android.view.View clickable name='•'
android.view.View clickable name='grabbed-false'
android.widget.Image clickable name='blue'
android.view.View collection_item name='grabbed-undefined' item_index=2 row_index=2
android.view.View clickable name='•'
android.view.View clickable name='grabbed-undefined'
android.widget.Image clickable name='blue'
AXWebArea
AXList
AXGroup AXTitle='grabbed-true ' AXGrabbed='1'
AXListMarker AXValue='•'
AXStaticText AXValue='grabbed-true '
AXImage
AXGroup AXTitle='grabbed-false ' AXGrabbed='0'
AXListMarker AXValue='•'
AXStaticText AXValue='grabbed-false '
AXImage
AXGroup AXTitle='grabbed-undefined '
AXListMarker AXValue='•'
AXStaticText AXValue='grabbed-undefined '
AXImage
ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE
ROLE_SYSTEM_LIST READONLY
ROLE_SYSTEM_LISTITEM name='grabbed-true ' READONLY grabbed:true
ROLE_SYSTEM_STATICTEXT name='•'
ROLE_SYSTEM_STATICTEXT name='grabbed-true '
ROLE_SYSTEM_GRAPHIC READONLY
ROLE_SYSTEM_LISTITEM name='grabbed-false ' READONLY grabbed:false
ROLE_SYSTEM_STATICTEXT name='•'
ROLE_SYSTEM_STATICTEXT name='grabbed-false '
ROLE_SYSTEM_GRAPHIC READONLY
ROLE_SYSTEM_LISTITEM name='grabbed-undefined ' READONLY
ROLE_SYSTEM_STATICTEXT name='•'
ROLE_SYSTEM_STATICTEXT name='grabbed-undefined '
ROLE_SYSTEM_GRAPHIC READONLY
\ No newline at end of file
<!--
@MAC-ALLOW:AXGrabbed*
@WIN-ALLOW:grabbed*
-->
<ul>
<li aria-grabbed="true">grabbed-true
<img src="blue.png">
</li>
<li aria-grabbed="false">grabbed-false
<img src="blue.png">
</li>
<li>grabbed-undefined
<img src="blue.png">
</li>
</ul>
\ No newline at end of file
......@@ -345,7 +345,11 @@
// Set if this node is the host of an external AXTree, for
// example a web view that's a child of a native view, or a
// web iframe that's the child of another web frame.
is_ax_tree_host
is_ax_tree_host,
// Set if this node has been selected for dragging in
// a drag-n-drop operation.
grabbed
};
[cpp_enum_prefix_override="ax_attr"] enum AXIntListAttribute {
......
......@@ -383,6 +383,9 @@ std::string AXNodeData::ToString() const {
case AX_ATTR_IS_AX_TREE_HOST:
result += " is_ax_tree_host=" + value;
break;
case AX_ATTR_GRABBED:
result += " grabbed=" + value;
break;
case AX_BOOL_ATTRIBUTE_NONE:
break;
}
......
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