Commit 543a2def authored by CJ DiMeglio's avatar CJ DiMeglio Committed by Commit Bot

Reland "Reland: [Accessibility] Volume slider reads out level in percentages."

This is a reland of d018c076

Original change's description:
> Reland: [Accessibility] Volume slider reads out level in percentages.
>
> This is a reland of change I0ee5a91215669f39c7394d3c8f113ae83a74cf00
>
> This CL makes it such that the volume level is read out as a percentage
> in aria. This CL also amplifies how the accessibility information is
> given to aria, by setting attributes instead of explicitly creating
> accessibility nodes.
>
> TBR=thakis@chromium.org
>
> Bug: 905024
> Change-Id: I831d9ed1f1790556d1a58431f3aaf9562c2c9043
> Reviewed-on: https://chromium-review.googlesource.com/c/1373032
> Reviewed-by: CJ DiMeglio <lethalantidote@chromium.org>
> Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org>
> Reviewed-by: Mounir Lamouri <mlamouri@chromium.org>
> Commit-Queue: CJ DiMeglio <lethalantidote@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#617338}

TBR=thakis@chromium.org,dmazzoni@chromium.org,mlamouri@chromium.org

Bug: 905024
Change-Id: Ie308a4b30032491333072681fcf214a9fab58d5c
Reviewed-on: https://chromium-review.googlesource.com/c/1383307Reviewed-by: default avatarCJ DiMeglio <lethalantidote@chromium.org>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Commit-Queue: CJ DiMeglio <lethalantidote@chromium.org>
Cr-Commit-Position: refs/heads/master@{#618940}
parent 11221282
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include "content/public/test/content_browser_test_utils.h" #include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h" #include "content/shell/browser/shell.h"
#include "content/test/accessibility_browser_test_utils.h" #include "content/test/accessibility_browser_test_utils.h"
#include "ui/base/ui_base_features.h"
#if defined(OS_MACOSX) #if defined(OS_MACOSX)
#include "base/mac/mac_util.h" #include "base/mac/mac_util.h"
...@@ -1882,6 +1883,13 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, DISABLED_AccessibilityVideo) { ...@@ -1882,6 +1883,13 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, DISABLED_AccessibilityVideo) {
RunHtmlTest(FILE_PATH_LITERAL("video.html")); RunHtmlTest(FILE_PATH_LITERAL("video.html"));
} }
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityVideoControls) {
// TODO(crbug.com/916003): fix for mash.
if (features::IsSingleProcessMash())
return;
RunHtmlTest(FILE_PATH_LITERAL("video-controls.html"));
}
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityWbr) { IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityWbr) {
RunHtmlTest(FILE_PATH_LITERAL("wbr.html")); RunHtmlTest(FILE_PATH_LITERAL("wbr.html"));
} }
......
[document web]
++[section]
++++[video]
++++++[section]
++++++++[tool bar] name='video' description='video' horizontal
++++++++[tool bar] name='video' description='video' horizontal
++++++++++[tool bar] name='video' description='video' horizontal
++++++++++++[tool bar] name='video' description='video' horizontal
++++++++++++++[push button] name='play'
++++++++++++++[text] name='0:00'
++++++++++++++[section]
++++++++++++++++[section]
++++++++++++++++[push button] name='mute'
++++++++++++++[push button] name='enter full screen'
++++++++++++++[push button] name='show more media controls' description='more options'
++++++++++++[slider] description='movie time scrubber' horizontal
rootWebArea
++genericContainer
++++video
++++++genericContainer
++++++++toolbar horizontal description='video' name='video' descriptionFrom=uninitialized
++++++++toolbar horizontal description='video' name='video' descriptionFrom=uninitialized
++++++++++toolbar horizontal description='video' name='video' descriptionFrom=uninitialized
++++++++++++toolbar horizontal description='video' name='video' descriptionFrom=uninitialized
++++++++++++++button name='play' restriction=disabled
++++++++++++++staticText name='0:00'
++++++++++++++++inlineTextBox name='0:00'
++++++++++++++genericContainer
++++++++++++++++genericContainer
++++++++++++++++button name='mute' restriction=disabled
++++++++++++++button name='enter full screen' restriction=disabled
++++++++++++++button description='more options' name='show more media controls' descriptionFrom=uninitialized restriction=disabled
++++++++++++slider horizontal description='movie time scrubber' value='0:00' descriptionFrom=uninitialized valueForRange=0.00 minValueForRange=0.00 maxValueForRange=0.00
++++++++++++++sliderThumb
<!DOCTYPE html>
<html>
<body>
<video controls></video>
</body>
</html>
<!DOCTYPE html>
<title>Media Controls: volume slider accessibility tests</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../media-controls.js"></script>
<video controls></video>
<script>
async_test(t => {
// Ensure that we will show the volume slider.
setPreferHiddenVolumeControlsForTest(t, false);
assert_true(internals.runtimeFlags.accessibilityObjectModelEnabled);
var video = document.querySelector('video');
video.src = '../content/test.ogv';
video.onloadedmetadata = t.step(function() {
var volume_slider = volumeSliderElement(video);
assert_not_equals(volume_slider, null);
assert_equals(volume_slider.getAttribute('aria-label'), 'volume');
assert_equals(volume_slider.getAttribute('aria-valuemin'), '0');
assert_equals(volume_slider.getAttribute('aria-valuemax'), '100');
assert_equals(volume_slider.getAttribute('aria-valuenow'), '100');
// Trigger events that will update the timeline internal state.
video.volume = 0.54;
video.onvolumechange = t.step_func_done(function(event) {
assert_equals(volume_slider.getAttribute('aria-valuenow'), '54');
});
});
});
</script>
...@@ -58,10 +58,6 @@ AXObject* AccessibilityMediaControl::Create( ...@@ -58,10 +58,6 @@ AXObject* AccessibilityMediaControl::Create(
case kMediaSlider: case kMediaSlider:
return AccessibilityMediaTimeline::Create(layout_object, ax_object_cache); return AccessibilityMediaTimeline::Create(layout_object, ax_object_cache);
case kMediaVolumeSlider:
return AccessibilityMediaVolumeSlider::Create(layout_object,
ax_object_cache);
case kMediaCurrentTimeDisplay: case kMediaCurrentTimeDisplay:
case kMediaTimeRemainingDisplay: case kMediaTimeRemainingDisplay:
return AccessibilityMediaTimeDisplay::Create(layout_object, return AccessibilityMediaTimeDisplay::Create(layout_object,
...@@ -98,6 +94,11 @@ AXObject* AccessibilityMediaControl::Create( ...@@ -98,6 +94,11 @@ AXObject* AccessibilityMediaControl::Create(
case kMediaAnimatedArrowContainer: case kMediaAnimatedArrowContainer:
return MakeGarbageCollected<AccessibilityMediaControl>(layout_object, return MakeGarbageCollected<AccessibilityMediaControl>(layout_object,
ax_object_cache); ax_object_cache);
// Removed as a part of the a11y tree rewrite https://crbug.com/836549.
case kMediaVolumeSlider:
NOTREACHED();
return MakeGarbageCollected<AccessibilityMediaControl>(layout_object,
ax_object_cache);
} }
NOTREACHED(); NOTREACHED();
...@@ -371,38 +372,6 @@ String AccessibilityMediaTimeline::Description( ...@@ -371,38 +372,6 @@ String AccessibilityMediaTimeline::Description(
: WebLocalizedString::kAXMediaAudioSliderHelp); : WebLocalizedString::kAXMediaAudioSliderHelp);
} }
//
// AccessibilityMediaVolumeSlider
AccessibilityMediaVolumeSlider::AccessibilityMediaVolumeSlider(
LayoutObject* layout_object,
AXObjectCacheImpl& ax_object_cache)
: AXSlider(layout_object, ax_object_cache) {}
AXObject* AccessibilityMediaVolumeSlider::Create(
LayoutObject* layout_object,
AXObjectCacheImpl& ax_object_cache) {
return MakeGarbageCollected<AccessibilityMediaVolumeSlider>(layout_object,
ax_object_cache);
}
String AccessibilityMediaVolumeSlider::Description(
ax::mojom::NameFrom name_from,
ax::mojom::DescriptionFrom& description_from,
AXObjectVector* description_objects) const {
return QueryString(WebLocalizedString::kAXMediaVolumeSliderHelp);
}
bool AccessibilityMediaVolumeSlider::InternalSetAccessibilityFocusAction() {
MediaControlElementsHelper::NotifyMediaControlAccessibleFocus(GetElement());
return AXSlider::InternalSetAccessibilityFocusAction();
}
bool AccessibilityMediaVolumeSlider::InternalClearAccessibilityFocusAction() {
MediaControlElementsHelper::NotifyMediaControlAccessibleBlur(GetElement());
return AXSlider::InternalClearAccessibilityFocusAction();
}
// //
// AccessibilityMediaTimeDisplay // AccessibilityMediaTimeDisplay
......
...@@ -81,24 +81,6 @@ class AccessibilityMediaTimeline final : public AXSlider { ...@@ -81,24 +81,6 @@ class AccessibilityMediaTimeline final : public AXSlider {
DISALLOW_COPY_AND_ASSIGN(AccessibilityMediaTimeline); DISALLOW_COPY_AND_ASSIGN(AccessibilityMediaTimeline);
}; };
class AccessibilityMediaVolumeSlider final : public AXSlider {
public:
static AXObject* Create(LayoutObject*, AXObjectCacheImpl&);
AccessibilityMediaVolumeSlider(LayoutObject*, AXObjectCacheImpl&);
~AccessibilityMediaVolumeSlider() override = default;
String Description(ax::mojom::NameFrom,
ax::mojom::DescriptionFrom&,
AXObjectVector* description_objects) const override;
bool InternalSetAccessibilityFocusAction() override;
bool InternalClearAccessibilityFocusAction() override;
private:
DISALLOW_COPY_AND_ASSIGN(AccessibilityMediaVolumeSlider);
};
class AXMediaControlsContainer final : public AccessibilityMediaControl { class AXMediaControlsContainer final : public AccessibilityMediaControl {
public: public:
static AXObject* Create(LayoutObject*, AXObjectCacheImpl&); static AXObject* Create(LayoutObject*, AXObjectCacheImpl&);
......
...@@ -82,6 +82,7 @@ ...@@ -82,6 +82,7 @@
#include "third_party/blink/renderer/modules/accessibility/ax_slider.h" #include "third_party/blink/renderer/modules/accessibility/ax_slider.h"
#include "third_party/blink/renderer/modules/accessibility/ax_svg_root.h" #include "third_party/blink/renderer/modules/accessibility/ax_svg_root.h"
#include "third_party/blink/renderer/modules/accessibility/ax_virtual_object.h" #include "third_party/blink/renderer/modules/accessibility/ax_virtual_object.h"
#include "third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.h"
#include "third_party/blink/renderer/modules/permissions/permission_utils.h" #include "third_party/blink/renderer/modules/permissions/permission_utils.h"
namespace blink { namespace blink {
...@@ -311,8 +312,13 @@ AXObject* AXObjectCacheImpl::CreateFromRenderer(LayoutObject* layout_object) { ...@@ -311,8 +312,13 @@ AXObject* AXObjectCacheImpl::CreateFromRenderer(LayoutObject* layout_object) {
return AXList::Create(layout_object, *this); return AXList::Create(layout_object, *this);
// media controls // media controls
if (node && node->IsMediaControlElement()) // TODO(https://crbug.com/836549): Remove for the rest of the controls.
// kMediaVolumeSlider has already been removed.
if (node && node->IsMediaControlElement() &&
MediaControlElementsHelper::GetMediaControlElementType(node) !=
kMediaVolumeSlider) {
return AccessibilityMediaControl::Create(layout_object, *this); return AccessibilityMediaControl::Create(layout_object, *this);
}
if (IsHTMLOptionElement(node)) if (IsHTMLOptionElement(node))
return AXListBoxOption::Create(layout_object, *this); return AXListBoxOption::Create(layout_object, *this);
......
...@@ -20,6 +20,9 @@ MediaControlVolumeSliderElement::MediaControlVolumeSliderElement( ...@@ -20,6 +20,9 @@ MediaControlVolumeSliderElement::MediaControlVolumeSliderElement(
MediaControlsImpl& media_controls) MediaControlsImpl& media_controls)
: MediaControlSliderElement(media_controls, kMediaVolumeSlider) { : MediaControlSliderElement(media_controls, kMediaVolumeSlider) {
setAttribute(html_names::kMaxAttr, "1"); setAttribute(html_names::kMaxAttr, "1");
setAttribute(html_names::kAriaValuemaxAttr, "100");
setAttribute(html_names::kAriaValueminAttr, "0");
setAttribute(html_names::kAriaLabelAttr, "volume");
SetShadowPseudoId(AtomicString("-webkit-media-controls-volume-slider")); SetShadowPseudoId(AtomicString("-webkit-media-controls-volume-slider"));
SetVolumeInternal(MediaElement().volume()); SetVolumeInternal(MediaElement().volume());
...@@ -104,6 +107,9 @@ void MediaControlVolumeSliderElement::DefaultEventHandler(Event& event) { ...@@ -104,6 +107,9 @@ void MediaControlVolumeSliderElement::DefaultEventHandler(Event& event) {
void MediaControlVolumeSliderElement::SetVolumeInternal(double volume) { void MediaControlVolumeSliderElement::SetVolumeInternal(double volume) {
SetupBarSegments(); SetupBarSegments();
SetAfterSegmentPosition(MediaControlSliderElement::Position(0, volume)); SetAfterSegmentPosition(MediaControlSliderElement::Position(0, volume));
int percent_vol = 100 * volume;
setAttribute(html_names::kAriaValuenowAttr,
WTF::AtomicString::Number(percent_vol));
} }
bool MediaControlVolumeSliderElement::KeepEventInNode( bool MediaControlVolumeSliderElement::KeepEventInNode(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment