Title: [261705] trunk/Source/WebCore
Revision
261705
Author
andresg...@apple.com
Date
2020-05-14 12:44:20 -0700 (Thu, 14 May 2020)

Log Message

AXCoreObject font comparison methods should take another AXCoreObject instead of a RenderObject.
https://bugs.webkit.org/show_bug.cgi?id=211909

Reviewed by Chris Fleizach.

Covered by existing tests.

- In order for font comparison methods to be implementted for both
AXObjects and AXIsolatedObjects, they should take another AXCoreObject
to compare against, instead of a RenderObject.
- The AXIsolatedObject implementation of these methods is forwarded to
the associated AXObject and dispatched to the main thread.
- Implemented AXIsolatedObject::accessibilityDescription, hasUnderline and isUnvisited.

* accessibility/AccessibilityObject.cpp:
(WebCore::Accessibility::isAccessibilityObjectSearchMatchAtIndex):
* accessibility/AccessibilityObject.h:
* accessibility/AccessibilityObjectInterface.h:
(WebCore::AXCoreObject::isNativeListBox const):
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::hasSameFont const):
(WebCore::AccessibilityRenderObject::hasSameFontColor const):
(WebCore::AccessibilityRenderObject::hasSameStyle const):
* accessibility/AccessibilityRenderObject.h:
* accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::initializeAttributeData):
(WebCore::AXIsolatedObject::hasSameFont const):
(WebCore::AXIsolatedObject::hasSameFontColor const):
(WebCore::AXIsolatedObject::hasSameStyle const):
(WebCore::AXIsolatedObject::isNativeListBox const): Deleted, implemented in base class.
(WebCore::AXIsolatedObject::isUnvisited const): Deleted, inlined in header.
(WebCore::AXIsolatedObject::hasUnderline const): Deleted, inlined in header.
(WebCore::AXIsolatedObject::accessibilityDescription const): Deleted, inlined in header.
* accessibility/isolatedtree/AXIsolatedObject.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (261704 => 261705)


--- trunk/Source/WebCore/ChangeLog	2020-05-14 19:35:30 UTC (rev 261704)
+++ trunk/Source/WebCore/ChangeLog	2020-05-14 19:44:20 UTC (rev 261705)
@@ -1,3 +1,40 @@
+2020-05-14  Andres Gonzalez  <andresg...@apple.com>
+
+        AXCoreObject font comparison methods should take another AXCoreObject instead of a RenderObject.
+        https://bugs.webkit.org/show_bug.cgi?id=211909
+
+        Reviewed by Chris Fleizach.
+
+        Covered by existing tests.
+
+        - In order for font comparison methods to be implementted for both
+        AXObjects and AXIsolatedObjects, they should take another AXCoreObject
+        to compare against, instead of a RenderObject.
+        - The AXIsolatedObject implementation of these methods is forwarded to
+        the associated AXObject and dispatched to the main thread.
+        - Implemented AXIsolatedObject::accessibilityDescription, hasUnderline and isUnvisited.
+
+        * accessibility/AccessibilityObject.cpp:
+        (WebCore::Accessibility::isAccessibilityObjectSearchMatchAtIndex):
+        * accessibility/AccessibilityObject.h:
+        * accessibility/AccessibilityObjectInterface.h:
+        (WebCore::AXCoreObject::isNativeListBox const):
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::hasSameFont const):
+        (WebCore::AccessibilityRenderObject::hasSameFontColor const):
+        (WebCore::AccessibilityRenderObject::hasSameStyle const):
+        * accessibility/AccessibilityRenderObject.h:
+        * accessibility/isolatedtree/AXIsolatedObject.cpp:
+        (WebCore::AXIsolatedObject::initializeAttributeData):
+        (WebCore::AXIsolatedObject::hasSameFont const):
+        (WebCore::AXIsolatedObject::hasSameFontColor const):
+        (WebCore::AXIsolatedObject::hasSameStyle const):
+        (WebCore::AXIsolatedObject::isNativeListBox const): Deleted, implemented in base class.
+        (WebCore::AXIsolatedObject::isUnvisited const): Deleted, inlined in header.
+        (WebCore::AXIsolatedObject::hasUnderline const): Deleted, inlined in header.
+        (WebCore::AXIsolatedObject::accessibilityDescription const): Deleted, inlined in header.
+        * accessibility/isolatedtree/AXIsolatedObject.h:
+
 2020-05-14  Nikita Vasilyev  <nvasil...@apple.com>
 
         Web Inspector: front-end shouldn't change the order of User Style Sheet rules

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (261704 => 261705)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2020-05-14 19:35:30 UTC (rev 261704)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2020-05-14 19:44:20 UTC (rev 261705)
@@ -3629,10 +3629,10 @@
             && axObject->roleValue() != criteria.startObject->roleValue();
     case AccessibilitySearchKey::FontChange:
         return criteria.startObject
-            && !axObject->hasSameFont(criteria.startObject->renderer());
+            && !axObject->hasSameFont(*criteria.startObject);
     case AccessibilitySearchKey::FontColorChange:
         return criteria.startObject
-            && !axObject->hasSameFontColor(criteria.startObject->renderer());
+            && !axObject->hasSameFontColor(*criteria.startObject);
     case AccessibilitySearchKey::Frame:
         return axObject->isWebArea();
     case AccessibilitySearchKey::Graphic:
@@ -3690,7 +3690,7 @@
         return axObject->isStaticText();
     case AccessibilitySearchKey::StyleChange:
         return criteria.startObject
-            && !axObject->hasSameStyle(criteria.startObject->renderer());
+            && !axObject->hasSameStyle(*criteria.startObject);
     case AccessibilitySearchKey::TableSameLevel:
         return criteria.startObject
             && axObject->isTable() && axObject->isExposable()

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (261704 => 261705)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.h	2020-05-14 19:35:30 UTC (rev 261704)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h	2020-05-14 19:44:20 UTC (rev 261705)
@@ -233,9 +233,9 @@
     bool hasMisspelling() const override;
     RefPtr<Range> getMisspellingRange(RefPtr<Range> const& start, AccessibilitySearchDirection) const override;
     bool hasPlainText() const override { return false; }
-    bool hasSameFont(RenderObject*) const override { return false; }
-    bool hasSameFontColor(RenderObject*) const override { return false; }
-    bool hasSameStyle(RenderObject*) const override { return false; }
+    bool hasSameFont(const AXCoreObject&) const override { return false; }
+    bool hasSameFontColor(const AXCoreObject&) const override { return false; }
+    bool hasSameStyle(const AXCoreObject&) const override { return false; }
     bool hasUnderline() const override { return false; }
     bool hasHighlighting() const override;
 

Modified: trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h (261704 => 261705)


--- trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h	2020-05-14 19:35:30 UTC (rev 261704)
+++ trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h	2020-05-14 19:44:20 UTC (rev 261705)
@@ -513,7 +513,7 @@
     bool isCheckbox() const { return roleValue() == AccessibilityRole::CheckBox; }
     bool isRadioButton() const { return roleValue() == AccessibilityRole::RadioButton; }
     bool isListBox() const { return roleValue() == AccessibilityRole::ListBox; }
-    virtual bool isNativeListBox() const = 0;
+    virtual bool isNativeListBox() const { return false; };
     virtual bool isListBoxOption() const = 0;
     virtual bool isAttachment() const = 0;
     virtual bool isMediaTimeline() const = 0;
@@ -663,9 +663,9 @@
     virtual bool hasMisspelling() const = 0;
     virtual RefPtr<Range> getMisspellingRange(RefPtr<Range> const& start, AccessibilitySearchDirection) const = 0;
     virtual bool hasPlainText() const = 0;
-    virtual bool hasSameFont(RenderObject*) const = 0;
-    virtual bool hasSameFontColor(RenderObject*) const = 0;
-    virtual bool hasSameStyle(RenderObject*) const = 0;
+    virtual bool hasSameFont(const AXCoreObject&) const = 0;
+    virtual bool hasSameFontColor(const AXCoreObject&) const = 0;
+    virtual bool hasSameStyle(const AXCoreObject&) const = 0;
     bool isStaticText() const { return roleValue() == AccessibilityRole::StaticText; }
     virtual bool hasUnderline() const = 0;
     virtual bool hasHighlighting() const = 0;

Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (261704 => 261705)


--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2020-05-14 19:35:30 UTC (rev 261704)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2020-05-14 19:44:20 UTC (rev 261705)
@@ -3712,8 +3712,9 @@
         && style.textDecorationsInEffect().isEmpty();
 }
 
-bool AccessibilityRenderObject::hasSameFont(RenderObject* renderer) const
+bool AccessibilityRenderObject::hasSameFont(const AXCoreObject& object) const
 {
+    auto* renderer = object.renderer();
     if (!m_renderer || !renderer)
         return false;
     
@@ -3736,8 +3737,9 @@
 }
 #endif
 
-bool AccessibilityRenderObject::hasSameFontColor(RenderObject* renderer) const
+bool AccessibilityRenderObject::hasSameFontColor(const AXCoreObject& object) const
 {
+    auto* renderer = object.renderer();
     if (!m_renderer || !renderer)
         return false;
     
@@ -3744,8 +3746,9 @@
     return m_renderer->style().visitedDependentColor(CSSPropertyColor) == renderer->style().visitedDependentColor(CSSPropertyColor);
 }
 
-bool AccessibilityRenderObject::hasSameStyle(RenderObject* renderer) const
+bool AccessibilityRenderObject::hasSameStyle(const AXCoreObject& object) const
 {
+    auto* renderer = object.renderer();
     if (!m_renderer || !renderer)
         return false;
     

Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h (261704 => 261705)


--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h	2020-05-14 19:35:30 UTC (rev 261704)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h	2020-05-14 19:44:20 UTC (rev 261705)
@@ -72,9 +72,9 @@
     bool hasBoldFont() const override;
     bool hasItalicFont() const override;
     bool hasPlainText() const override;
-    bool hasSameFont(RenderObject*) const override;
-    bool hasSameFontColor(RenderObject*) const override;
-    bool hasSameStyle(RenderObject*) const override;
+    bool hasSameFont(const AXCoreObject&) const override;
+    bool hasSameFontColor(const AXCoreObject&) const override;
+    bool hasSameStyle(const AXCoreObject&) const override;
     bool hasUnderline() const override;
 
     bool canSetTextRangeAttributes() const override;

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp (261704 => 261705)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp	2020-05-14 19:35:30 UTC (rev 261704)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp	2020-05-14 19:44:20 UTC (rev 261705)
@@ -60,6 +60,7 @@
 void AXIsolatedObject::initializeAttributeData(AXCoreObject& object, bool isRoot)
 {
     setProperty(AXPropertyName::ARIALandmarkRoleDescription, object.ariaLandmarkRoleDescription().isolatedCopy());
+    setProperty(AXPropertyName::AccessibilityDescription, object.accessibilityDescription());
     setProperty(AXPropertyName::BoundingBoxRect, object.boundingBoxRect());
     setProperty(AXPropertyName::Description, object.descriptionAttributeValue().isolatedCopy());
     setProperty(AXPropertyName::ElementRect, object.elementRect());
@@ -221,6 +222,7 @@
     setProperty(AXPropertyName::HasBoldFont, object.hasBoldFont());
     setProperty(AXPropertyName::HasItalicFont, object.hasItalicFont());
     setProperty(AXPropertyName::HasPlainText, object.hasPlainText());
+    setProperty(AXPropertyName::HasUnderline, object.hasUnderline());
     setProperty(AXPropertyName::IsKeyboardFocusable, object.isKeyboardFocusable());
     
     if (object.isTable()) {
@@ -1056,12 +1058,6 @@
     return false;
 }
 
-bool AXIsolatedObject::isNativeListBox() const
-{
-    ASSERT_NOT_REACHED();
-    return false;
-}
-
 bool AXIsolatedObject::isListBoxOption() const
 {
     ASSERT_NOT_REACHED();
@@ -1167,12 +1163,6 @@
     return false;
 }
 
-bool AXIsolatedObject::isUnvisited() const
-{
-    ASSERT_NOT_REACHED();
-    return false;
-}
-
 bool AXIsolatedObject::isLinked() const
 {
     ASSERT_NOT_REACHED();
@@ -1203,28 +1193,46 @@
     return false;
 }
 
-bool AXIsolatedObject::hasSameFont(RenderObject*) const
+bool AXIsolatedObject::hasSameFont(const AXCoreObject& otherObject) const
 {
-    ASSERT_NOT_REACHED();
-    return false;
+    if (!is<AXIsolatedObject>(otherObject))
+        return false;
+
+    return Accessibility::retrieveValueFromMainThread<bool>([&otherObject, this] () -> bool {
+        if (auto* axObject = associatedAXObject()) {
+            if (auto* axOtherObject = downcast<AXIsolatedObject>(otherObject).associatedAXObject())
+                return axObject->hasSameFont(*axOtherObject);
+        }
+        return false;
+    });
 }
 
-bool AXIsolatedObject::hasSameFontColor(RenderObject*) const
+bool AXIsolatedObject::hasSameFontColor(const AXCoreObject& otherObject) const
 {
-    ASSERT_NOT_REACHED();
-    return false;
+    if (!is<AXIsolatedObject>(otherObject))
+        return false;
+
+    return Accessibility::retrieveValueFromMainThread<bool>([&otherObject, this] () -> bool {
+        if (auto* axObject = associatedAXObject()) {
+            if (auto* axOtherObject = downcast<AXIsolatedObject>(otherObject).associatedAXObject())
+                return axObject->hasSameFontColor(*axOtherObject);
+        }
+        return false;
+    });
 }
 
-bool AXIsolatedObject::hasSameStyle(RenderObject*) const
+bool AXIsolatedObject::hasSameStyle(const AXCoreObject& otherObject) const
 {
-    ASSERT_NOT_REACHED();
-    return false;
-}
+    if (!is<AXIsolatedObject>(otherObject))
+        return false;
 
-bool AXIsolatedObject::hasUnderline() const
-{
-    ASSERT_NOT_REACHED();
-    return false;
+    return Accessibility::retrieveValueFromMainThread<bool>([&otherObject, this] () -> bool {
+        if (auto* axObject = associatedAXObject()) {
+            if (auto* axOtherObject = downcast<AXIsolatedObject>(otherObject).associatedAXObject())
+                return axObject->hasSameStyle(*axOtherObject);
+        }
+        return false;
+    });
 }
 
 Element* AXIsolatedObject::element() const
@@ -1468,12 +1476,6 @@
     return false;
 }
 
-String AXIsolatedObject::accessibilityDescription() const
-{
-    ASSERT_NOT_REACHED();
-    return String();
-}
-
 String AXIsolatedObject::helpText() const
 {
     ASSERT_NOT_REACHED();

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h (261704 => 261705)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h	2020-05-14 19:35:30 UTC (rev 261704)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h	2020-05-14 19:44:20 UTC (rev 261705)
@@ -80,13 +80,8 @@
         return axObjectCache()->objectFromAXID(objectID());
     }
 
-    enum class AXPropertyName : uint8_t {
+    enum class AXPropertyName : uint16_t {
         None = 0,
-        AccessKey,
-        ActionVerb,
-        AccessibilityButtonState,
-        AccessibilityText,
-        AutoCompleteValue,
         ARIAControlsElements,
         ARIADetailsElements,
         DropEffects,
@@ -102,6 +97,12 @@
         AXColumnIndex,
         AXRowCount,
         AXRowIndex,
+        AccessKey,
+        AccessibilityButtonState,
+        AccessibilityDescription,
+        AccessibilityText,
+        ActionVerb,
+        AutoCompleteValue,
         BlockquoteLevel,
         BoundingBoxRect,
         CanHaveSelectedChildren,
@@ -153,6 +154,7 @@
         HasItalicFont,
         HasPlainText,
         HasPopup,
+        HasUnderline,
         HeaderContainer,
         HeadingLevel,
         HelpText,
@@ -337,7 +339,7 @@
         VisibleRows,
         WebArea,
     };
-    
+
     typedef std::pair<AXID, AXID> AccessibilityIsolatedTreeMathMultiscriptPair;
     struct AccessibilityIsolatedTreeText {
         String text;
@@ -737,7 +739,6 @@
     bool isContainedByPasswordField() const override;
     AXCoreObject* passwordFieldOrContainingPasswordField() override;
     bool isNativeTextControl() const override;
-    bool isNativeListBox() const override;
     bool isListBoxOption() const override;
     bool isSliderThumb() const override;
     bool isInputSlider() const override;
@@ -756,7 +757,7 @@
     bool isOnScreen() const override;
     bool isOffScreen() const override;
     bool isPressed() const override;
-    bool isUnvisited() const override;
+    bool isUnvisited() const override { return boolAttributeValue(AXPropertyName::IsUnvisited); }
     bool isLinked() const override;
     bool isVisible() const override;
     bool isCollapsed() const override;
@@ -765,10 +766,10 @@
     bool hasItalicFont() const override { return boolAttributeValue(AXPropertyName::HasItalicFont); }
     bool hasMisspelling() const override;
     bool hasPlainText() const override { return boolAttributeValue(AXPropertyName::HasPlainText); }
-    bool hasSameFont(RenderObject*) const override;
-    bool hasSameFontColor(RenderObject*) const override;
-    bool hasSameStyle(RenderObject*) const override;
-    bool hasUnderline() const override;
+    bool hasSameFont(const AXCoreObject&) const override;
+    bool hasSameFontColor(const AXCoreObject&) const override;
+    bool hasSameStyle(const AXCoreObject&) const override;
+    bool hasUnderline() const override { return boolAttributeValue(AXPropertyName::HasUnderline); }
     bool hasHighlighting() const override { return boolAttributeValue(AXPropertyName::HasHighlighting); }
     Element* element() const override;
     Node* node() const override;
@@ -812,7 +813,7 @@
     bool inheritsPresentationalRole() const override;
     void setAccessibleName(const AtomString&) override;
     bool hasAttributesRequiredForInclusion() const override;
-    String accessibilityDescription() const override;
+    String accessibilityDescription() const override { return stringAttributeValue(AXPropertyName::AccessibilityDescription); }
     String title() const override { return stringAttributeValue(AXPropertyName::Title); }
     String helpText() const override;
     bool isARIAStaticText() const override;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to