summaryrefslogtreecommitdiff
path: root/Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp')
-rw-r--r--Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp31
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)