Skip to content

Commit

Permalink
Merge r180621 - AX: Implement support for ARIA 1.1 'searchbox' role
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=142004

Reviewed by Chris Fleizach.

Source/WebCore:

Add a new accessible SearchFieldRole to handle both the ARIA role
and the "search" input type.

No new tests. Instead, added a new test case to roles-exposed.html
for the mapping, and updated roles-computedRoleString.html because
there is now a one-to-one mapping between the "search" input type
and an ARIA role.

* accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::determineAccessibilityRole):
(WebCore::AccessibilityNodeObject::isSearchField):
* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::isARIATextControl):
(WebCore::AccessibilityObject::isARIAInput):
(WebCore::initializeRoleMap):
* accessibility/AccessibilityObject.h:
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::determineAccessibilityRole):
* accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
(atkRole):
* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper accessibilityCanFuzzyHitTest]):
(-[WebAccessibilityObjectWrapper accessibilityTraits]):
(-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(createAccessibilityRoleMap):

LayoutTests:

* accessibility/roles-computedRoleString-expected.txt: Updated for new role.
* accessibility/roles-computedRoleString.html: Updated for new role.
* accessibility/roles-exposed.html: New test case added.
* platform/efl/accessibility/roles-exposed-expected.txt: Updated for new test case.
* platform/gtk/accessibility/roles-exposed-expected.txt: Updated for new test case.
* platform/mac-mavericks/accessibility/roles-exposed-expected.txt: Updated for new test case.
* platform/mac/accessibility/roles-exposed-expected.txt: Updated for new test case.
  • Loading branch information
joanmarie authored and carlosgcampos committed Mar 1, 2015
1 parent 0cb32b9 commit ff58dcf
Show file tree
Hide file tree
Showing 16 changed files with 86 additions and 9 deletions.
15 changes: 15 additions & 0 deletions LayoutTests/ChangeLog
@@ -1,3 +1,18 @@
2015-02-25 Joanmarie Diggs <jdiggs@igalia.com>

AX: Implement support for ARIA 1.1 'searchbox' role
https://bugs.webkit.org/show_bug.cgi?id=142004

Reviewed by Chris Fleizach.

* accessibility/roles-computedRoleString-expected.txt: Updated for new role.
* accessibility/roles-computedRoleString.html: Updated for new role.
* accessibility/roles-exposed.html: New test case added.
* platform/efl/accessibility/roles-exposed-expected.txt: Updated for new test case.
* platform/gtk/accessibility/roles-exposed-expected.txt: Updated for new test case.
* platform/mac-mavericks/accessibility/roles-exposed-expected.txt: Updated for new test case.
* platform/mac/accessibility/roles-exposed-expected.txt: Updated for new test case.

2015-02-24 Joanmarie Diggs <jdiggs@igalia.com>

AX: Implement support for ARIA 1.1 'switch' role
Expand Down
Expand Up @@ -35,7 +35,7 @@ PASS: input[type='password'] -> .
PASS: input[type='radio'] -> radio.
PASS: input[type='range'] -> slider.
PASS: input[type='reset'] -> button.
PASS: input[type='search'] -> .
PASS: input[type='search'] -> searchbox.
PASS: input[type='submit'] -> button.
PASS: input[type='tel'] -> .
PASS: input[type='text'] -> .
Expand Down
2 changes: 1 addition & 1 deletion LayoutTests/accessibility/roles-computedRoleString.html
Expand Up @@ -45,7 +45,7 @@ <h5 data-role="heading" class="ex">X</h6>
<input type="radio" data-role="radio" class="ex" data-note="[type='radio']">
<input type="range" data-role="slider" class="ex" data-note="[type='range']">
<input type="reset" data-role="button" class="ex" data-note="[type='reset']">
<input type="search" value="X" data-role="" class="ex" data-note="[type='search']">
<input type="search" value="X" data-role="searchbox" class="ex" data-note="[type='search']">
<input type="submit" data-role="button" class="ex" data-note="[type='submit']">
<input type="tel" value="X" data-role="" class="ex" data-note="[type='tel']">
<input type="text" value="X" data-role="" class="ex" data-note="[type='text']">
Expand Down
1 change: 1 addition & 0 deletions LayoutTests/accessibility/roles-exposed.html
Expand Up @@ -300,6 +300,7 @@ <h6 data-platform="atk,mac" class="ex">X</h6>
<div role="region" data-platform="atk,mac" class="ex">X</div>
<div role="scrollbar" data-platform="atk,mac" class="ex">X</div>
<div role="search" data-platform="atk,mac" class="ex">X</div>
<div role="searchbox" data-platform="atk,mac" class="ex">X</div>
<div role="separator" data-platform="atk,mac" class="ex">X</div>
<div role="slider" data-platform="atk,mac" class="ex">X</div>
<div role="spinbutton" data-platform="atk,mac" class="ex">X</div>
Expand Down
Expand Up @@ -631,6 +631,9 @@ div[role=scrollbar]
div[role=search]
AXRole: AXLandmarkSearch

div[role=searchbox]
AXRole: AXTextField

div[role=separator]
AXRole: AXSeparator

Expand Down
Expand Up @@ -631,6 +631,9 @@ div[role=scrollbar]
div[role=search]
AXRole: AXLandmarkSearch

div[role=searchbox]
AXRole: AXTextField

div[role=separator]
AXRole: AXSeparator

Expand Down
Expand Up @@ -1049,6 +1049,11 @@ div[role=search]
AXSubrole: AXLandmarkSearch
AXRoleDescription: search

div[role=searchbox]
AXRole: AXTextField
AXSubrole: AXSearchField
AXRoleDescription: search text field

div[role=separator]
AXRole: AXSplitter
AXSubrole:
Expand Down
Expand Up @@ -1049,6 +1049,11 @@ div[role=search]
AXSubrole: AXLandmarkSearch
AXRoleDescription: search

div[role=searchbox]
AXRole: AXTextField
AXSubrole: AXSearchField
AXRoleDescription: search text field

div[role=separator]
AXRole: AXSplitter
AXSubrole:
Expand Down
34 changes: 34 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,37 @@
2015-02-25 Joanmarie Diggs <jdiggs@igalia.com>

AX: Implement support for ARIA 1.1 'searchbox' role
https://bugs.webkit.org/show_bug.cgi?id=142004

Reviewed by Chris Fleizach.

Add a new accessible SearchFieldRole to handle both the ARIA role
and the "search" input type.

No new tests. Instead, added a new test case to roles-exposed.html
for the mapping, and updated roles-computedRoleString.html because
there is now a one-to-one mapping between the "search" input type
and an ARIA role.

* accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::determineAccessibilityRole):
(WebCore::AccessibilityNodeObject::isSearchField):
* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::isARIATextControl):
(WebCore::AccessibilityObject::isARIAInput):
(WebCore::initializeRoleMap):
* accessibility/AccessibilityObject.h:
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::determineAccessibilityRole):
* accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
(atkRole):
* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper accessibilityCanFuzzyHitTest]):
(-[WebAccessibilityObjectWrapper accessibilityTraits]):
(-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(createAccessibilityRoleMap):

2015-02-24 Joanmarie Diggs <jdiggs@igalia.com>

AX: Implement support for ARIA 1.1 'switch' role
Expand Down
8 changes: 5 additions & 3 deletions Source/WebCore/accessibility/AccessibilityNodeObject.cpp
Expand Up @@ -302,6 +302,8 @@ AccessibilityRole AccessibilityNodeObject::determineAccessibilityRole()
return SliderRole;
if (input.isInputTypeHidden())
return IgnoredRole;
if (input.isSearchField())
return SearchFieldRole;

#if ENABLE(INPUT_TYPE_COLOR)
const AtomicString& type = input.getAttribute(typeAttr);
Expand Down Expand Up @@ -485,13 +487,13 @@ bool AccessibilityNodeObject::isSearchField() const
if (!node)
return false;

if (roleValue() == SearchFieldRole)
return true;

HTMLInputElement* inputElement = node->toInputElement();
if (!inputElement)
return false;

if (inputElement->isSearchField())
return true;

// Some websites don't label their search fields as such. However, they will
// use the word "search" in either the form or input type. This won't catch every case,
// but it will catch google.com for example.
Expand Down
5 changes: 3 additions & 2 deletions Source/WebCore/accessibility/AccessibilityObject.cpp
Expand Up @@ -386,7 +386,7 @@ bool AccessibilityObject::isTextControl() const

bool AccessibilityObject::isARIATextControl() const
{
return ariaRoleAttribute() == TextAreaRole || ariaRoleAttribute() == TextFieldRole;
return ariaRoleAttribute() == TextAreaRole || ariaRoleAttribute() == TextFieldRole || ariaRoleAttribute() == SearchFieldRole;
}

bool AccessibilityObject::isLandmark() const
Expand Down Expand Up @@ -779,7 +779,7 @@ bool AccessibilityObject::hasAttributesRequiredForInclusion() const

bool AccessibilityObject::isARIAInput(AccessibilityRole ariaRole)
{
return ariaRole == RadioButtonRole || ariaRole == CheckBoxRole || ariaRole == TextFieldRole || ariaRole == SwitchRole;
return ariaRole == RadioButtonRole || ariaRole == CheckBoxRole || ariaRole == TextFieldRole || ariaRole == SwitchRole || ariaRole == SearchFieldRole;
}

bool AccessibilityObject::isARIAControl(AccessibilityRole ariaRole)
Expand Down Expand Up @@ -1912,6 +1912,7 @@ static void initializeRoleMap()
{ "row", RowRole },
{ "scrollbar", ScrollBarRole },
{ "search", LandmarkSearchRole },
{ "searchbox", SearchFieldRole },
{ "separator", SplitterRole },
{ "slider", SliderRole },
{ "spinbutton", SpinButtonRole },
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/accessibility/AccessibilityObject.h
Expand Up @@ -180,6 +180,7 @@ enum AccessibilityRole {
RulerMarkerRole,
ScrollAreaRole,
ScrollBarRole,
SearchFieldRole,
SheetRole,
SliderRole,
SliderThumbRole,
Expand Down
6 changes: 4 additions & 2 deletions Source/WebCore/accessibility/AccessibilityRenderObject.cpp
Expand Up @@ -2484,8 +2484,10 @@ AccessibilityRole AccessibilityRenderObject::determineAccessibilityRole()
if (cssBox && cssBox->isRenderView())
return WebAreaRole;

if (cssBox && cssBox->isTextField())
return TextFieldRole;
if (cssBox && cssBox->isTextField()) {
if (is<HTMLInputElement>(node))
return downcast<HTMLInputElement>(*node).isSearchField() ? SearchFieldRole : TextFieldRole;
}

if (cssBox && cssBox->isTextArea())
return TextAreaRole;
Expand Down
Expand Up @@ -524,6 +524,7 @@ static AtkRole atkRole(AccessibilityObject* coreObject)
return ATK_ROLE_PAGE_TAB_LIST;
case TextFieldRole:
case TextAreaRole:
case SearchFieldRole:
return ATK_ROLE_ENTRY;
case StaticTextRole:
return ATK_ROLE_TEXT;
Expand Down
Expand Up @@ -297,6 +297,7 @@ - (BOOL)accessibilityCanFuzzyHitTest
case PopUpButtonRole:
case RadioButtonRole:
case ScrollBarRole:
case SearchFieldRole:
case SliderRole:
case StaticTextRole:
case SwitchRole:
Expand Down Expand Up @@ -543,6 +544,7 @@ - (uint64_t)accessibilityTraits
if (m_object->isPasswordField())
traits |= [self _axSecureTextFieldTrait];
FALLTHROUGH;
case SearchFieldRole:
case TextAreaRole:
traits |= [self _axTextEntryTrait];
if (m_object->isFocused())
Expand Down Expand Up @@ -648,6 +650,7 @@ - (BOOL)determineIsAccessibilityElement
case DocumentMathRole:
case HorizontalRuleRole:
case SwitchRole:
case SearchFieldRole:
return true;
case StaticTextRole:
{
Expand Down
Expand Up @@ -1944,6 +1944,7 @@ - (NSValue *)position
{ HorizontalRuleRole, NSAccessibilitySplitterRole },
{ BlockquoteRole, NSAccessibilityGroupRole },
{ SwitchRole, NSAccessibilityCheckBoxRole },
{ SearchFieldRole, NSAccessibilityTextFieldRole },
};
AccessibilityRoleMap& roleMap = *new AccessibilityRoleMap;

Expand Down

0 comments on commit ff58dcf

Please sign in to comment.