Changeset 157434 in webkit


Ignore:
Timestamp:
Oct 14, 2013 5:23:25 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

AX: fieldset should have GroupRole and legend should be description.
https://bugs.webkit.org/show_bug.cgi?id=122534

Patch by Samuel White <Samuel White> on 2013-10-14
Reviewed by Chris Fleizach.

Source/WebCore:

Changes fieldset to derive AXDescription from legend if one is available. Added
convenience method to AccessibilityObject to fetch element if available.

Test: accessibility/fieldset-element.html

  • accessibility/AccessibilityNodeObject.cpp:

(WebCore::AccessibilityNodeObject::canHaveChildren):
(WebCore::AccessibilityNodeObject::alternativeText):

  • accessibility/AccessibilityObject.cpp:

(WebCore::AccessibilityObject::element):
(WebCore::AccessibilityObject::isARIAHidden):
(WebCore::AccessibilityObject::isDOMHidden):
(WebCore::AccessibilityObject::defaultObjectInclusion):

  • accessibility/AccessibilityObject.h:

(WebCore::AccessibilityObject::isHidden):

  • accessibility/AccessibilitySlider.cpp:

(WebCore::AccessibilitySlider::getAttribute):
(WebCore::AccessibilitySlider::valueForRange):
(WebCore::AccessibilitySlider::maxValueForRange):
(WebCore::AccessibilitySlider::minValueForRange):
(WebCore::AccessibilitySlider::setValue):
(WebCore::AccessibilitySlider::inputElement):

  • accessibility/AccessibilitySlider.h:
  • accessibility/mac/AccessibilityObjectMac.mm:

(WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):

  • html/HTMLFieldSetElement.cpp:

(WebCore::HTMLFieldSetElement::legend):

  • html/HTMLFieldSetElement.h:

LayoutTests:

legend no longer treated as titleUIElement so removing tests that check this functionality.
Added test to check that legend is used as AXDescription of fieldset if present.

  • accessibility/fieldset-element.html: Added.
  • accessibility/hidden-legend-expected.txt: Removed.
  • accessibility/hidden-legend.html: Removed.
  • accessibility/legend.html: Removed.
  • platform/efl/accessibility/legend-expected.txt: Removed.
  • platform/gtk/accessibility/legend-expected.txt: Removed.
  • platform/mac/accessibility/fieldset-element-expected.txt: Added.
  • platform/mac/accessibility/legend-expected.txt: Removed.
  • platform/mac/accessibility/role-subrole-roledescription-expected.txt:
  • platform/mac/accessibility/role-subrole-roledescription.html:
Location:
trunk
Files:
2 added
6 deleted
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r157431 r157434  
     12013-10-14  Samuel White  <samuel_white@apple.com>
     2
     3        AX: fieldset should have GroupRole and legend should be description.
     4        https://bugs.webkit.org/show_bug.cgi?id=122534
     5
     6        Reviewed by Chris Fleizach.
     7
     8        legend no longer treated as titleUIElement so removing tests that check this functionality.
     9        Added test to check that legend is used as AXDescription of fieldset if present.
     10
     11        * accessibility/fieldset-element.html: Added.
     12        * accessibility/hidden-legend-expected.txt: Removed.
     13        * accessibility/hidden-legend.html: Removed.
     14        * accessibility/legend.html: Removed.
     15        * platform/efl/accessibility/legend-expected.txt: Removed.
     16        * platform/gtk/accessibility/legend-expected.txt: Removed.
     17        * platform/mac/accessibility/fieldset-element-expected.txt: Added.
     18        * platform/mac/accessibility/legend-expected.txt: Removed.
     19        * platform/mac/accessibility/role-subrole-roledescription-expected.txt:
     20        * platform/mac/accessibility/role-subrole-roledescription.html:
     21
    1222013-10-14  Ryosuke Niwa  <rniwa@webkit.org>
    223
  • trunk/LayoutTests/platform/mac/accessibility/role-subrole-roledescription-expected.txt

    r154148 r157434  
    116116     
    117117PASS: legend
    118       AXRole: AXGroup
    119       AXSubrole:
    120       AXRoleDescription: group
     118      AXRole:
     119      AXSubrole:
     120      AXRoleDescription:
    121121     
    122122PASS: footer
  • trunk/LayoutTests/platform/mac/accessibility/role-subrole-roledescription.html

    r155282 r157434  
    3636<!-- skipped <embed> -->
    3737<fieldset data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">
    38     <legend data-role="AXGroup" data-subrole="" data-roledescription="group" class="ex">X</legend>
     38    <legend data-role="" data-subrole="" data-roledescription="" class="ex">X</legend>
    3939</fieldset>
    4040<!-- skipped figure/figcaption http://webkit.org/b/108996 -->
  • trunk/Source/WebCore/ChangeLog

    r157432 r157434  
     12013-10-14  Samuel White  <samuel_white@apple.com>
     2
     3        AX: fieldset should have GroupRole and legend should be description.
     4        https://bugs.webkit.org/show_bug.cgi?id=122534
     5
     6        Reviewed by Chris Fleizach.
     7
     8        Changes fieldset to derive AXDescription from legend if one is available. Added
     9        convenience method to AccessibilityObject to fetch element if available.
     10
     11        Test: accessibility/fieldset-element.html
     12
     13        * accessibility/AccessibilityNodeObject.cpp:
     14        (WebCore::AccessibilityNodeObject::canHaveChildren):
     15        (WebCore::AccessibilityNodeObject::alternativeText):
     16        * accessibility/AccessibilityObject.cpp:
     17        (WebCore::AccessibilityObject::element):
     18        (WebCore::AccessibilityObject::isARIAHidden):
     19        (WebCore::AccessibilityObject::isDOMHidden):
     20        (WebCore::AccessibilityObject::defaultObjectInclusion):
     21        * accessibility/AccessibilityObject.h:
     22        (WebCore::AccessibilityObject::isHidden):
     23        * accessibility/AccessibilitySlider.cpp:
     24        (WebCore::AccessibilitySlider::getAttribute):
     25        (WebCore::AccessibilitySlider::valueForRange):
     26        (WebCore::AccessibilitySlider::maxValueForRange):
     27        (WebCore::AccessibilitySlider::minValueForRange):
     28        (WebCore::AccessibilitySlider::setValue):
     29        (WebCore::AccessibilitySlider::inputElement):
     30        * accessibility/AccessibilitySlider.h:
     31        * accessibility/mac/AccessibilityObjectMac.mm:
     32        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
     33        * html/HTMLFieldSetElement.cpp:
     34        (WebCore::HTMLFieldSetElement::legend):
     35        * html/HTMLFieldSetElement.h:
     36
    1372013-10-14  Roger Fong  <roger_fong@apple.com>
    238
  • trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp

    r157231 r157434  
    8989using namespace HTMLNames;
    9090
     91static String accessibleNameForNode(Node*);
     92
    9193AccessibilityNodeObject::AccessibilityNodeObject(Node* node)
    9294    : AccessibilityObject()
     
    395397    case ProgressIndicatorRole:
    396398        return false;
     399    case LegendRole:
     400        if (Element* element = this->element())
     401            return !ancestorsOfType<HTMLFieldSetElement>(element).first();
    397402    default:
    398403        return true;
     
    12511256    if (!node)
    12521257        return;
     1258   
     1259    // The fieldset element derives its alternative text from the first associated legend element if one is available.
     1260    if (isHTMLFieldSetElement(node)) {
     1261        AccessibilityObject* object = axObjectCache()->getOrCreate(toHTMLFieldSetElement(node)->legend());
     1262        if (object && !object->isHidden())
     1263            textOrder.append(AccessibilityText(accessibleNameForNode(object->node()), AlternativeText));
     1264    }
    12531265   
    12541266#if ENABLE(SVG)
  • trunk/Source/WebCore/accessibility/AccessibilityObject.cpp

    r157394 r157434  
    15371537}
    15381538
     1539Element* AccessibilityObject::element() const
     1540{
     1541    Node* node = this->node();
     1542    if (node && node->isElementNode())
     1543        return toElement(node);
     1544    return 0;
     1545}
     1546
    15391547const AtomicString& AccessibilityObject::placeholderValue() const
    15401548{
     
    19962004}
    19972005
    1998 bool AccessibilityObject::ariaIsHidden() const
    1999 {
    2000     if (equalIgnoringCase(getAttribute(aria_hiddenAttr), "true"))
    2001         return true;
    2002    
    2003     for (AccessibilityObject* object = parentObject(); object; object = object->parentObject()) {
     2006// ARIA component of hidden definition.
     2007// http://www.w3.org/TR/wai-aria/terms#def_hidden
     2008bool AccessibilityObject::isARIAHidden() const
     2009{
     2010    for (const AccessibilityObject* object = this; object; object = object->parentObject()) {
    20042011        if (equalIgnoringCase(object->getAttribute(aria_hiddenAttr), "true"))
    20052012            return true;
    20062013    }
    2007    
    20082014    return false;
    20092015}
    20102016
     2017// DOM component of hidden definition.
     2018// http://www.w3.org/TR/wai-aria/terms#def_hidden
     2019bool AccessibilityObject::isDOMHidden() const
     2020{
     2021    RenderObject* renderer = this->renderer();
     2022    if (!renderer)
     2023        return true;
     2024   
     2025    RenderStyle* style = renderer->style();
     2026    return style->display() == NONE || style->visibility() != VISIBLE;
     2027}
     2028
    20112029AccessibilityObjectInclusion AccessibilityObject::defaultObjectInclusion() const
    20122030{
    2013     if (ariaIsHidden())
     2031    if (isARIAHidden())
    20142032        return IgnoreObject;
    20152033   
  • trunk/Source/WebCore/accessibility/AccessibilityObject.h

    r157369 r157434  
    516516    virtual bool canSetExpandedAttribute() const { return false; }
    517517   
     518    Element* element() const;
    518519    virtual Node* node() const { return 0; }
    519520    virtual RenderObject* renderer() const { return 0; }
     
    845846    virtual void mathPrescripts(AccessibilityMathMultiscriptPairs&) { }
    846847    virtual void mathPostscripts(AccessibilityMathMultiscriptPairs&) { }
    847 
     848   
     849    // Visibility.
     850    bool isARIAHidden() const;
     851    bool isDOMHidden() const;
     852    bool isHidden() const { return isARIAHidden() || isDOMHidden(); }
     853   
    848854#if HAVE(ACCESSIBILITY)
    849855#if PLATFORM(GTK) || PLATFORM(EFL)
     
    901907    static bool objectMatchesSearchCriteriaWithResultLimit(AccessibilityObject*, AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
    902908    virtual AccessibilityRole buttonRoleType() const;
    903     bool ariaIsHidden() const;
    904909    bool isOnscreen() const;
    905910   
  • trunk/Source/WebCore/accessibility/AccessibilitySlider.cpp

    r157353 r157434  
    100100const AtomicString& AccessibilitySlider::getAttribute(const QualifiedName& attribute) const
    101101{
    102     return element()->getAttribute(attribute);
     102    return inputElement()->getAttribute(attribute);
    103103}
    104104   
     
    116116float AccessibilitySlider::valueForRange() const
    117117{
    118     return element()->value().toFloat();
     118    return inputElement()->value().toFloat();
    119119}
    120120
    121121float AccessibilitySlider::maxValueForRange() const
    122122{
    123     return static_cast<float>(element()->maximum());
     123    return static_cast<float>(inputElement()->maximum());
    124124}
    125125
    126126float AccessibilitySlider::minValueForRange() const
    127127{
    128     return static_cast<float>(element()->minimum());
     128    return static_cast<float>(inputElement()->minimum());
    129129}
    130130
    131131void AccessibilitySlider::setValue(const String& value)
    132132{
    133     HTMLInputElement* input = element();
     133    HTMLInputElement* input = inputElement();
    134134   
    135135    if (input->value() == value)
     
    142142}
    143143
    144 HTMLInputElement* AccessibilitySlider::element() const
     144HTMLInputElement* AccessibilitySlider::inputElement() const
    145145{
    146146    return toHTMLInputElement(m_renderer->node());
  • trunk/Source/WebCore/accessibility/AccessibilitySlider.h

    r157044 r157434  
    4747
    4848private:
    49     HTMLInputElement* element() const;
     49    HTMLInputElement* inputElement() const;
    5050    virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const OVERRIDE;
    5151
  • trunk/Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm

    r143142 r157434  
    2626#import "config.h"
    2727#import "AccessibilityObject.h"
     28#import "ElementAncestorIterator.h"
     29#import "HTMLFieldSetElement.h"
     30#import "RenderObject.h"
    2831
    2932#if HAVE(ACCESSIBILITY)
     
    8083        return IgnoreObject;
    8184   
     85    if (RenderObject* renderer = this->renderer()) {
     86        // The legend element is ignored if it lives inside of a fieldset element that uses it to generate alternative text.
     87        if (renderer->isLegend()) {
     88            Element* element = this->element();
     89            if (element && ancestorsOfType<HTMLFieldSetElement>(element).first())
     90                return IgnoreObject;
     91        }
     92    }
     93   
    8294    return DefaultBehavior;
    8395}
  • trunk/Source/WebCore/html/HTMLFieldSetElement.cpp

    r157375 r157434  
    8989}
    9090
    91 const HTMLLegendElement* HTMLFieldSetElement::legend() const
     91HTMLLegendElement* HTMLFieldSetElement::legend() const
    9292{
    93     return descendantsOfType<HTMLLegendElement>(this).first();
     93    return const_cast<HTMLLegendElement*>(descendantsOfType<HTMLLegendElement>(this).first());
    9494}
    9595
  • trunk/Source/WebCore/html/HTMLFieldSetElement.h

    r157385 r157434  
    3636    static PassRefPtr<HTMLFieldSetElement> create(const QualifiedName&, Document&, HTMLFormElement*);
    3737
    38     const HTMLLegendElement* legend() const;
     38    HTMLLegendElement* legend() const;
    3939    PassRefPtr<HTMLCollection> elements();
    4040
Note: See TracChangeset for help on using the changeset viewer.