diff --git a/Source/WebCore/accessibility/AccessibilityObject.cpp b/Source/WebCore/accessibility/AccessibilityObject.cpp index 12f2f786ac83..a3b17e8f874f 100644 --- a/Source/WebCore/accessibility/AccessibilityObject.cpp +++ b/Source/WebCore/accessibility/AccessibilityObject.cpp @@ -3961,11 +3961,18 @@ bool AccessibilityObject::isContainedByPasswordField() const return is(element) && downcast(*element).isPasswordField(); } -AXCoreObject* AccessibilityObject::selectedListItem() +AccessibilityObject* AccessibilityObject::selectedListItem() { for (const auto& child : children()) { - if (child->isListItem() && (child->isSelected() || child->isActiveDescendantOfFocusedContainer())) - return child.get(); + if (!child->isListItem()) + continue; + + auto* axObject = dynamicDowncast(child.get()); + if (!axObject) + continue; + + if (axObject->isSelected() || axObject->isActiveDescendantOfFocusedContainer()) + return axObject; } return nullptr; diff --git a/Source/WebCore/accessibility/AccessibilityObject.h b/Source/WebCore/accessibility/AccessibilityObject.h index 78df3095e795..30a066e2cb39 100644 --- a/Source/WebCore/accessibility/AccessibilityObject.h +++ b/Source/WebCore/accessibility/AccessibilityObject.h @@ -299,7 +299,7 @@ class AccessibilityObject : public AXCoreObject, public CanMakeWeakPtr { virtual float stepValueForRange() const = 0; virtual AXCoreObject* selectedRadioButton() = 0; virtual AXCoreObject* selectedTabItem() = 0; - virtual AXCoreObject* selectedListItem() = 0; virtual int layoutCount() const = 0; virtual double loadingProgress() const = 0; virtual String brailleLabel() const = 0; @@ -1078,7 +1077,6 @@ class AXCoreObject : public ThreadSafeRefCounted { virtual String extendedDescription() const = 0; virtual bool supportsARIAOwns() const = 0; - virtual bool isActiveDescendantOfFocusedContainer() const = 0; // Retrieval of related objects. AccessibilityChildrenVector activeDescendantOfObjects() const { return relatedObjects(AXRelationType::ActiveDescendantOf); } diff --git a/Source/WebCore/accessibility/AccessibilityRenderObject.cpp b/Source/WebCore/accessibility/AccessibilityRenderObject.cpp index 205408e21ede..fd5b890d632e 100644 --- a/Source/WebCore/accessibility/AccessibilityRenderObject.cpp +++ b/Source/WebCore/accessibility/AccessibilityRenderObject.cpp @@ -3272,7 +3272,11 @@ void AccessibilityRenderObject::ariaSelectedRows(AccessibilityChildrenVector& re // Get all the rows. auto rowsIteration = [&](const auto& rows) { - for (auto& row : rows) { + for (auto& rowCoreObject : rows) { + auto* row = dynamicDowncast(rowCoreObject.get()); + if (!row) + continue; + if (row->isSelected() || row->isActiveDescendantOfFocusedContainer()) { result.append(row); if (!isMulti) @@ -3297,10 +3301,13 @@ void AccessibilityRenderObject::ariaListboxSelectedChildren(AccessibilityChildre for (const auto& child : children()) { // Every child should have aria-role option, and if so, check for selected attribute/state. - if (child->ariaRoleAttribute() == AccessibilityRole::ListBoxOption && (child->isSelected() || child->isActiveDescendantOfFocusedContainer())) { - result.append(child); - if (!isMulti) - return; + if (child->ariaRoleAttribute() == AccessibilityRole::ListBoxOption) { + auto* childAxObject = dynamicDowncast(child.get()); + if (childAxObject->isSelected() || childAxObject->isActiveDescendantOfFocusedContainer()) { + result.append(childAxObject); + if (!isMulti) + return; + } } } } diff --git a/Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.cpp b/Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.cpp index d5d2bff51834..ba222a6e4d93 100644 --- a/Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.cpp +++ b/Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.cpp @@ -773,7 +773,7 @@ uint64_t AccessibilityObjectAtspi::state() const if (m_coreObject->isFocused() && !m_coreObject->activeDescendant()) addState(Atspi::State::Focused); - else if (m_coreObject->isActiveDescendantOfFocusedContainer()) { + else if (liveObject->isActiveDescendantOfFocusedContainer()) { addState(Atspi::State::Focusable); addState(Atspi::State::Focused); } diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp index e62ee1bb8b6f..103b90342fd9 100644 --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp +++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp @@ -86,7 +86,6 @@ void AXIsolatedObject::initializeProperties(Ref coreObject, IsRoot setProperty(AXPropertyName::AncestorFlags, object.computeAncestorFlagsWithTraversal()); setProperty(AXPropertyName::HasARIAValueNow, object.hasARIAValueNow()); - setProperty(AXPropertyName::IsActiveDescendantOfFocusedContainer, object.isActiveDescendantOfFocusedContainer()); setProperty(AXPropertyName::IsAttachment, object.isAttachment()); setProperty(AXPropertyName::IsBusy, object.isBusy()); setProperty(AXPropertyName::IsButton, object.isButton()); @@ -1855,12 +1854,6 @@ float AXIsolatedObject::stepValueForRange() const return 0; } -AXCoreObject* AXIsolatedObject::selectedListItem() -{ - ASSERT_NOT_REACHED(); - return nullptr; -} - bool AXIsolatedObject::hasDatalist() const { ASSERT_NOT_REACHED(); diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h index a3e9eb715483..064b5e79cacc 100644 --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h +++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h @@ -229,7 +229,6 @@ class AXIsolatedObject final : public AXCoreObject { int layoutCount() const override { return intAttributeValue(AXPropertyName::LayoutCount); } double loadingProgress() const override { return tree()->loadingProgress(); } bool supportsARIAOwns() const override { return boolAttributeValue(AXPropertyName::SupportsARIAOwns); } - bool isActiveDescendantOfFocusedContainer() const override { return boolAttributeValue(AXPropertyName::IsActiveDescendantOfFocusedContainer); } bool hasPopup() const override { return boolAttributeValue(AXPropertyName::HasPopup); } String popupValue() const override { return stringAttributeValue(AXPropertyName::PopupValue); } bool pressedIsPresent() const override { return boolAttributeValue(AXPropertyName::PressedIsPresent); } @@ -542,7 +541,6 @@ class AXIsolatedObject final : public AXCoreObject { AccessibilityObjectInclusion defaultObjectInclusion() const override; bool accessibilityIsIgnoredByDefault() const override; float stepValueForRange() const override; - AXCoreObject* selectedListItem() override; AccessibilityChildrenVector relatedObjects(AXRelationType) const override; diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h index 5eb67f822bf5..66d3996b917b 100644 --- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h +++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h @@ -128,7 +128,6 @@ enum class AXPropertyName : uint16_t { IncrementButton, InnerHTML, InvalidStatus, - IsActiveDescendantOfFocusedContainer, IsAnonymousMathOperator, IsGrabbed, IsARIATreeGridRow, diff --git a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm b/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm index ea7925db07bd..e12044393fba 100644 --- a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm +++ b/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm @@ -2606,9 +2606,6 @@ - (id)accessibilityAttributeValue:(NSString*)attributeName if ([attributeName isEqualToString:@"AXReadOnlyValue"]) return backingObject->readOnlyValue(); - if ([attributeName isEqualToString:@"AXIsActiveDescendantOfFocusedContainer"]) - return [NSNumber numberWithBool:backingObject->isActiveDescendantOfFocusedContainer()]; - if ([attributeName isEqualToString:AXHasDocumentRoleAncestorAttribute]) return [NSNumber numberWithBool:backingObject->hasDocumentRoleAncestor()];