Diff
Modified: trunk/LayoutTests/ChangeLog (149154 => 149155)
--- trunk/LayoutTests/ChangeLog 2013-04-25 23:10:41 UTC (rev 149154)
+++ trunk/LayoutTests/ChangeLog 2013-04-25 23:33:23 UTC (rev 149155)
@@ -1,3 +1,15 @@
+2013-04-25 Chris Fleizach <[email protected]>
+
+ <meter> element not exposed to accessibility
+ https://bugs.webkit.org/show_bug.cgi?id=109023
+
+ Reviewed by Tim Horton.
+
+ * accessibility/meter-element-expected.txt: Added.
+ * accessibility/meter-element.html: Added.
+ * platform/mac/accessibility/role-subrole-roledescription-expected.txt:
+ * platform/mac/accessibility/role-subrole-roledescription.html:
+
2013-04-25 Roman Zhuykov <[email protected]>
Arithmetic operations with negative zero should be optimized correclty.
Added: trunk/LayoutTests/accessibility/meter-element-expected.txt (0 => 149155)
--- trunk/LayoutTests/accessibility/meter-element-expected.txt (rev 0)
+++ trunk/LayoutTests/accessibility/meter-element-expected.txt 2013-04-25 23:33:23 UTC (rev 149155)
@@ -0,0 +1,51 @@
+This tests that the
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Meter1
+AXRole: AXProgressIndicator
+AXTitle: 6 blocks used (out of 8 total)
+AXDescription:
+
+
+Meter2
+AXRole: AXProgressIndicator
+AXTitle: 75%
+AXDescription:
+
+
+Meter3
+AXRole: AXProgressIndicator
+AXTitle:
+AXDescription:
+
+
+Meter4
+AXRole: AXProgressIndicator
+AXTitle: 12cm
+AXDescription:
+
+
+Meter5
+AXRole: AXProgressIndicator
+AXTitle: 2cm
+AXDescription:
+
+
+Meter6
+AXRole: AXProgressIndicator
+AXTitle: 12cm
+AXDescription:
+
+
+Meter7
+AXRole: AXProgressIndicator
+AXTitle: 2cm
+AXDescription:
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/accessibility/meter-element.html (0 => 149155)
--- trunk/LayoutTests/accessibility/meter-element.html (rev 0)
+++ trunk/LayoutTests/accessibility/meter-element.html 2013-04-25 23:33:23 UTC (rev 149155)
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML>
+<html>
+<body>
+<script src=""
+
+<div id="content">
+<meter id="meter1" value=6 max=8>6 blocks used (out of 8 total)</meter>
+<meter id="meter2" value=0.75><img alt="75%" src=""
+<meter id="meter3" min="0" max="100" value="75"></meter>
+<meter id="meter4" min=0 max=20 value=12>12cm</meter>
+<meter id="meter5" min=0 max=10 value=2>2cm</meter>
+<meter id="meter6" min=0 max=20 value=12 title="centimeters">12cm</meter>
+<meter id="meter7" min=0 max=10 value=2 title="centimeters">2cm</meter>
+</div>
+
+<div id="console"></div>
+<script>
+
+description("This tests that the <meter> element is accessible.")
+
+if (window.testRunner && window.accessibilityController) {
+ for (var k = 1; k < 8; k++) {
+ var meter = accessibilityController.accessibleElementById("meter" + k);
+ debug("Meter" + k);
+ debug(meter.role);
+ debug(meter.title);
+ debug(meter.description);
+ debug("\n");
+ }
+
+ document.getElementById("content").style.visibility = 'hidden';
+}
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/LayoutTests/platform/mac/accessibility/role-subrole-roledescription-expected.txt (149154 => 149155)
--- trunk/LayoutTests/platform/mac/accessibility/role-subrole-roledescription-expected.txt 2013-04-25 23:10:41 UTC (rev 149154)
+++ trunk/LayoutTests/platform/mac/accessibility/role-subrole-roledescription-expected.txt 2013-04-25 23:33:23 UTC (rev 149155)
@@ -330,9 +330,9 @@
AXRoleDescription:
PASS: meter
- AXRole:
+ AXRole: AXProgressIndicator
AXSubrole:
- AXRoleDescription:
+ AXRoleDescription: progress indicator
PASS: nav
AXRole: AXGroup
Modified: trunk/LayoutTests/platform/mac/accessibility/role-subrole-roledescription.html (149154 => 149155)
--- trunk/LayoutTests/platform/mac/accessibility/role-subrole-roledescription.html 2013-04-25 23:10:41 UTC (rev 149154)
+++ trunk/LayoutTests/platform/mac/accessibility/role-subrole-roledescription.html 2013-04-25 23:33:23 UTC (rev 149155)
@@ -93,7 +93,7 @@
<math data-role="" data-subrole="" data-roledescription="" class="ex">X</math>
<!-- skipped <menu> -->
<!-- skipped <meta> -->
-<!-- http://webkit.org/b/109023 --><meter data-role="" data-subrole="" data-roledescription="" class="ex" value="0.75">X</meter>
+<meter data-role="AXProgressIndicator" data-subrole="" data-roledescription="progress indicator" class="ex" value="0.75">X</meter>
<nav data-role="AXGroup" data-subrole="AXLandmarkNavigation" data-roledescription="navigation" class="ex">X</nav>
<!-- skipped <noscript> -->
<!-- skipped <object> -->
Modified: trunk/Source/WebCore/ChangeLog (149154 => 149155)
--- trunk/Source/WebCore/ChangeLog 2013-04-25 23:10:41 UTC (rev 149154)
+++ trunk/Source/WebCore/ChangeLog 2013-04-25 23:33:23 UTC (rev 149155)
@@ -1,3 +1,39 @@
+2013-04-25 Chris Fleizach <[email protected]>
+
+ <meter> element not exposed to accessibility
+ https://bugs.webkit.org/show_bug.cgi?id=109023
+ rdar://problem/13658964
+
+ Reviewed by Tim Horton.
+
+ Makes the <meter> element appear in the AX tree by reusing the
+ AccessibilityProgressIndicator element to handle either progress or meter
+ elements.
+
+ Test: accessibility/meter-element.html
+
+ * accessibility/AXObjectCache.cpp:
+ (WebCore::createFromRenderer):
+ (WebCore::AXObjectCache::getOrCreate):
+ * accessibility/AccessibilityNodeObject.cpp:
+ (WebCore::AccessibilityNodeObject::canHaveChildren):
+ (WebCore::AccessibilityNodeObject::visibleText):
+ * accessibility/AccessibilityProgressIndicator.cpp:
+ (WebCore::AccessibilityProgressIndicator::AccessibilityProgressIndicator):
+ (WebCore::AccessibilityProgressIndicator::create):
+ (WebCore::AccessibilityProgressIndicator::valueForRange):
+ (WebCore::AccessibilityProgressIndicator::maxValueForRange):
+ (WebCore::AccessibilityProgressIndicator::minValueForRange):
+ (WebCore::AccessibilityProgressIndicator::progressElement):
+ (WebCore::AccessibilityProgressIndicator::meterElement):
+ * accessibility/AccessibilityProgressIndicator.h:
+ (AccessibilityProgressIndicator):
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::firstChild):
+ (WebCore::AccessibilityRenderObject::lastChild):
+ These methods are modified to handle when there is no rendered children, but there are Node
+ children. The node children are desired when calculating text within a node, for example.
+
2013-04-25 Qiankun Miao <[email protected]>
[CSS Shaders] Remove the meshType from the CustomFilterOperation
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (149154 => 149155)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2013-04-25 23:10:41 UTC (rev 149154)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2013-04-25 23:33:23 UTC (rev 149155)
@@ -1833,13 +1833,13 @@
6E21C6C01126338500A7BE02 /* GraphicsContext3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E21C6BF1126338500A7BE02 /* GraphicsContext3D.cpp */; };
6E21C6C21126339900A7BE02 /* GraphicsContext3DCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E21C6C11126339900A7BE02 /* GraphicsContext3DCG.cpp */; };
6E3FAD3814733F4000E42306 /* JSWebGLCompressedTextureS3TC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E3FAD3614733F4000E42306 /* JSWebGLCompressedTextureS3TC.cpp */; };
- 6E3FAD3914733F4000E42306 /* JSWebGLCompressedTextureS3TC.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E3FAD3714733F4000E42306 /* JSWebGLCompressedTextureS3TC.h */; };
+ 6E3FAD3814733F4000E42307 /* JSWebGLDepthTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E3FAD3614733F4000E42307 /* JSWebGLDepthTexture.cpp */; };
6E3FAD3814733F4010E42307 /* JSWebGLDebugRendererInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E3FAD3614733F4010E42307 /* JSWebGLDebugRendererInfo.cpp */; };
- 6E3FAD3914733F4011E42307 /* JSWebGLDebugRendererInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E3FAD3714733F4011E42307 /* JSWebGLDebugRendererInfo.h */; };
6E3FAD3814733F4020E42307 /* JSWebGLDebugShaders.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E3FAD3614733F4020E42307 /* JSWebGLDebugShaders.cpp */; };
- 6E3FAD3914733F4022E42307 /* JSWebGLDebugShaders.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E3FAD3714733F4022E42307 /* JSWebGLDebugShaders.h */; };
- 6E3FAD3814733F4000E42307 /* JSWebGLDepthTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E3FAD3614733F4000E42307 /* JSWebGLDepthTexture.cpp */; };
+ 6E3FAD3914733F4000E42306 /* JSWebGLCompressedTextureS3TC.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E3FAD3714733F4000E42306 /* JSWebGLCompressedTextureS3TC.h */; };
6E3FAD3914733F4000E42307 /* JSWebGLDepthTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E3FAD3714733F4000E42307 /* JSWebGLDepthTexture.h */; };
+ 6E3FAD3914733F4011E42307 /* JSWebGLDebugRendererInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E3FAD3714733F4011E42307 /* JSWebGLDebugRendererInfo.h */; };
+ 6E3FAD3914733F4022E42307 /* JSWebGLDebugShaders.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E3FAD3714733F4022E42307 /* JSWebGLDebugShaders.h */; };
6E3FAE8E14733FDB00E42306 /* WebGLCompressedTextureS3TC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E3FAE8C14733FDB00E42306 /* WebGLCompressedTextureS3TC.cpp */; };
6E3FAE8E14733FDB00E42307 /* WebGLDepthTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E3FAE8C14733FDB00E42307 /* WebGLDepthTexture.cpp */; };
6E3FAE8F14733FDB00E42306 /* WebGLCompressedTextureS3TC.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E3FAE8D14733FDB00E42306 /* WebGLCompressedTextureS3TC.h */; };
@@ -3390,7 +3390,6 @@
A3BB59F41457A40D00AC56FE /* DocumentEventQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A3BB59F21457A40D00AC56FE /* DocumentEventQueue.h */; settings = {ATTRIBUTES = (Private, ); }; };
A3E2643014748991005A8588 /* WorkerEventQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3E2642E14748991005A8588 /* WorkerEventQueue.cpp */; };
A3E2643114748991005A8588 /* WorkerEventQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E2642F14748991005A8588 /* WorkerEventQueue.h */; };
- A409C984116D0DDD007197BD /* AccessibilityProgressIndicator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A409C982116D0DDD007197BD /* AccessibilityProgressIndicator.cpp */; };
A409C985116D0DDD007197BD /* AccessibilityProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = A409C983116D0DDD007197BD /* AccessibilityProgressIndicator.h */; };
A4226E5A1163D667008B8397 /* JSHTMLProgressElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4226E591163D667008B8397 /* JSHTMLProgressElement.cpp */; };
A4226E5C1163D695008B8397 /* JSHTMLProgressElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A4226E5B1163D695008B8397 /* JSHTMLProgressElement.h */; };
@@ -8258,13 +8257,13 @@
6E21C6BF1126338500A7BE02 /* GraphicsContext3D.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsContext3D.cpp; sourceTree = "<group>"; };
6E21C6C11126339900A7BE02 /* GraphicsContext3DCG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsContext3DCG.cpp; sourceTree = "<group>"; };
6E3FAD3614733F4000E42306 /* JSWebGLCompressedTextureS3TC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebGLCompressedTextureS3TC.cpp; sourceTree = "<group>"; };
- 6E3FAD3714733F4000E42306 /* JSWebGLCompressedTextureS3TC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLCompressedTextureS3TC.h; sourceTree = "<group>"; };
+ 6E3FAD3614733F4000E42307 /* JSWebGLDepthTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebGLDepthTexture.cpp; sourceTree = "<group>"; };
6E3FAD3614733F4010E42307 /* JSWebGLDebugRendererInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebGLDebugRendererInfo.cpp; sourceTree = "<group>"; };
- 6E3FAD3714733F4011E42307 /* JSWebGLDebugRendererInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLDebugRendererInfo.h; sourceTree = "<group>"; };
6E3FAD3614733F4020E42307 /* JSWebGLDebugShaders.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebGLDebugShaders.cpp; sourceTree = "<group>"; };
- 6E3FAD3714733F4022E42307 /* JSWebGLDebugShaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLDebugShaders.h; sourceTree = "<group>"; };
- 6E3FAD3614733F4000E42307 /* JSWebGLDepthTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebGLDepthTexture.cpp; sourceTree = "<group>"; };
+ 6E3FAD3714733F4000E42306 /* JSWebGLCompressedTextureS3TC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLCompressedTextureS3TC.h; sourceTree = "<group>"; };
6E3FAD3714733F4000E42307 /* JSWebGLDepthTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLDepthTexture.h; sourceTree = "<group>"; };
+ 6E3FAD3714733F4011E42307 /* JSWebGLDebugRendererInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLDebugRendererInfo.h; sourceTree = "<group>"; };
+ 6E3FAD3714733F4022E42307 /* JSWebGLDebugShaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLDebugShaders.h; sourceTree = "<group>"; };
6E3FAE8C14733FDB00E42306 /* WebGLCompressedTextureS3TC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebGLCompressedTextureS3TC.cpp; path = canvas/WebGLCompressedTextureS3TC.cpp; sourceTree = "<group>"; };
6E3FAE8C14733FDB00E42307 /* WebGLDepthTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebGLDepthTexture.cpp; path = canvas/WebGLDepthTexture.cpp; sourceTree = "<group>"; };
6E3FAE8D14733FDB00E42306 /* WebGLCompressedTextureS3TC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebGLCompressedTextureS3TC.h; path = canvas/WebGLCompressedTextureS3TC.h; sourceTree = "<group>"; };
@@ -24466,7 +24465,6 @@
29ACB214143E7498006BCA5F /* AccessibilityMockObject.cpp in Sources */,
AAA728F616D1D8BC00D3BBC6 /* AccessibilityObjectIOS.mm in Sources */,
29A812480FBB9CA900510293 /* AccessibilityObjectMac.mm in Sources */,
- A409C984116D0DDD007197BD /* AccessibilityProgressIndicator.cpp in Sources */,
29D7BCF61444AF580070619C /* AccessibilitySpinButton.cpp in Sources */,
B5D31DFA11CF610B009F22B4 /* ActiveDOMCallback.cpp in Sources */,
E1C4DE6E0EA75C650023CCD6 /* ActiveDOMObject.cpp in Sources */,
Modified: trunk/Source/WebCore/accessibility/AXObjectCache.cpp (149154 => 149155)
--- trunk/Source/WebCore/accessibility/AXObjectCache.cpp 2013-04-25 23:10:41 UTC (rev 149154)
+++ trunk/Source/WebCore/accessibility/AXObjectCache.cpp 2013-04-25 23:33:23 UTC (rev 149155)
@@ -63,10 +63,12 @@
#include "HTMLImageElement.h"
#include "HTMLInputElement.h"
#include "HTMLLabelElement.h"
+#include "HTMLMeterElement.h"
#include "HTMLNames.h"
#include "Page.h"
#include "RenderListBox.h"
#include "RenderMenuList.h"
+#include "RenderMeter.h"
#include "RenderProgress.h"
#include "RenderSlider.h"
#include "RenderTable.h"
@@ -297,6 +299,10 @@
if (cssBox->isProgress())
return AccessibilityProgressIndicator::create(toRenderProgress(cssBox));
#endif
+#if ENABLE(METER_ELEMENT)
+ if (cssBox->isMeter())
+ return AccessibilityProgressIndicator::create(toRenderMeter(cssBox));
+#endif
// input type=range
if (cssBox->isSlider())
@@ -355,7 +361,13 @@
// Or if it's a hidden element, but we still want to expose it because of other ARIA attributes.
bool inCanvasSubtree = node->parentElement()->isInCanvasSubtree();
bool isHidden = !node->renderer() && isNodeAriaVisible(node);
- if (!inCanvasSubtree && !isHidden)
+
+ bool insideMeterElement = false;
+#if ENABLE(METER_ELEMENT)
+ insideMeterElement = isHTMLMeterElement(node->parentElement());
+#endif
+
+ if (!inCanvasSubtree && !isHidden && !insideMeterElement)
return 0;
RefPtr<AccessibilityObject> newObj = createFromNode(node);
Modified: trunk/Source/WebCore/accessibility/AccessibilityAllInOne.cpp (149154 => 149155)
--- trunk/Source/WebCore/accessibility/AccessibilityAllInOne.cpp 2013-04-25 23:10:41 UTC (rev 149154)
+++ trunk/Source/WebCore/accessibility/AccessibilityAllInOne.cpp 2013-04-25 23:33:23 UTC (rev 149155)
@@ -36,6 +36,7 @@
#include "AccessibilityMediaControls.cpp"
#include "AccessibilityNodeObject.cpp"
#include "AccessibilityObject.cpp"
+#include "AccessibilityProgressIndicator.cpp"
#include "AccessibilityRenderObject.cpp"
#include "AccessibilitySVGRoot.cpp"
#include "AccessibilityScrollView.cpp"
Modified: trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp (149154 => 149155)
--- trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp 2013-04-25 23:10:41 UTC (rev 149154)
+++ trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp 2013-04-25 23:33:23 UTC (rev 149155)
@@ -386,6 +386,7 @@
case StaticTextRole:
case ListBoxOptionRole:
case ScrollBarRole:
+ case ProgressIndicatorRole:
return false;
default:
return true;
@@ -1232,6 +1233,7 @@
case MenuItemRole:
case RadioButtonRole:
case TabRole:
+ case ProgressIndicatorRole:
useTextUnderElement = true;
break;
default:
Modified: trunk/Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp (149154 => 149155)
--- trunk/Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp 2013-04-25 23:10:41 UTC (rev 149154)
+++ trunk/Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp 2013-04-25 23:33:23 UTC (rev 149155)
@@ -21,10 +21,12 @@
#include "config.h"
#include "AccessibilityProgressIndicator.h"
-#if ENABLE(PROGRESS_ELEMENT)
+#if ENABLE(PROGRESS_ELEMENT) || ENABLE(METER_ELEMENT)
#include "FloatConversion.h"
+#include "HTMLMeterElement.h"
#include "HTMLNames.h"
#include "HTMLProgressElement.h"
+#include "RenderMeter.h"
#include "RenderObject.h"
#include "RenderProgress.h"
@@ -32,6 +34,7 @@
using namespace HTMLNames;
+#if ENABLE(PROGRESS_ELEMENT)
AccessibilityProgressIndicator::AccessibilityProgressIndicator(RenderProgress* renderer)
: AccessibilityRenderObject(renderer)
{
@@ -41,7 +44,20 @@
{
return adoptRef(new AccessibilityProgressIndicator(renderer));
}
+#endif
+
+#if ENABLE(METER_ELEMENT)
+AccessibilityProgressIndicator::AccessibilityProgressIndicator(RenderMeter* renderer)
+ : AccessibilityRenderObject(renderer)
+{
+}
+PassRefPtr<AccessibilityProgressIndicator> AccessibilityProgressIndicator::create(RenderMeter* renderer)
+{
+ return adoptRef(new AccessibilityProgressIndicator(renderer));
+}
+#endif
+
bool AccessibilityProgressIndicator::computeAccessibilityIsIgnored() const
{
return accessibilityIsIgnoredByDefault();
@@ -49,28 +65,91 @@
float AccessibilityProgressIndicator::valueForRange() const
{
- if (element()->position() >= 0)
- return narrowPrecisionToFloat(element()->value());
+ if (!m_renderer)
+ return 0.0;
+
+#if ENABLE(PROGRESS_ELEMENT)
+ if (m_renderer->isProgress()) {
+ HTMLProgressElement* progress = progressElement();
+ if (progress && progress->position() >= 0)
+ return narrowPrecisionToFloat(progress->value());
+ }
+#endif
+
+#if ENABLE(METER_ELEMENT)
+ if (m_renderer->isMeter()) {
+ if (HTMLMeterElement* meter = meterElement())
+ return narrowPrecisionToFloat(meter->value());
+ }
+#endif
+
// Indeterminate progress bar should return 0.
- return 0.0f;
+ return 0.0;
}
float AccessibilityProgressIndicator::maxValueForRange() const
{
- return narrowPrecisionToFloat(element()->max());
+ if (!m_renderer)
+ return 0.0;
+
+#if ENABLE(PROGRESS_ELEMENT)
+ if (m_renderer->isProgress()) {
+ if (HTMLProgressElement* progress = progressElement())
+ return narrowPrecisionToFloat(progress->max());
+ }
+#endif
+
+#if ENABLE(METER_ELEMENT)
+ if (m_renderer->isMeter()) {
+ if (HTMLMeterElement* meter = meterElement())
+ return narrowPrecisionToFloat(meter->max());
+ }
+#endif
+
+ return 0.0;
}
float AccessibilityProgressIndicator::minValueForRange() const
{
- return 0.0f;
+ if (!m_renderer)
+ return 0.0;
+
+#if ENABLE(PROGRESS_ELEMENT)
+ if (m_renderer->isProgress())
+ return 0.0;
+#endif
+
+#if ENABLE(METER_ELEMENT)
+ if (m_renderer->isMeter()) {
+ if (HTMLMeterElement* meter = meterElement())
+ return narrowPrecisionToFloat(meter->min());
+ }
+#endif
+
+ return 0.0;
}
-HTMLProgressElement* AccessibilityProgressIndicator::element() const
+#if ENABLE(PROGRESS_ELEMENT)
+HTMLProgressElement* AccessibilityProgressIndicator::progressElement() const
{
+ if (!m_renderer->isProgress())
+ return 0;
+
return toRenderProgress(m_renderer)->progressElement();
}
+#endif
+#if ENABLE(METER_ELEMENT)
+HTMLMeterElement* AccessibilityProgressIndicator::meterElement() const
+{
+ if (!m_renderer->isMeter())
+ return 0;
+ return toRenderMeter(m_renderer)->meterElement();
+}
+#endif
+
} // namespace WebCore
-#endif // ENABLE(PROGRESS_ELEMENT)
+#endif // ENABLE(PROGRESS_ELEMENT) || ENABLE(METER_ELEMENT)
+
Modified: trunk/Source/WebCore/accessibility/AccessibilityProgressIndicator.h (149154 => 149155)
--- trunk/Source/WebCore/accessibility/AccessibilityProgressIndicator.h 2013-04-25 23:10:41 UTC (rev 149154)
+++ trunk/Source/WebCore/accessibility/AccessibilityProgressIndicator.h 2013-04-25 23:33:23 UTC (rev 149155)
@@ -21,17 +21,29 @@
#ifndef AccessibilityProgressIndicator_h
#define AccessibilityProgressIndicator_h
-#if ENABLE(PROGRESS_ELEMENT)
+#if ENABLE(PROGRESS_ELEMENT) || ENABLE(METER_ELEMENT)
#include "AccessibilityRenderObject.h"
namespace WebCore {
+#if ENABLE(METER_ELEMENT)
+class HTMLMeterElement;
+class RenderMeter;
+#endif
+
+#if ENABLE(PROGRESS_ELEMENT)
class HTMLProgressElement;
class RenderProgress;
-
+#endif
+
class AccessibilityProgressIndicator : public AccessibilityRenderObject {
public:
+#if ENABLE(PROGRESS_ELEMENT)
static PassRefPtr<AccessibilityProgressIndicator> create(RenderProgress*);
+#endif
+#if ENABLE(METER_ELEMENT)
+ static PassRefPtr<AccessibilityProgressIndicator> create(RenderMeter*);
+#endif
private:
virtual AccessibilityRole roleValue() const { return ProgressIndicatorRole; }
@@ -42,15 +54,21 @@
virtual float maxValueForRange() const;
virtual float minValueForRange() const;
+#if ENABLE(PROGRESS_ELEMENT)
explicit AccessibilityProgressIndicator(RenderProgress*);
-
- HTMLProgressElement* element() const;
+ HTMLProgressElement* progressElement() const;
+#endif
+#if ENABLE(METER_ELEMENT)
+ explicit AccessibilityProgressIndicator(RenderMeter*);
+ HTMLMeterElement* meterElement() const;
+#endif
+
virtual bool computeAccessibilityIsIgnored() const;
};
} // namespace WebCore
-#endif // ENABLE(PROGRESS_ELEMENT)
+#endif // ENABLE(PROGRESS_ELEMENT) || ENABLE(METER_ELEMENT)
#endif // AccessibilityProgressIndicator_h
Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (149154 => 149155)
--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2013-04-25 23:10:41 UTC (rev 149154)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2013-04-25 23:33:23 UTC (rev 149155)
@@ -224,9 +224,13 @@
RenderObject* firstChild = firstChildConsideringContinuation(m_renderer);
- if (!firstChild)
- return 0;
-
+ // If an object can't have children, then it is using this method to help
+ // calculate some internal property (like its description).
+ // In this case, it should check the Node level for children in case they're
+ // not rendered (like a <meter> element).
+ if (!firstChild && !canHaveChildren())
+ return AccessibilityNodeObject::firstChild();
+
return axObjectCache()->getOrCreate(firstChild);
}
@@ -237,9 +241,9 @@
RenderObject* lastChild = lastChildConsideringContinuation(m_renderer);
- if (!lastChild)
- return 0;
-
+ if (!lastChild && !canHaveChildren())
+ return AccessibilityNodeObject::lastChild();
+
return axObjectCache()->getOrCreate(lastChild);
}