Title: [283564] trunk/Source/WebCore
Revision
283564
Author
[email protected]
Date
2021-10-05 11:41:08 -0700 (Tue, 05 Oct 2021)

Log Message

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:]):

Modified Paths

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]) {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to