Changeset 229310 in webkit


Ignore:
Timestamp:
Mar 6, 2018 12:18:53 AM (6 years ago)
Author:
n_wang@apple.com
Message:

AX: AOM: More accessibility events support
https://bugs.webkit.org/show_bug.cgi?id=183023
<rdar://problem/37764380>

Reviewed by Chris Fleizach.

Source/WebCore:

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:

LayoutTests:

  • 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:
Location:
trunk
Files:
2 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r229308 r229310  
     12018-03-06  Nan Wang  <n_wang@apple.com>
     2
     3        AX: AOM: More accessibility events support
     4        https://bugs.webkit.org/show_bug.cgi?id=183023
     5        <rdar://problem/37764380>
     6
     7        Reviewed by Chris Fleizach.
     8
     9        * accessibility/mac/AOM-events-all-expected.txt: Added.
     10        * accessibility/mac/AOM-events-all.html: Added.
     11        * js/dom/dom-static-property-for-in-iteration-expected.txt:
     12
    1132018-03-05  Yoav Weiss  <yoav@yoav.ws>
    214
  • trunk/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt

    r229112 r229310  
    135135PASS a["innerHTML"] is nerget
    136136PASS a["outerHTML"] is <a id="foo" href="bar">nerget</a>
     137PASS a["onaccessiblecontextmenu"] is null
    137138PASS a["onaccessibleclick"] is null
     139PASS a["onaccessibledecrement"] is null
     140PASS a["onaccessibledismiss"] is null
     141PASS a["onaccessiblefocus"] is null
     142PASS a["onaccessibleincrement"] is null
     143PASS a["onaccessiblescrollintoview"] is null
    138144PASS a["onaccessiblesetvalue"] is null
     145PASS a["onaccessibleselect"] is null
    139146PASS a["oncopy"] is null
    140147PASS a["oncut"] is null
  • trunk/LayoutTests/platform/mac-wk1/TestExpectations

    r229297 r229310  
    495495
    496496webkit.org/b/180898 accessibility/mac/AOM-events.html [ Skip ]
     497webkit.org/b/183023 accessibility/mac/AOM-events-all.html [ Skip ]
    497498
    498499webkit.org/b/182752 accessibility/mac/accessibility-make-first-responder.html [ Skip ]
  • trunk/Source/WebCore/ChangeLog

    r229309 r229310  
     12018-03-06  Nan Wang  <n_wang@apple.com>
     2
     3        AX: AOM: More accessibility events support
     4        https://bugs.webkit.org/show_bug.cgi?id=183023
     5        <rdar://problem/37764380>
     6
     7        Reviewed by Chris Fleizach.
     8
     9        Accessibility events.
     10        Spec: https://wicg.github.io/aom/spec/phase2.html
     11
     12        This change adds support for these new events:
     13          accessiblecontextmenu
     14          accessibledecrement
     15          accessibledismiss
     16          accessiblefocus
     17          accessibleincrement
     18          accessiblescrollintoview
     19          accessibleselect
     20
     21        Note: The show context menu action is only supported on macOS now.
     22        The dismiss action is not implemented for all the platforms yet.
     23
     24        Test: accessibility/mac/AOM-events-all.html
     25
     26        * accessibility/AccessibilityListBoxOption.cpp:
     27        (WebCore::AccessibilityListBoxOption::setSelected):
     28        * accessibility/AccessibilityMediaObject.cpp:
     29        (WebCore::AccessibilityMediaObject::increment):
     30        (WebCore::AccessibilityMediaObject::decrement):
     31        * accessibility/AccessibilityMenuListOption.cpp:
     32        (WebCore::AccessibilityMenuListOption::setSelected):
     33        * accessibility/AccessibilityNodeObject.cpp:
     34        (WebCore::AccessibilityNodeObject::increment):
     35        (WebCore::AccessibilityNodeObject::decrement):
     36        * accessibility/AccessibilityObject.cpp:
     37        (WebCore::AccessibilityObject::press):
     38        (WebCore::AccessibilityObject::dispatchAccessibilityEvent const):
     39        (WebCore::AccessibilityObject::dispatchAccessibilityEventWithType const):
     40        (WebCore::AccessibilityObject::dispatchAccessibleSetValueEvent const):
     41        (WebCore::AccessibilityObject::scrollToMakeVisible const):
     42        (WebCore::AccessibilityObject::dispatchAccessibilityEvent): Deleted.
     43        (WebCore::AccessibilityObject::dispatchAccessibleSetValueEvent): Deleted.
     44        * accessibility/AccessibilityObject.h:
     45        * accessibility/AccessibilityRenderObject.cpp:
     46        (WebCore::AccessibilityRenderObject::setFocused):
     47        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
     48        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):
     49        * dom/Element.idl:
     50        * dom/EventNames.h:
     51
    1522018-03-05  Yusuke Suzuki  <utatane.tea@gmail.com>
    253
  • trunk/Source/WebCore/accessibility/AccessibilityListBoxOption.cpp

    r228427 r229310  
    178178        return;
    179179   
     180    if (selected && dispatchAccessibilityEventWithType(AccessibilityEventType::Select))
     181        return;
     182   
    180183    bool isOptionSelected = isSelected();
    181184    if ((isOptionSelected && selected) || (!isOptionSelected && !selected))
  • trunk/Source/WebCore/accessibility/AccessibilityMediaObject.cpp

    r223728 r229310  
    108108void AccessibilityMediaObject::increment()
    109109{
     110    if (dispatchAccessibilityEventWithType(AccessibilityEventType::Increment))
     111        return;
    110112    mediaSeek(AXSeekForward);
    111113}
     
    113115void AccessibilityMediaObject::decrement()
    114116{
     117    if (dispatchAccessibilityEventWithType(AccessibilityEventType::Decrement))
     118        return;
    115119    mediaSeek(AXSeekBackward);
    116120}
  • trunk/Source/WebCore/accessibility/AccessibilityMenuListOption.cpp

    r191964 r229310  
    8383    if (!canSetSelectedAttribute())
    8484        return;
     85   
     86    if (selected && dispatchAccessibilityEventWithType(AccessibilityEventType::Select))
     87        return;
    8588
    8689    downcast<HTMLOptionElement>(*m_element).setSelected(selected);
  • trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp

    r229112 r229310  
    10731073void AccessibilityNodeObject::increment()
    10741074{
     1075    if (dispatchAccessibilityEventWithType(AccessibilityEventType::Increment))
     1076        return;
    10751077    UserGestureIndicator gestureIndicator(ProcessingUserGesture, document());
    10761078    alterSliderValue(true);
     
    10791081void AccessibilityNodeObject::decrement()
    10801082{
     1083    if (dispatchAccessibilityEventWithType(AccessibilityEventType::Decrement))
     1084        return;
    10811085    UserGestureIndicator gestureIndicator(ProcessingUserGesture, document());
    10821086    alterSliderValue(false);
  • trunk/Source/WebCore/accessibility/AccessibilityObject.cpp

    r229112 r229310  
    998998    if (auto* cache = axObjectCache()) {
    999999        if (auto* pressObject = cache->getOrCreate(pressElement)) {
    1000             auto event = Event::create(eventNames().accessibleclickEvent, true, true);
    1001             if (pressObject->dispatchAccessibilityEvent(event))
     1000            if (pressObject->dispatchAccessibilityEventWithType(AccessibilityEventType::Click))
    10021001                return true;
    10031002        }
     
    21542153}
    21552154
    2156 bool AccessibilityObject::dispatchAccessibilityEvent(Event& event)
     2155bool AccessibilityObject::dispatchAccessibilityEvent(Event& event) const
    21572156{
    21582157    Vector<Element*> eventPath;
    21592158    for (auto* parentObject = this; parentObject; parentObject = parentObject->parentObject()) {
     2159        if (parentObject->isWebArea())
     2160            break;
    21602161        if (auto* parentElement = parentObject->element())
    21612162            eventPath.append(parentElement);
     
    21682169}
    21692170
    2170 bool AccessibilityObject::dispatchAccessibleSetValueEvent(const String& value)
     2171bool AccessibilityObject::dispatchAccessibilityEventWithType(AccessibilityEventType type) const
     2172{
     2173    AtomicString eventName;
     2174    switch (type) {
     2175    case AccessibilityEventType::ContextMenu:
     2176        eventName = eventNames().accessiblecontextmenuEvent;
     2177        break;
     2178    case AccessibilityEventType::Click:
     2179        eventName = eventNames().accessibleclickEvent;
     2180        break;
     2181    case AccessibilityEventType::Decrement:
     2182        eventName = eventNames().accessibledecrementEvent;
     2183        break;
     2184    case AccessibilityEventType::Dismiss:
     2185        eventName = eventNames().accessibledismissEvent;
     2186        break;
     2187    case AccessibilityEventType::Focus:
     2188        eventName = eventNames().accessiblefocusEvent;
     2189        break;
     2190    case AccessibilityEventType::Increment:
     2191        eventName = eventNames().accessibleincrementEvent;
     2192        break;
     2193    case AccessibilityEventType::ScrollIntoView:
     2194        eventName = eventNames().accessiblescrollintoviewEvent;
     2195        break;
     2196    case AccessibilityEventType::Select:
     2197        eventName = eventNames().accessibleselectEvent;
     2198        break;
     2199    default:
     2200        return false;
     2201    }
     2202   
     2203    auto event = Event::create(eventName, true, true);
     2204    return dispatchAccessibilityEvent(event);
     2205}
     2206
     2207bool AccessibilityObject::dispatchAccessibleSetValueEvent(const String& value) const
    21712208{
    21722209    if (!canSetValueAttribute())
     
    29252962void AccessibilityObject::scrollToMakeVisible() const
    29262963{
     2964    if (dispatchAccessibilityEventWithType(AccessibilityEventType::ScrollIntoView))
     2965        return;
    29272966    IntRect objectRect = snappedIntRect(boundingBoxRect());
    29282967    objectRect.setLocation(IntPoint());
  • trunk/Source/WebCore/accessibility/AccessibilityObject.h

    r229112 r229310  
    255255    Action,
    256256};
     257
     258enum class AccessibilityEventType {
     259    ContextMenu,
     260    Click,
     261    Decrement,
     262    Dismiss,
     263    Focus,
     264    Increment,
     265    ScrollIntoView,
     266    Select,
     267};
    257268   
    258269struct AccessibilityText {
     
    896907    bool hasTagName(const QualifiedName&) const;
    897908   
    898     bool dispatchAccessibilityEvent(Event&);
    899     bool dispatchAccessibleSetValueEvent(const String&);
     909    bool dispatchAccessibilityEvent(Event&) const;
     910    bool dispatchAccessibilityEventWithType(AccessibilityEventType) const;
     911    bool dispatchAccessibleSetValueEvent(const String&) const;
    900912
    901913    virtual VisiblePositionRange visiblePositionRange() const { return VisiblePositionRange(); }
  • trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp

    r229112 r229310  
    17081708void AccessibilityRenderObject::setFocused(bool on)
    17091709{
     1710    if (on && dispatchAccessibilityEventWithType(AccessibilityEventType::Focus))
     1711        return;
     1712   
    17101713    if (!canSetFocusAttribute())
    17111714        return;
  • trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm

    r229080 r229310  
    35403540        return;
    35413541   
     3542    if (m_object->dispatchAccessibilityEventWithType(AccessibilityEventType::ContextMenu))
     3543        return;
     3544   
    35423545    IntRect rect = snappedIntRect(m_object->elementRect());
    35433546    FrameView* frameView = m_object->documentFrameView();
  • trunk/Source/WebCore/dom/Element.idl

    r229112 r229310  
    143143
    144144    // Accessibility events.
     145    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessiblecontextmenu;
    145146    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibleclick;
     147    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibledecrement;
     148    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibledismiss;
     149    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessiblefocus;
     150    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibleincrement;
     151    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessiblescrollintoview;
    146152    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessiblesetvalue;
     153    [EnabledAtRuntime=AccessibilityObjectModel] attribute EventHandler onaccessibleselect;
    147154};
    148155
  • trunk/Source/WebCore/dom/EventNames.h

    r229112 r229310  
    4646    macro(DOMSubtreeModified) \
    4747    macro(abort) \
     48    macro(accessiblecontextmenu) \
    4849    macro(accessibleclick) \
     50    macro(accessibledecrement) \
     51    macro(accessibledismiss) \
     52    macro(accessiblefocus) \
     53    macro(accessibleincrement) \
     54    macro(accessiblescrollintoview) \
    4955    macro(accessiblesetvalue) \
     56    macro(accessibleselect) \
    5057    macro(activate) \
    5158    macro(active) \
Note: See TracChangeset for help on using the changeset viewer.