Skip to content

Commit 32088ad

Browse files
Joshua Hoffmanhoffmanjoshua
authored andcommitted
AX: Merge AccessibilityMediaObject into AccessibilityRenderObject
https://bugs.webkit.org/show_bug.cgi?id=297337 rdar://158234555 Reviewed by Tyler Wilcock. Merge all of the logic from AccessibilityMediaObject into Accessibility[Render/Node]Object as part of our effort to flatten our class hierarchy. A new static-only class, AccessibilityMediaHelpers, was added to encapsulate the media element logic. * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::createObjectFromRenderer): * Source/WebCore/accessibility/AccessibilityMediaHelpers.cpp: Added. (WebCore::AccessibilityMediaHelpers::enterFullscreen): (WebCore::AccessibilityMediaHelpers::toggleMute): (WebCore::AccessibilityMediaHelpers::interactiveVideoDuration): (WebCore::AccessibilityMediaHelpers::isPlaying): (WebCore::AccessibilityMediaHelpers::isAutoplayEnabled): (WebCore::AccessibilityMediaHelpers::isMuted): (WebCore::AccessibilityMediaHelpers::press): (WebCore::AccessibilityMediaHelpers::increment): (WebCore::AccessibilityMediaHelpers::decrement): (WebCore::AccessibilityMediaHelpers::mediaSeek): * Source/WebCore/accessibility/AccessibilityMediaHelpers.h: Renamed from Source/WebCore/accessibility/AccessibilityMediaObject.h. * Source/WebCore/accessibility/AccessibilityMediaObject.cpp: Removed. * Source/WebCore/accessibility/AccessibilityNodeObject.cpp: (WebCore::AccessibilityNodeObject::mediaElement const): (WebCore::AccessibilityNodeObject::videoElement const): (WebCore::AccessibilityNodeObject::increment): (WebCore::AccessibilityNodeObject::decrement): * Source/WebCore/accessibility/AccessibilityNodeObject.h: * Source/WebCore/accessibility/AccessibilityRenderObject.cpp: (WebCore::AccessibilityRenderObject::stringValue const): (WebCore::AccessibilityRenderObject::press): (WebCore::AccessibilityRenderObject::interactiveVideoDuration const): (WebCore::AccessibilityRenderObject::toggleMute): (WebCore::AccessibilityRenderObject::isPlaying const): (WebCore::AccessibilityRenderObject::isMuted const): (WebCore::AccessibilityRenderObject::isAutoplayEnabled const): (WebCore::AccessibilityRenderObject::enterFullscreen const): * Source/WebCore/accessibility/AccessibilityRenderObject.h: * Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: (-[WebAccessibilityObjectWrapper accessibilityIsWebInteractiveVideo]): (-[WebAccessibilityObjectWrapper interactiveVideoDescription]): (-[WebAccessibilityObjectWrapper accessibilityIsMediaPlaying]): (-[WebAccessibilityObjectWrapper accessibilityIsMediaMuted]): (-[WebAccessibilityObjectWrapper accessibilityToggleMuteForMedia]): (-[WebAccessibilityObjectWrapper accessibilityVideoEnterFullscreen]): Canonical link: https://commits.webkit.org/298682@main
1 parent 2c5cf3d commit 32088ad

10 files changed

+235
-225
lines changed

Source/WebCore/WebCore.xcodeproj/project.pbxproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4491,7 +4491,7 @@
44914491
A8FA6E5D0E4CFDED00D5CF49 /* Pattern.h in Headers */ = {isa = PBXBuildFile; fileRef = A8FA6E5B0E4CFDED00D5CF49 /* Pattern.h */; settings = {ATTRIBUTES = (Private, ); }; };
44924492
A91C9FBF1B6586DE00AFFD54 /* AccessibilityTree.h in Headers */ = {isa = PBXBuildFile; fileRef = A91C9FBD1B6586DE00AFFD54 /* AccessibilityTree.h */; };
44934493
A91C9FC31B659A6700AFFD54 /* AccessibilityTreeItem.h in Headers */ = {isa = PBXBuildFile; fileRef = A91C9FC11B659A6700AFFD54 /* AccessibilityTreeItem.h */; };
4494-
A9787CB41F5F5C6600C551C6 /* AccessibilityMediaObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9787CB31F5F5C6500C551C6 /* AccessibilityMediaObject.cpp */; };
4494+
A9787CB41F5F5C6600C551C6 /* AccessibilityMediaHelpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9787CB31F5F5C6500C551C6 /* AccessibilityMediaHelpers.cpp */; };
44954495
A9C6E4E40D745E05006442E9 /* DOMMimeType.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4E20D745E05006442E9 /* DOMMimeType.h */; };
44964496
A9C6E4E80D745E18006442E9 /* DOMMimeTypeArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4E60D745E18006442E9 /* DOMMimeTypeArray.h */; };
44974497
A9C6E4EC0D745E2B006442E9 /* DOMPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4EA0D745E2B006442E9 /* DOMPlugin.h */; };
@@ -17171,8 +17171,8 @@
1717117171
A91C9FBD1B6586DE00AFFD54 /* AccessibilityTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityTree.h; sourceTree = "<group>"; };
1717217172
A91C9FC01B659A6700AFFD54 /* AccessibilityTreeItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityTreeItem.cpp; sourceTree = "<group>"; };
1717317173
A91C9FC11B659A6700AFFD54 /* AccessibilityTreeItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityTreeItem.h; sourceTree = "<group>"; };
17174-
A9787CB21F5F599200C551C6 /* AccessibilityMediaObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AccessibilityMediaObject.h; sourceTree = "<group>"; };
17175-
A9787CB31F5F5C6500C551C6 /* AccessibilityMediaObject.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityMediaObject.cpp; sourceTree = "<group>"; };
17174+
A9787CB21F5F599200C551C6 /* AccessibilityMediaHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AccessibilityMediaHelpers.h; sourceTree = "<group>"; };
17175+
A9787CB31F5F5C6500C551C6 /* AccessibilityMediaHelpers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityMediaHelpers.cpp; sourceTree = "<group>"; };
1717617176
A9C6E4E10D745E05006442E9 /* DOMMimeType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DOMMimeType.cpp; sourceTree = "<group>"; };
1717717177
A9C6E4E20D745E05006442E9 /* DOMMimeType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMMimeType.h; sourceTree = "<group>"; };
1717817178
A9C6E4E50D745E18006442E9 /* DOMMimeTypeArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DOMMimeTypeArray.cpp; sourceTree = "<group>"; };
@@ -24937,8 +24937,8 @@
2493724937
29A812240FBB9C1D00510293 /* AccessibilityListBoxOption.h */,
2493824938
2981ABC4131822EC00D12F2A /* AccessibilityMathMLElement.cpp */,
2493924939
07B0ABCE1032242200FBDC33 /* AccessibilityMathMLElement.h */,
24940-
A9787CB31F5F5C6500C551C6 /* AccessibilityMediaObject.cpp */,
24941-
A9787CB21F5F599200C551C6 /* AccessibilityMediaObject.h */,
24940+
A9787CB31F5F5C6500C551C6 /* AccessibilityMediaHelpers.cpp */,
24941+
A9787CB21F5F599200C551C6 /* AccessibilityMediaHelpers.h */,
2494224942
76CDD2EC1103DA6600680521 /* AccessibilityMenuList.cpp */,
2494324943
76CDD2ED1103DA6600680521 /* AccessibilityMenuList.h */,
2494424944
76CDD2F01103DA6600680521 /* AccessibilityMenuListOption.cpp */,
@@ -47299,7 +47299,7 @@
4729947299
buildActionMask = 2147483647;
4730047300
files = (
4730147301
71BF4C3229B098A8008344FC /* AcceleratedEffectStack.mm in Sources */,
47302-
A9787CB41F5F5C6600C551C6 /* AccessibilityMediaObject.cpp in Sources */,
47302+
A9787CB41F5F5C6600C551C6 /* AccessibilityMediaHelpers.cpp in Sources */,
4730347303
7BE37F7D27BB86CD007A6CD3 /* ANGLEUtilities.cpp in Sources */,
4730447304
7BE37F7C27BB86B8007A6CD3 /* ANGLEUtilitiesCocoa.mm in Sources */,
4730547305
CD0EEE0E14743F39003EAFA2 /* AudioOutputUnitAdaptorIOS.cpp in Sources */,

Source/WebCore/accessibility/AXObjectCache.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
#include "AccessibilityListBox.h"
4747
#include "AccessibilityListBoxOption.h"
4848
#include "AccessibilityMathMLElement.h"
49-
#include "AccessibilityMediaObject.h"
5049
#include "AccessibilityMenuList.h"
5150
#include "AccessibilityMenuListOption.h"
5251
#include "AccessibilityMenuListPopup.h"
@@ -674,11 +673,6 @@ Ref<AccessibilityRenderObject> AXObjectCache::createObjectFromRenderer(RenderObj
674673

675674
if (shouldCreateAccessibilityLabel(*element))
676675
return AccessibilityLabel::create(AXID::generate(), renderer, *this);
677-
678-
#if PLATFORM(IOS_FAMILY)
679-
if (is<HTMLMediaElement>(*element) && hasRole(*element, nullAtom()))
680-
return AccessibilityMediaObject::create(AXID::generate(), renderer, *this);
681-
#endif
682676
}
683677

684678
if (renderer.isRenderOrLegacyRenderSVGRoot())
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/*
2+
* Copyright (C) 2017 Apple Inc. All rights reserved.
3+
*
4+
* Redistribution and use in source and binary forms, with or without
5+
* modification, are permitted provided that the following conditions
6+
* are met:
7+
*
8+
* 1. Redistributions of source code must retain the above copyright
9+
* notice, this list of conditions and the following disclaimer.
10+
* 2. Redistributions in binary form must reproduce the above copyright
11+
* notice, this list of conditions and the following disclaimer in the
12+
* documentation and/or other materials provided with the distribution.
13+
* 3. Neither the name of Apple Inc. ("Apple") nor the names of
14+
* its contributors may be used to endorse or promote products derived
15+
* from this software without specific prior written permission.
16+
*
17+
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18+
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20+
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21+
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24+
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26+
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27+
*/
28+
29+
#include "config.h"
30+
31+
#if PLATFORM(IOS_FAMILY)
32+
#include "AccessibilityMediaHelpers.h"
33+
34+
#include "AXObjectCache.h"
35+
#include "AccessibilityRenderObject.h"
36+
#include "HTMLMediaElement.h"
37+
#include "HTMLNames.h"
38+
#include "HTMLVideoElement.h"
39+
#include "LocalizedStrings.h"
40+
41+
namespace WebCore {
42+
43+
void AccessibilityMediaHelpers::enterFullscreen(HTMLVideoElement* videoElement)
44+
{
45+
if (videoElement)
46+
videoElement->enterFullscreen();
47+
}
48+
49+
void AccessibilityMediaHelpers::toggleMute(HTMLMediaElement* mediaElement)
50+
{
51+
if (mediaElement)
52+
mediaElement->setMuted(!mediaElement->muted());
53+
}
54+
55+
String AccessibilityMediaHelpers::interactiveVideoDuration(HTMLMediaElement* mediaElement)
56+
{
57+
return mediaElement ? localizedMediaTimeDescription(mediaElement->duration()) : String();
58+
}
59+
60+
bool AccessibilityMediaHelpers::isPlaying(HTMLMediaElement* mediaElement)
61+
{
62+
return mediaElement && mediaElement->isPlaying();
63+
}
64+
65+
bool AccessibilityMediaHelpers::isAutoplayEnabled(HTMLMediaElement* mediaElement)
66+
{
67+
return mediaElement && mediaElement->autoplay();
68+
}
69+
70+
bool AccessibilityMediaHelpers::isMuted(HTMLMediaElement* mediaElement)
71+
{
72+
return mediaElement && mediaElement->muted();
73+
}
74+
75+
bool AccessibilityMediaHelpers::press(HTMLMediaElement& mediaElement)
76+
{
77+
// We can safely call the internal togglePlayState method, which doesn't check restrictions,
78+
// because this method is only called from user interaction.
79+
mediaElement.togglePlayState();
80+
return true;
81+
}
82+
83+
void AccessibilityMediaHelpers::increment(HTMLMediaElement& mediaElement)
84+
{
85+
mediaSeek(mediaElement, AXSeekDirection::Forward);
86+
}
87+
88+
void AccessibilityMediaHelpers::decrement(HTMLMediaElement& mediaElement)
89+
{
90+
mediaSeek(mediaElement, AXSeekDirection::Backward);
91+
}
92+
93+
void AccessibilityMediaHelpers::mediaSeek(HTMLMediaElement& mediaElement, AXSeekDirection direction)
94+
{
95+
// Step 5% each time.
96+
constexpr double seekStep = .05;
97+
double current = mediaElement.currentTime();
98+
double duration = mediaElement.duration();
99+
double timeDelta = ceil(duration * seekStep);
100+
101+
double time = direction == AXSeekDirection::Forward ? std::min(current + timeDelta, duration) : std::max(current - timeDelta, 0.0);
102+
mediaElement.setCurrentTime(time);
103+
}
104+
105+
} // namespace WebCore
106+
107+
#endif // PLATFORM(IOS_FAMILY)

Source/WebCore/accessibility/AccessibilityMediaObject.h renamed to Source/WebCore/accessibility/AccessibilityMediaHelpers.h

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -30,44 +30,30 @@
3030

3131
#if PLATFORM(IOS_FAMILY)
3232

33-
#include "AccessibilityRenderObject.h"
34-
3533
namespace WebCore {
3634

37-
class AccessibilityMediaObject final : public AccessibilityRenderObject {
35+
class HTMLMediaElement;
36+
class HTMLVideoElement;
37+
38+
class AccessibilityMediaHelpers {
3839
public:
39-
static Ref<AccessibilityMediaObject> create(AXID, RenderObject&, AXObjectCache&);
40-
virtual ~AccessibilityMediaObject();
40+
static void enterFullscreen(HTMLVideoElement*);
41+
static void toggleMute(HTMLMediaElement*);
42+
static String interactiveVideoDuration(HTMLMediaElement*);
4143

42-
void enterFullscreen() const;
43-
void toggleMute();
44+
static bool isPlaying(HTMLMediaElement*);
45+
static bool isAutoplayEnabled(HTMLMediaElement*);
46+
static bool isMuted(HTMLMediaElement*);
4447

45-
String interactiveVideoDuration() const;
46-
bool isPlaying() const;
47-
bool isAutoplayEnabled() const;
48-
bool isPlayingInline() const;
49-
bool isMuted() const;
48+
static bool press(HTMLMediaElement&);
49+
static void increment(HTMLMediaElement&);
50+
static void decrement(HTMLMediaElement&);
5051

5152
private:
52-
explicit AccessibilityMediaObject(AXID, RenderObject&, AXObjectCache&);
53-
5453
enum class AXSeekDirection : bool { Backward, Forward };
55-
bool computeIsIgnored() const final;
56-
bool isMediaObject() const final { return true; }
57-
58-
String stringValue() const final;
59-
bool press() final;
60-
void increment() final;
61-
void decrement() final;
62-
63-
HTMLMediaElement* mediaElement() const;
64-
65-
void mediaSeek(AXSeekDirection);
54+
static void mediaSeek(HTMLMediaElement&, AXSeekDirection);
6655
};
6756

6857
} // namespace WebCore
6958

70-
SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::AccessibilityMediaObject) \
71-
static bool isType(const WebCore::AccessibilityObject& object) { return object.isMediaObject(); } \
72-
SPECIALIZE_TYPE_TRAITS_END()
7359
#endif // PLATFORM(IOS_FAMILY)

Source/WebCore/accessibility/AccessibilityMediaObject.cpp

Lines changed: 0 additions & 172 deletions
This file was deleted.

0 commit comments

Comments
 (0)