Changeset 270333 in webkit
- Timestamp:
- Dec 1, 2020 4:55:04 PM (20 months ago)
- Location:
- trunk
- Files:
-
- 4 added
- 16 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/accessibility/ios-simulator/checked-status-tree-items-expected.txt (added)
-
LayoutTests/accessibility/ios-simulator/checked-status-tree-items.html (added)
-
LayoutTests/accessibility/ios-simulator/toggle-button-expected.txt (modified) (1 diff)
-
LayoutTests/accessibility/mac/checked-status-tree-items-expected.txt (added)
-
LayoutTests/accessibility/mac/checked-status-tree-items.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/accessibility/AXObjectCache.cpp (modified) (1 diff)
-
Source/WebCore/accessibility/AccessibilityNodeObject.cpp (modified) (1 diff)
-
Source/WebCore/accessibility/AccessibilityObject.cpp (modified) (1 diff)
-
Source/WebCore/accessibility/AccessibilityObject.h (modified) (1 diff)
-
Source/WebCore/accessibility/AccessibilityObjectInterface.h (modified) (1 diff)
-
Source/WebCore/accessibility/AccessibilityTreeItem.cpp (modified) (1 diff)
-
Source/WebCore/accessibility/AccessibilityTreeItem.h (modified) (1 diff)
-
Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm (modified) (2 diffs)
-
Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm (modified) (2 diffs)
-
Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp (modified) (1 diff)
-
Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h (modified) (1 diff)
-
Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h (modified) (1 diff)
-
Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r270329 r270333 1 2020-12-01 Chris Fleizach <cfleizach@apple.com> 2 3 AX: VoiceOver does not announce the aria-checked state for ARIA treeitem 4 https://bugs.webkit.org/show_bug.cgi?id=218316 5 <rdar://problem/70787809> 6 7 Reviewed by Zalan Bujtas. 8 9 * accessibility/ios-simulator/checked-status-tree-items-expected.txt: Added. 10 * accessibility/ios-simulator/checked-status-tree-items.html: Added. 11 * accessibility/mac/checked-status-tree-items-expected.txt: Added. 12 * accessibility/mac/checked-status-tree-items.html: Added. 13 1 14 2020-12-01 Truitt Savell <tsavell@apple.com> 2 15 -
trunk/LayoutTests/accessibility/ios-simulator/toggle-button-expected.txt
r267644 r270333 6 6 7 7 Button1 : AXLabel: Bold 8 Button1 : AXValue: 8 Button1 : AXValue: 0 9 9 Button2 : AXLabel: Italic 10 10 Button2 : AXValue: 1 -
trunk/Source/WebCore/ChangeLog
r270331 r270333 1 2020-12-01 Chris Fleizach <cfleizach@apple.com> 2 3 AX: VoiceOver does not announce the aria-checked state for ARIA treeitem 4 https://bugs.webkit.org/show_bug.cgi?id=218316 5 <rdar://problem/70787809> 6 7 Reviewed by Zalan Bujtas. 8 9 Tree items need to be able to support their aria-checked status according to WAI-ARIA. 10 In addition, when the value changes they need to be able to post an appropriate notification. 11 While working on this, I realized that if an attribute changes, the notification is not fired until the next layout change 12 which is problematic. Those need to fire immediately. 13 14 Test: accessibility/mac/checked-status-tree-items.html 15 accessibility/ios-simulator/checked-status-tree-items.html 16 17 * accessibility/AXObjectCache.cpp: 18 (WebCore::AXObjectCache::deferAttributeChangeIfNeeded): 19 * accessibility/AccessibilityNodeObject.cpp: 20 (WebCore::AccessibilityNodeObject::isChecked const): 21 * accessibility/AccessibilityObject.cpp: 22 (WebCore::AccessibilityObject::supportsCheckedState const): 23 * accessibility/AccessibilityObject.h: 24 * accessibility/AccessibilityObjectInterface.h: 25 * accessibility/AccessibilityTreeItem.cpp: 26 (WebCore::AccessibilityTreeItem::supportsCheckedState const): 27 * accessibility/AccessibilityTreeItem.h: 28 * accessibility/ios/AXObjectCacheIOS.mm: 29 (WebCore::AXObjectCache::postPlatformNotification): 30 * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: 31 (-[WebAccessibilityObjectWrapper accessibilityTraits]): 32 (-[WebAccessibilityObjectWrapper accessibilityValue]): 33 * accessibility/isolatedtree/AXIsolatedObject.cpp: 34 (WebCore::AXIsolatedObject::initializeAttributeData): 35 * accessibility/isolatedtree/AXIsolatedObject.h: 36 * accessibility/isolatedtree/AXIsolatedTree.h: 37 * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: 38 (AXAttributedStringAppendText): 39 (-[WebAccessibilityObjectWrapper ALLOW_DEPRECATED_IMPLEMENTATIONS_END]): 40 (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]): 41 1 42 2020-12-01 Andres Gonzalez <andresg_22@apple.com> 2 43 -
trunk/Source/WebCore/accessibility/AXObjectCache.cpp
r270238 r270333 1700 1700 void AXObjectCache::deferAttributeChangeIfNeeded(const QualifiedName& attrName, Element* element) 1701 1701 { 1702 if (nodeAndRendererAreValid(element) && rendererNeedsDeferredUpdate(*element->renderer())) 1702 if (nodeAndRendererAreValid(element) && rendererNeedsDeferredUpdate(*element->renderer())) { 1703 1703 m_deferredAttributeChange.add(element, attrName); 1704 if (!m_performCacheUpdateTimer.isActive()) 1705 m_performCacheUpdateTimer.startOneShot(0_s); 1706 } 1704 1707 else 1705 1708 handleAttributeChange(attrName, element); -
trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp
r269848 r270333 692 692 case AccessibilityRole::MenuItemRadio: 693 693 case AccessibilityRole::Switch: 694 case AccessibilityRole::TreeItem: 694 695 validRole = true; 695 696 break; -
trunk/Source/WebCore/accessibility/AccessibilityObject.cpp
r270154 r270333 1488 1488 1489 1489 return getAttribute(aria_readonlyAttr).string().convertToASCIILowercase(); 1490 } 1491 1492 bool AccessibilityObject::supportsCheckedState() const 1493 { 1494 auto role = roleValue(); 1495 return isCheckboxOrRadio() 1496 || role == AccessibilityRole::MenuItemCheckbox 1497 || role == AccessibilityRole::MenuItemRadio 1498 || role == AccessibilityRole::Switch 1499 || isToggleButton(); 1490 1500 } 1491 1501 -
trunk/Source/WebCore/accessibility/AccessibilityObject.h
r269923 r270333 276 276 double estimatedLoadingProgress() const override { return 0; } 277 277 WEBCORE_EXPORT static bool isARIAControl(AccessibilityRole); 278 278 bool supportsCheckedState() const override; 279 279 280 bool supportsARIAOwns() const override { return false; } 280 281 bool isActiveDescendantOfFocusedContainer() const override; -
trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h
r270041 r270333 958 958 virtual FloatRect relativeFrame() const = 0; 959 959 virtual FloatRect convertFrameToSpace(const FloatRect&, AccessibilityConversionSpace) const = 0; 960 960 virtual bool supportsCheckedState() const = 0; 961 961 962 // In a multi-select list, many items can be selected but only one is active at a time. 962 963 virtual bool isSelectedOptionActive() const = 0; -
trunk/Source/WebCore/accessibility/AccessibilityTreeItem.cpp
r223728 r270333 49 49 } 50 50 51 bool AccessibilityTreeItem::supportsCheckedState() const 52 { 53 return hasAttribute(aria_checkedAttr); 54 } 55 51 56 AccessibilityRole AccessibilityTreeItem::determineAccessibilityRole() 52 57 { -
trunk/Source/WebCore/accessibility/AccessibilityTreeItem.h
r208179 r270333 39 39 40 40 bool shouldIgnoreAttributeRole() const override { return !m_isTreeItemValid; } 41 bool supportsCheckedState() const override; 41 42 42 43 private: -
trunk/Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm
r266805 r270333 76 76 [obj->wrapper() postInvalidStatusChangedNotification]; 77 77 break; 78 case AXCheckedStateChanged: 78 79 case AXValueChanged: 79 80 [obj->wrapper() postValueChangedNotification]; 81 notificationString = @"AXValueChanged"; 80 82 break; 81 83 case AXExpandedChanged: … … 83 85 break; 84 86 case AXSelectedChildrenChanged: 85 case AXCheckedStateChanged:86 87 default: 87 88 break; -
trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm
r268610 r270333 852 852 traits |= [self _axNotEnabledTrait]; 853 853 854 // If the treeitem supports the checked state, then it should also be marked with toggle status. 855 if (self.axBackingObject->supportsCheckedState()) 856 traits |= [self _axToggleTrait]; 857 854 858 if (m_accessibilityTraitsFromAncestor == ULLONG_MAX) 855 859 m_accessibilityTraitsFromAncestor = [self _accessibilityTraitsFromAncestors]; … … 1447 1451 return value; 1448 1452 1449 AccessibilityRole role = self.axBackingObject->roleValue(); 1450 if (self.axBackingObject->isCheckboxOrRadio() || role == AccessibilityRole::MenuItemCheckbox || role == AccessibilityRole::MenuItemRadio || role == AccessibilityRole::Switch) { 1453 if (self.axBackingObject->supportsCheckedState()) { 1451 1454 switch (self.axBackingObject->checkboxOrRadioValue()) { 1452 1455 case AccessibilityButtonState::Off: -
trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
r270331 r270333 230 230 setObjectProperty(AXPropertyName::NextSibling, object.nextSibling()); 231 231 setObjectProperty(AXPropertyName::PreviousSibling, object.previousSibling()); 232 setProperty(AXPropertyName::SupportsCheckedState, object.supportsCheckedState()); 232 233 233 234 if (object.isTable()) { -
trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
r270331 r270333 353 353 bool isIncrementor() const override { return boolAttributeValue(AXPropertyName::IsIncrementor); } 354 354 AccessibilityChildrenVector documentLinks() override { return tree()->objectsForIDs(vectorAttributeValue<AXID>(AXPropertyName::DocumentLinks)); } 355 bool supportsCheckedState() const override { return boolAttributeValue(AXPropertyName::SupportsCheckedState); } 355 356 356 357 String stringValue() const override { return stringAttributeValue(AXPropertyName::StringValue); } -
trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
r270238 r270333 281 281 SupportsDropping, 282 282 SupportsARIAOwns, 283 SupportsCheckedState, 283 284 SupportsCurrent, 284 285 SupportsDatetimeAttribute, -
trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
r270281 r270333 1148 1148 // skip invisible text 1149 1149 RenderObject* renderer = node->renderer(); 1150 if (!renderer )1150 if (!renderer || !text.length()) 1151 1151 return; 1152 1152 … … 1724 1724 [tempArray addObject:NSAccessibilityDisclosureLevelAttribute]; 1725 1725 [tempArray addObject:NSAccessibilityDisclosedRowsAttribute]; 1726 [tempArray removeObject:NSAccessibilityValueAttribute]; 1726 1727 outlineRowAttrs = [[NSArray alloc] initWithArray:tempArray]; 1727 1728 [tempArray release]; … … 1760 1761 } else if (backingObject->isTree()) 1761 1762 objectAttributes = outlineAttrs; 1762 else if (backingObject->isTreeItem()) 1763 objectAttributes = outlineRowAttrs; 1763 else if (backingObject->isTreeItem()) { 1764 if (backingObject->supportsCheckedState()) 1765 objectAttributes = [outlineRowAttrs arrayByAddingObject:NSAccessibilityValueAttribute]; 1766 else 1767 objectAttributes = outlineRowAttrs; 1768 } 1764 1769 else if (backingObject->isListBox()) 1765 1770 objectAttributes = listBoxAttrs; … … 2473 2478 return @(backingObject->headingLevel()); 2474 2479 2475 if (backingObject-> isCheckboxOrRadio() || backingObject->isMenuItem() || backingObject->isSwitch() || backingObject->isToggleButton()) {2480 if (backingObject->supportsCheckedState()) { 2476 2481 switch (backingObject->checkboxOrRadioValue()) { 2477 2482 case AccessibilityButtonState::Off:
Note: See TracChangeset
for help on using the changeset viewer.