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() { ...@@ -163,7 +163,9 @@ NSArray* BuildAllAttributesArray() {
@"AXARIARelevant", @"AXARIARelevant",
NSAccessibilityColumnIndexRangeAttribute, NSAccessibilityColumnIndexRangeAttribute,
NSAccessibilityEnabledAttribute, NSAccessibilityEnabledAttribute,
NSAccessibilityExpandedAttribute,
NSAccessibilityFocusedAttribute, NSAccessibilityFocusedAttribute,
@"AXGrabbed",
NSAccessibilityIndexAttribute, NSAccessibilityIndexAttribute,
@"AXLoaded", @"AXLoaded",
@"AXLoadingProcess", @"AXLoadingProcess",
...@@ -179,7 +181,6 @@ NSArray* BuildAllAttributesArray() { ...@@ -179,7 +181,6 @@ NSArray* BuildAllAttributesArray() {
NSAccessibilityVisibleChildrenAttribute, NSAccessibilityVisibleChildrenAttribute,
@"AXVisited", @"AXVisited",
@"AXLinkedUIElements", @"AXLinkedUIElements",
NSAccessibilityExpandedAttribute,
nil]; nil];
return [array retain]; return [array retain];
} }
......
...@@ -109,6 +109,7 @@ NSDictionary* attributeToMethodNameMap = nil; ...@@ -109,6 +109,7 @@ NSDictionary* attributeToMethodNameMap = nil;
{ @"AXARIABusy", @"ariaBusy" }, { @"AXARIABusy", @"ariaBusy" },
{ @"AXARIALive", @"ariaLive" }, { @"AXARIALive", @"ariaLive" },
{ @"AXARIARelevant", @"ariaRelevant" }, { @"AXARIARelevant", @"ariaRelevant" },
{ @"AXGrabbed", @"grabbed" },
{ @"AXInvalid", @"invalid" }, { @"AXInvalid", @"invalid" },
{ @"AXLoaded", @"loaded" }, { @"AXLoaded", @"loaded" },
{ @"AXLoadingProgress", @"loadingProgress" }, { @"AXLoadingProgress", @"loadingProgress" },
...@@ -343,6 +344,11 @@ NSDictionary* attributeToMethodNameMap = nil; ...@@ -343,6 +344,11 @@ NSDictionary* attributeToMethodNameMap = nil;
return ret; return ret;
} }
- (NSNumber*)grabbed {
bool boolValue = browserAccessibility_->GetBoolAttribute(ui::AX_ATTR_GRABBED);
return [NSNumber numberWithBool:boolValue];
}
- (id)header { - (id)header {
int headerElementId = -1; int headerElementId = -1;
if ([self internalRole] == ui::AX_ROLE_TABLE || if ([self internalRole] == ui::AX_ROLE_TABLE ||
...@@ -1386,8 +1392,14 @@ NSDictionary* attributeToMethodNameMap = nil; ...@@ -1386,8 +1392,14 @@ NSDictionary* attributeToMethodNameMap = nil;
@"AXARIABusy", @"AXARIABusy",
nil]]; 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) || if (GetState(browserAccessibility_, ui::AX_STATE_EXPANDED) ||
GetState(browserAccessibility_, ui::AX_STATE_COLLAPSED)) { GetState(browserAccessibility_, ui::AX_STATE_COLLAPSED)) {
[ret addObjectsFromArray:[NSArray arrayWithObjects: [ret addObjectsFromArray:[NSArray arrayWithObjects:
......
...@@ -3001,6 +3001,9 @@ void BrowserAccessibilityWin::OnUpdateFinished() { ...@@ -3001,6 +3001,9 @@ void BrowserAccessibilityWin::OnUpdateFinished() {
BoolAttributeToIA2(ui::AX_ATTR_LIVE_ATOMIC, "atomic"); BoolAttributeToIA2(ui::AX_ATTR_LIVE_ATOMIC, "atomic");
BoolAttributeToIA2(ui::AX_ATTR_LIVE_BUSY, "busy"); BoolAttributeToIA2(ui::AX_ATTR_LIVE_BUSY, "busy");
// Expose aria-grabbed attributes.
BoolAttributeToIA2(ui::AX_ATTR_GRABBED, "grabbed");
// Expose container live region attributes. // Expose container live region attributes.
StringAttributeToIA2(ui::AX_ATTR_CONTAINER_LIVE_STATUS, StringAttributeToIA2(ui::AX_ATTR_CONTAINER_LIVE_STATUS,
"container-live"); "container-live");
......
...@@ -262,6 +262,10 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaForm) { ...@@ -262,6 +262,10 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaForm) {
RunAriaTest(FILE_PATH_LITERAL("aria-form.html")); 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) { IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaImg) {
RunAriaTest(FILE_PATH_LITERAL("aria-img.html")); RunAriaTest(FILE_PATH_LITERAL("aria-img.html"));
} }
......
...@@ -378,6 +378,12 @@ void BlinkAXTreeSource::SerializeNode(blink::WebAXObject src, ...@@ -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. // ARIA role.
if (element.hasAttribute("role")) { if (element.hasAttribute("role")) {
dst->AddStringAttribute(ui::AX_ATTR_ROLE, dst->AddStringAttribute(ui::AX_ATTR_ROLE,
......
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
@WIN-ALLOW:HASPOPUP* @WIN-ALLOW:HASPOPUP*
--> -->
<ul role="menu" style="list-style-type: none"> <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="false">New</li>
<li role="menuitem" aria-haspopup="true" aria-expanded="true">Open</span> <li role="menuitem" aria-haspopup="true" aria-expanded="true">Open</li>
<li role="menuitem" aria-expanded="false">Save</span> <li role="menuitem" aria-expanded="false">Save</li>
<li role="menuitem" aria-expanded="true">Quit</span> <li role="menuitem" aria-expanded="true">Quit</li>
</ul> </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 @@ ...@@ -345,7 +345,11 @@
// Set if this node is the host of an external AXTree, for // 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 // example a web view that's a child of a native view, or a
// web iframe that's the child of another web frame. // 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 { [cpp_enum_prefix_override="ax_attr"] enum AXIntListAttribute {
......
...@@ -383,6 +383,9 @@ std::string AXNodeData::ToString() const { ...@@ -383,6 +383,9 @@ std::string AXNodeData::ToString() const {
case AX_ATTR_IS_AX_TREE_HOST: case AX_ATTR_IS_AX_TREE_HOST:
result += " is_ax_tree_host=" + value; result += " is_ax_tree_host=" + value;
break; break;
case AX_ATTR_GRABBED:
result += " grabbed=" + value;
break;
case AX_BOOL_ATTRIBUTE_NONE: case AX_BOOL_ATTRIBUTE_NONE:
break; 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