diff options
Diffstat (limited to 'Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp')
-rw-r--r-- | Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp b/Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp index f3a13d918..19485396f 100644 --- a/Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp +++ b/Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp @@ -21,6 +21,7 @@ #include "config.h" #include "AccessibilityProgressIndicator.h" +#include "AXObjectCache.h" #include "FloatConversion.h" #include "HTMLMeterElement.h" #include "HTMLNames.h" @@ -60,6 +61,36 @@ bool AccessibilityProgressIndicator::computeAccessibilityIsIgnored() const return accessibilityIsIgnoredByDefault(); } +String AccessibilityProgressIndicator::valueDescription() const +{ + // If the author has explicitly provided a value through aria-valuetext, use it. + String description = AccessibilityRenderObject::valueDescription(); + if (!description.isEmpty()) + return description; + +#if ENABLE(METER_ELEMENT) + if (!m_renderer->isMeter()) + return String(); + + HTMLMeterElement* meter = meterElement(); + if (!meter) + return String(); + + // The HTML spec encourages authors to include a textual representation of the meter's state in + // the element's contents. We'll fall back on that if there is not a more accessible alternative. + AccessibilityObject* axMeter = axObjectCache()->getOrCreate(meter); + if (is<AccessibilityNodeObject>(axMeter)) { + description = downcast<AccessibilityNodeObject>(axMeter)->accessibilityDescriptionForChildren(); + if (!description.isEmpty()) + return description; + } + + return meter->textContent(); +#endif + + return String(); +} + float AccessibilityProgressIndicator::valueForRange() const { if (!m_renderer) |