Diff
Modified: trunk/Source/WebCore/ChangeLog (283563 => 283564)
--- trunk/Source/WebCore/ChangeLog 2021-10-05 18:40:31 UTC (rev 283563)
+++ trunk/Source/WebCore/ChangeLog 2021-10-05 18:41:08 UTC (rev 283564)
@@ -1,3 +1,28 @@
+2021-10-05 Andres Gonzalez <[email protected]>
+
+ Move handling of AXValue from platform wrapper to AX core code.
+ https://bugs.webkit.org/show_bug.cgi?id=231200
+
+ Reviewed by Chris Fleizach.
+
+ No change in functionality.
+
+ Moved handling of the AXValue (NSAccessibilityValueAttribute) from the
+ Mac wrapper accessibilityAttributeValue handler to AXCoreObject::value.
+ This makes possible to share this code across multiple platforms.
+
+ * accessibility/AccessibilityNodeObject.cpp:
+ (WebCore::AccessibilityNodeObject::headingLevel const):
+ Returns unsigned instead of int.
+ * accessibility/AccessibilityNodeObject.h:
+ * accessibility/AccessibilityObject.cpp:
+ (WebCore::AccessibilityObject::value):
+ * accessibility/AccessibilityObject.h:
+ * accessibility/AccessibilityObjectInterface.h:
+ * accessibility/isolatedtree/AXIsolatedObject.h:
+ * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
+ (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
+
2021-10-05 Tim Horton <[email protected]>
<model> should be draggable, similar to <img>
Modified: trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp (283563 => 283564)
--- trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp 2021-10-05 18:40:31 UTC (rev 283563)
+++ trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp 2021-10-05 18:41:08 UTC (rev 283564)
@@ -766,12 +766,12 @@
}
}
-int AccessibilityNodeObject::headingLevel() const
+unsigned AccessibilityNodeObject::headingLevel() const
{
// headings can be in block flow and non-block flow
Node* node = this->node();
if (!node)
- return false;
+ return 0;
if (isHeading()) {
if (auto level = getIntegralAttribute(aria_levelAttr); level > 0)
Modified: trunk/Source/WebCore/accessibility/AccessibilityNodeObject.h (283563 => 283564)
--- trunk/Source/WebCore/accessibility/AccessibilityNodeObject.h 2021-10-05 18:40:31 UTC (rev 283563)
+++ trunk/Source/WebCore/accessibility/AccessibilityNodeObject.h 2021-10-05 18:41:08 UTC (rev 283564)
@@ -90,7 +90,7 @@
Document* document() const override;
bool canSetFocusAttribute() const override;
- int headingLevel() const override;
+ unsigned headingLevel() const override;
bool canSetValueAttribute() const override;
Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (283563 => 283564)
--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp 2021-10-05 18:40:31 UTC (rev 283563)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp 2021-10-05 18:41:08 UTC (rev 283564)
@@ -189,7 +189,39 @@
return true;
}
-
+
+AXCoreObject::AXValue AccessibilityObject::value()
+{
+ if (supportsRangeValue())
+ return valueForRange();
+
+ if (roleValue() == AccessibilityRole::SliderThumb)
+ return parentObject()->valueForRange();
+
+ if (isHeading())
+ return headingLevel();
+
+ if (supportsCheckedState())
+ return checkboxOrRadioValue();
+
+ // Radio groups return the selected radio button as the AXValue.
+ if (isRadioGroup())
+ return selectedRadioButton();
+
+ if (isTabList())
+ return selectedTabItem();
+
+ if (isTabItem())
+ return isSelected();
+
+ if (isColorWell()) {
+ auto color = convertColor<SRGBA<float>>(colorValue());
+ return makeString("rgb ", String::numberToStringFixedPrecision(color.red, 6, KeepTrailingZeros), " ", String::numberToStringFixedPrecision(color.green, 6, KeepTrailingZeros), " ", String::numberToStringFixedPrecision(color.blue, 6, KeepTrailingZeros), " 1");
+ }
+
+ return stringValue();
+}
+
String AccessibilityObject::computedLabel()
{
// This method is being called by WebKit inspector, which may happen at any time, so we need to update our backing store now.
Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (283563 => 283564)
--- trunk/Source/WebCore/accessibility/AccessibilityObject.h 2021-10-05 18:40:31 UTC (rev 283563)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h 2021-10-05 18:41:08 UTC (rev 283564)
@@ -263,7 +263,7 @@
String validationMessage() const override;
unsigned blockquoteLevel() const override;
- int headingLevel() const override { return 0; }
+ unsigned headingLevel() const override { return 0; }
AccessibilityButtonState checkboxOrRadioValue() const override;
String valueDescription() const override { return String(); }
float valueForRange() const override { return 0.0f; }
@@ -373,6 +373,8 @@
bool ariaRoleHasPresentationalChildren() const override { return false; }
bool inheritsPresentationalRole() const override { return false; }
+ AXValue value() override;
+
// Accessibility Text
void accessibilityText(Vector<AccessibilityText>&) const override { };
// A single method for getting a computed label for an AXObject. It condenses the nuances of accessibilityText. Used by Inspector.
Modified: trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h (283563 => 283564)
--- trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h 2021-10-05 18:40:31 UTC (rev 283563)
+++ trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h 2021-10-05 18:41:08 UTC (rev 283564)
@@ -1010,7 +1010,7 @@
virtual String validationMessage() const = 0;
virtual unsigned blockquoteLevel() const = 0;
- virtual int headingLevel() const = 0;
+ virtual unsigned headingLevel() const = 0;
virtual AccessibilityButtonState checkboxOrRadioValue() const = 0;
virtual String valueDescription() const = 0;
virtual float valueForRange() const = 0;
@@ -1119,6 +1119,9 @@
virtual bool ariaRoleHasPresentationalChildren() const = 0;
virtual bool inheritsPresentationalRole() const = 0;
+ using AXValue = Variant<bool, unsigned, float, String, AccessibilityButtonState, AXCoreObject*>;
+ virtual AXValue value() = 0;
+
// Accessibility Text
virtual void accessibilityText(Vector<AccessibilityText>&) const = 0;
// A single method for getting a computed label for an AXObject. It condenses the nuances of accessibilityText. Used by Inspector.
Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h (283563 => 283564)
--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h 2021-10-05 18:40:31 UTC (rev 283563)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h 2021-10-05 18:41:08 UTC (rev 283564)
@@ -211,7 +211,7 @@
bool isShowingValidationMessage() const override { return boolAttributeValue(AXPropertyName::IsShowingValidationMessage); }
String validationMessage() const override { return stringAttributeValue(AXPropertyName::ValidationMessage); }
unsigned blockquoteLevel() const override { return unsignedAttributeValue(AXPropertyName::BlockquoteLevel); }
- int headingLevel() const override { return intAttributeValue(AXPropertyName::HeadingLevel); }
+ unsigned headingLevel() const override { return intAttributeValue(AXPropertyName::HeadingLevel); }
AccessibilityButtonState checkboxOrRadioValue() const override { return static_cast<AccessibilityButtonState>(intAttributeValue(AXPropertyName::AccessibilityButtonState)); }
String valueDescription() const override { return stringAttributeValue(AXPropertyName::ValueDescription); }
float valueForRange() const override { return floatAttributeValue(AXPropertyName::ValueForRange); }
@@ -274,6 +274,7 @@
LayoutRect boundingBoxRect() const override { return rectAttributeValue<LayoutRect>(AXPropertyName::BoundingBoxRect); }
LayoutRect elementRect() const override { return rectAttributeValue<LayoutRect>(AXPropertyName::ElementRect); }
IntPoint clickPoint() override { return intPointAttributeValue(AXPropertyName::ClickPoint); }
+ AXValue value() override { return { }; }
void accessibilityText(Vector<AccessibilityText>& texts) const override;
String brailleLabel() const override { return stringAttributeValue(AXPropertyName::BrailleLabel); }
String brailleRoleDescription() const override { return stringAttributeValue(AXPropertyName::BrailleRoleDescription); }
Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (283563 => 283564)
--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm 2021-10-05 18:40:31 UTC (rev 283563)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm 2021-10-05 18:41:08 UTC (rev 283564)
@@ -2291,48 +2291,17 @@
if ([[[self attachmentView] accessibilityAttributeNames] containsObject:NSAccessibilityValueAttribute])
return [[self attachmentView] accessibilityAttributeValue:NSAccessibilityValueAttribute];
}
- if (backingObject->supportsRangeValue())
- return [NSNumber numberWithFloat:backingObject->valueForRange()];
- if (backingObject->roleValue() == AccessibilityRole::SliderThumb)
- return [NSNumber numberWithFloat:backingObject->parentObject()->valueForRange()];
- if (backingObject->isHeading())
- return @(backingObject->headingLevel());
- if (backingObject->supportsCheckedState()) {
- switch (backingObject->checkboxOrRadioValue()) {
- case AccessibilityButtonState::Off:
- return @(0);
- case AccessibilityButtonState::On:
- return @(1);
- case AccessibilityButtonState::Mixed:
- return @(2);
- }
- }
-
- // radio groups return the selected radio button as the AXValue
- if (backingObject->isRadioGroup()) {
- AXCoreObject* radioButton = backingObject->selectedRadioButton();
- if (!radioButton)
- return nil;
- return radioButton->wrapper();
- }
-
- if (backingObject->isTabList()) {
- AXCoreObject* tabItem = backingObject->selectedTabItem();
- if (!tabItem)
- return nil;
- return tabItem->wrapper();
- }
-
- if (backingObject->isTabItem())
- return @(backingObject->isSelected());
-
- if (backingObject->isColorWell()) {
- auto color = convertColor<SRGBA<float>>(backingObject->colorValue());
- return [NSString stringWithFormat:@"rgb %7.5f %7.5f %7.5f 1", color.red, color.green, color.blue];
- }
-
- return backingObject->stringValue();
+ auto value = backingObject->value();
+ return WTF::switchOn(value,
+ [] (bool& typedValue) { return @(typedValue); },
+ [] (unsigned& typedValue) { return @(typedValue); },
+ [] (float& typedValue) { return @(typedValue); },
+ [] (String& typedValue) { return (id)(NSString *)typedValue; },
+ [] (AccessibilityButtonState& typedValue) { return @((unsigned)typedValue); },
+ [] (AXCoreObject*& typedValue) { return typedValue ? (id)typedValue->wrapper() : nil; },
+ [] (auto&) { return nil; }
+ );
}
if ([attributeName isEqualToString:(NSString *)kAXMenuItemMarkCharAttribute]) {