Diff
Modified: trunk/LayoutTests/ChangeLog (229309 => 229310)
--- trunk/LayoutTests/ChangeLog 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/LayoutTests/ChangeLog 2018-03-06 08:18:53 UTC (rev 229310)
@@ -1,3 +1,15 @@
+2018-03-06 Nan Wang <n_w...@apple.com>
+
+ AX: AOM: More accessibility events support
+ https://bugs.webkit.org/show_bug.cgi?id=183023
+ <rdar://problem/37764380>
+
+ Reviewed by Chris Fleizach.
+
+ * accessibility/mac/AOM-events-all-expected.txt: Added.
+ * accessibility/mac/AOM-events-all.html: Added.
+ * js/dom/dom-static-property-for-in-iteration-expected.txt:
+
2018-03-05 Yoav Weiss <y...@yoav.ws>
Support for preconnect Link headers
Added: trunk/LayoutTests/accessibility/mac/AOM-events-all-expected.txt (0 => 229310)
--- trunk/LayoutTests/accessibility/mac/AOM-events-all-expected.txt (rev 0)
+++ trunk/LayoutTests/accessibility/mac/AOM-events-all-expected.txt 2018-03-06 08:18:53 UTC (rev 229310)
@@ -0,0 +1,26 @@
+ button
+This tests all accessibility events.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Test accessibleincrement and accessibledecrement
+received accessibleincrement event
+received accessibledecrement event
+
+Test accessiblefocus
+received accessiblefocus event
+
+Test accessiblescrollintoview
+received accessiblescrollintoview event
+
+Test accessiblecontextmenu
+received accessiblecontextmenu event
+
+Test accessibleselect
+received accessibleselect event
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/accessibility/mac/AOM-events-all.html (0 => 229310)
--- trunk/LayoutTests/accessibility/mac/AOM-events-all.html (rev 0)
+++ trunk/LayoutTests/accessibility/mac/AOM-events-all.html 2018-03-06 08:18:53 UTC (rev 229310)
@@ -0,0 +1,105 @@
+<!DOCTYPE html>
+<html>
+<body id="body">
+<script src=""
+<div id="content">
+
+<input type="range" min="0" max="100" value="25" step="25" id="slider"/>
+<input type="text" id="input">
+<button id="button">button</button>
+
+<select id="group" multiple="multiple">
+ <option id="option">Option 1</option>
+ <option>Option 2</option>
+</select>
+
+</div>
+
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+
+ description("This tests all accessibility events.");
+
+ if (window.accessibilityController) {
+ jsTestIsAsync = true;
+
+ var node;
+ var axNode;
+
+ testIncrementDecrement();
+
+ function testIncrementDecrement() {
+ debug("\nTest accessibleincrement and accessibledecrement");
+ node = document.getElementById("slider");
+ axNode = accessibilityController.accessibleElementById("slider");
+
+ node._onaccessibleincrement_ = function() {
+ debug("received accessibleincrement event");
+ };
+ node._onaccessibledecrement_ = function() {
+ debug("received accessibledecrement event");
+ };
+ axNode.increment();
+ axNode.decrement();
+
+ testFocus();
+ }
+
+ function testFocus() {
+ debug("\nTest accessiblefocus");
+ node = document.getElementById("input");
+ axNode = accessibilityController.accessibleElementById("input");
+
+ node._onaccessiblefocus_ = function() {
+ debug("received accessiblefocus event");
+ testScrollIntoView();
+ };
+ axNode.takeFocus();
+ }
+
+ function testScrollIntoView() {
+ debug("\nTest accessiblescrollintoview");
+ node = document.getElementById("button");
+ axNode = accessibilityController.accessibleElementById("button");
+
+ node._onaccessiblescrollintoview_ = function() {
+ debug("received accessiblescrollintoview event");
+ testShowContextMenu();
+ };
+ axNode.scrollToMakeVisible();
+ }
+
+ function testShowContextMenu() {
+ debug("\nTest accessiblecontextmenu");
+ node = document.getElementById("button");
+ axNode = accessibilityController.accessibleElementById("button");
+
+ node._onaccessiblecontextmenu_ = function() {
+ debug("received accessiblecontextmenu event");
+ testSelect();
+ };
+ axNode.showMenu();
+ }
+
+ function testSelect() {
+ debug("\nTest accessibleselect");
+ node = document.getElementById("option");
+ axNode = accessibilityController.accessibleElementById("group");
+ node._onaccessibleselect_ = function() {
+ debug("received accessibleselect event");
+ finishJSTest();
+ }
+ axNode.setSelectedChildAtIndex(0);
+ }
+
+ } else {
+ testFailed("Could not load accessibility controller");
+ }
+
+</script>
+
+<script src=""
+</body>
+</html>
Modified: trunk/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt (229309 => 229310)
--- trunk/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt 2018-03-06 08:18:53 UTC (rev 229310)
@@ -134,8 +134,15 @@
PASS a["clientHeight"] is 0
PASS a["innerHTML"] is nerget
PASS a["outerHTML"] is <a id="foo" href=""
+PASS a["onaccessiblecontextmenu"] is null
PASS a["onaccessibleclick"] is null
+PASS a["onaccessibledecrement"] is null
+PASS a["onaccessibledismiss"] is null
+PASS a["onaccessiblefocus"] is null
+PASS a["onaccessibleincrement"] is null
+PASS a["onaccessiblescrollintoview"] is null
PASS a["onaccessiblesetvalue"] is null
+PASS a["onaccessibleselect"] is null
PASS a["oncopy"] is null
PASS a["oncut"] is null
PASS a["onpaste"] is null
Modified: trunk/LayoutTests/platform/mac-wk1/TestExpectations (229309 => 229310)
--- trunk/LayoutTests/platform/mac-wk1/TestExpectations 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/LayoutTests/platform/mac-wk1/TestExpectations 2018-03-06 08:18:53 UTC (rev 229310)
@@ -494,6 +494,7 @@
webkit.org/b/172044 [ Debug ] imported/w3c/web-platform-tests/IndexedDB/open-request-queue.html [ Pass Timeout ]
webkit.org/b/180898 accessibility/mac/AOM-events.html [ Skip ]
+webkit.org/b/183023 accessibility/mac/AOM-events-all.html [ Skip ]
webkit.org/b/182752 accessibility/mac/accessibility-make-first-responder.html [ Skip ]
Modified: trunk/Source/WebCore/ChangeLog (229309 => 229310)
--- trunk/Source/WebCore/ChangeLog 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/Source/WebCore/ChangeLog 2018-03-06 08:18:53 UTC (rev 229310)
@@ -1,3 +1,54 @@
+2018-03-06 Nan Wang <n_w...@apple.com>
+
+ AX: AOM: More accessibility events support
+ https://bugs.webkit.org/show_bug.cgi?id=183023
+ <rdar://problem/37764380>
+
+ Reviewed by Chris Fleizach.
+
+ Accessibility events.
+ Spec: https://wicg.github.io/aom/spec/phase2.html
+
+ This change adds support for these new events:
+ accessiblecontextmenu
+ accessibledecrement
+ accessibledismiss
+ accessiblefocus
+ accessibleincrement
+ accessiblescrollintoview
+ accessibleselect
+
+ Note: The show context menu action is only supported on macOS now.
+ The dismiss action is not implemented for all the platforms yet.
+
+ Test: accessibility/mac/AOM-events-all.html
+
+ * accessibility/AccessibilityListBoxOption.cpp:
+ (WebCore::AccessibilityListBoxOption::setSelected):
+ * accessibility/AccessibilityMediaObject.cpp:
+ (WebCore::AccessibilityMediaObject::increment):
+ (WebCore::AccessibilityMediaObject::decrement):
+ * accessibility/AccessibilityMenuListOption.cpp:
+ (WebCore::AccessibilityMenuListOption::setSelected):
+ * accessibility/AccessibilityNodeObject.cpp:
+ (WebCore::AccessibilityNodeObject::increment):
+ (WebCore::AccessibilityNodeObject::decrement):
+ * accessibility/AccessibilityObject.cpp:
+ (WebCore::AccessibilityObject::press):
+ (WebCore::AccessibilityObject::dispatchAccessibilityEvent const):
+ (WebCore::AccessibilityObject::dispatchAccessibilityEventWithType const):
+ (WebCore::AccessibilityObject::dispatchAccessibleSetValueEvent const):
+ (WebCore::AccessibilityObject::scrollToMakeVisible const):
+ (WebCore::AccessibilityObject::dispatchAccessibilityEvent): Deleted.
+ (WebCore::AccessibilityObject::dispatchAccessibleSetValueEvent): Deleted.
+ * accessibility/AccessibilityObject.h:
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::setFocused):
+ * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
+ (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):
+ * dom/Element.idl:
+ * dom/EventNames.h:
+
2018-03-05 Yusuke Suzuki <utatane....@gmail.com>
Fix std::make_unique / new[] using system malloc
Modified: trunk/Source/WebCore/accessibility/AccessibilityListBoxOption.cpp (229309 => 229310)
--- trunk/Source/WebCore/accessibility/AccessibilityListBoxOption.cpp 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/Source/WebCore/accessibility/AccessibilityListBoxOption.cpp 2018-03-06 08:18:53 UTC (rev 229310)
@@ -177,6 +177,9 @@
if (!canSetSelectedAttribute())
return;
+ if (selected && dispatchAccessibilityEventWithType(AccessibilityEventType::Select))
+ return;
+
bool isOptionSelected = isSelected();
if ((isOptionSelected && selected) || (!isOptionSelected && !selected))
return;
Modified: trunk/Source/WebCore/accessibility/AccessibilityMediaObject.cpp (229309 => 229310)
--- trunk/Source/WebCore/accessibility/AccessibilityMediaObject.cpp 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/Source/WebCore/accessibility/AccessibilityMediaObject.cpp 2018-03-06 08:18:53 UTC (rev 229310)
@@ -107,11 +107,15 @@
void AccessibilityMediaObject::increment()
{
+ if (dispatchAccessibilityEventWithType(AccessibilityEventType::Increment))
+ return;
mediaSeek(AXSeekForward);
}
void AccessibilityMediaObject::decrement()
{
+ if (dispatchAccessibilityEventWithType(AccessibilityEventType::Decrement))
+ return;
mediaSeek(AXSeekBackward);
}
Modified: trunk/Source/WebCore/accessibility/AccessibilityMenuListOption.cpp (229309 => 229310)
--- trunk/Source/WebCore/accessibility/AccessibilityMenuListOption.cpp 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/Source/WebCore/accessibility/AccessibilityMenuListOption.cpp 2018-03-06 08:18:53 UTC (rev 229310)
@@ -82,6 +82,9 @@
{
if (!canSetSelectedAttribute())
return;
+
+ if (selected && dispatchAccessibilityEventWithType(AccessibilityEventType::Select))
+ return;
downcast<HTMLOptionElement>(*m_element).setSelected(selected);
}
Modified: trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp (229309 => 229310)
--- trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp 2018-03-06 08:18:53 UTC (rev 229310)
@@ -1072,6 +1072,8 @@
void AccessibilityNodeObject::increment()
{
+ if (dispatchAccessibilityEventWithType(AccessibilityEventType::Increment))
+ return;
UserGestureIndicator gestureIndicator(ProcessingUserGesture, document());
alterSliderValue(true);
}
@@ -1078,6 +1080,8 @@
void AccessibilityNodeObject::decrement()
{
+ if (dispatchAccessibilityEventWithType(AccessibilityEventType::Decrement))
+ return;
UserGestureIndicator gestureIndicator(ProcessingUserGesture, document());
alterSliderValue(false);
}
Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (229309 => 229310)
--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp 2018-03-06 08:18:53 UTC (rev 229310)
@@ -997,8 +997,7 @@
// dispatch accessibleclick event
if (auto* cache = axObjectCache()) {
if (auto* pressObject = cache->getOrCreate(pressElement)) {
- auto event = Event::create(eventNames().accessibleclickEvent, true, true);
- if (pressObject->dispatchAccessibilityEvent(event))
+ if (pressObject->dispatchAccessibilityEventWithType(AccessibilityEventType::Click))
return true;
}
}
@@ -2153,10 +2152,12 @@
return nullAtom();
}
-bool AccessibilityObject::dispatchAccessibilityEvent(Event& event)
+bool AccessibilityObject::dispatchAccessibilityEvent(Event& event) const
{
Vector<Element*> eventPath;
for (auto* parentObject = this; parentObject; parentObject = parentObject->parentObject()) {
+ if (parentObject->isWebArea())
+ break;
if (auto* parentElement = parentObject->element())
eventPath.append(parentElement);
}
@@ -2167,8 +2168,44 @@
return event.defaultPrevented();
}
-bool AccessibilityObject::dispatchAccessibleSetValueEvent(const String& value)
+bool AccessibilityObject::dispatchAccessibilityEventWithType(AccessibilityEventType type) const
{
+ AtomicString eventName;
+ switch (type) {
+ case AccessibilityEventType::ContextMenu:
+ eventName = eventNames().accessiblecontextmenuEvent;
+ break;
+ case AccessibilityEventType::Click:
+ eventName = eventNames().accessibleclickEvent;
+ break;
+ case AccessibilityEventType::Decrement:
+ eventName = eventNames().accessibledecrementEvent;
+ break;
+ case AccessibilityEventType::Dismiss:
+ eventName = eventNames().accessibledismissEvent;
+ break;
+ case AccessibilityEventType::Focus:
+ eventName = eventNames().accessiblefocusEvent;
+ break;
+ case AccessibilityEventType::Increment:
+ eventName = eventNames().accessibleincrementEvent;
+ break;
+ case AccessibilityEventType::ScrollIntoView:
+ eventName = eventNames().accessiblescrollintoviewEvent;
+ break;
+ case AccessibilityEventType::Select:
+ eventName = eventNames().accessibleselectEvent;
+ break;
+ default:
+ return false;
+ }
+
+ auto event = Event::create(eventName, true, true);
+ return dispatchAccessibilityEvent(event);
+}
+
+bool AccessibilityObject::dispatchAccessibleSetValueEvent(const String& value) const
+{
if (!canSetValueAttribute())
return false;
auto event = AccessibleSetValueEvent::create(eventNames().accessiblesetvalueEvent, value);
@@ -2924,6 +2961,8 @@
void AccessibilityObject::scrollToMakeVisible() const
{
+ if (dispatchAccessibilityEventWithType(AccessibilityEventType::ScrollIntoView))
+ return;
IntRect objectRect = snappedIntRect(boundingBoxRect());
objectRect.setLocation(IntPoint());
scrollToMakeVisibleWithSubFocus(objectRect);
Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (229309 => 229310)
--- trunk/Source/WebCore/accessibility/AccessibilityObject.h 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h 2018-03-06 08:18:53 UTC (rev 229310)
@@ -254,6 +254,17 @@
Subtitle,
Action,
};
+
+enum class AccessibilityEventType {
+ ContextMenu,
+ Click,
+ Decrement,
+ Dismiss,
+ Focus,
+ Increment,
+ ScrollIntoView,
+ Select,
+};
struct AccessibilityText {
String text;
@@ -895,8 +906,9 @@
const AtomicString& getAttribute(const QualifiedName&) const;
bool hasTagName(const QualifiedName&) const;
- bool dispatchAccessibilityEvent(Event&);
- bool dispatchAccessibleSetValueEvent(const String&);
+ bool dispatchAccessibilityEvent(Event&) const;
+ bool dispatchAccessibilityEventWithType(AccessibilityEventType) const;
+ bool dispatchAccessibleSetValueEvent(const String&) const;
virtual VisiblePositionRange visiblePositionRange() const { return VisiblePositionRange(); }
virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const { return VisiblePositionRange(); }
Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (229309 => 229310)
--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2018-03-06 08:18:53 UTC (rev 229310)
@@ -1707,6 +1707,9 @@
void AccessibilityRenderObject::setFocused(bool on)
{
+ if (on && dispatchAccessibilityEventWithType(AccessibilityEventType::Focus))
+ return;
+
if (!canSetFocusAttribute())
return;
Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (229309 => 229310)
--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm 2018-03-06 08:18:53 UTC (rev 229310)
@@ -3539,6 +3539,9 @@
if (!page)
return;
+ if (m_object->dispatchAccessibilityEventWithType(AccessibilityEventType::ContextMenu))
+ return;
+
IntRect rect = snappedIntRect(m_object->elementRect());
FrameView* frameView = m_object->documentFrameView();
Modified: trunk/Source/WebCore/dom/Element.idl (229309 => 229310)
--- trunk/Source/WebCore/dom/Element.idl 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/Source/WebCore/dom/Element.idl 2018-03-06 08:18:53 UTC (rev 229310)
@@ -142,8 +142,15 @@
[NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventHandler onwebkitplaybacktargetavailabilitychanged;
// Accessibility events.
+ [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessiblecontextmenu;
[EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibleclick;
+ [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibledecrement;
+ [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibledismiss;
+ [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessiblefocus;
+ [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibleincrement;
+ [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessiblescrollintoview;
[EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessiblesetvalue;
+ [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibleselect;
};
dictionary ShadowRootInit {
Modified: trunk/Source/WebCore/dom/EventNames.h (229309 => 229310)
--- trunk/Source/WebCore/dom/EventNames.h 2018-03-06 07:25:14 UTC (rev 229309)
+++ trunk/Source/WebCore/dom/EventNames.h 2018-03-06 08:18:53 UTC (rev 229310)
@@ -45,8 +45,15 @@
macro(DOMNodeRemovedFromDocument) \
macro(DOMSubtreeModified) \
macro(abort) \
+ macro(accessiblecontextmenu) \
macro(accessibleclick) \
+ macro(accessibledecrement) \
+ macro(accessibledismiss) \
+ macro(accessiblefocus) \
+ macro(accessibleincrement) \
+ macro(accessiblescrollintoview) \
macro(accessiblesetvalue) \
+ macro(accessibleselect) \
macro(activate) \
macro(active) \
macro(addsourcebuffer) \