Title: [257473] trunk/Source/WebCore
Revision
257473
Author
[email protected]
Date
2020-02-26 08:16:57 -0800 (Wed, 26 Feb 2020)

Log Message

AXIsolatedObject support for table column objects.
https://bugs.webkit.org/show_bug.cgi?id=208215

Reviewed by Chris Fleizach.

Covered by existing tests.

- AccessibilityTableColumn interface is now exposed through
AXCoreObject.
- Separated isTableColumn from isAccessibilityTableColumnInstance.
- This eliminates to need to downcast in the wrapper code, and hence
makes it possible that the same code works for both AccessibilityObjects
and AXIsolatedObjects.
- Completed the caching of table column properties in AXIsolatedObject.
- Some minor code cleanup.

* accessibility/AccessibilityARIAGrid.cpp:
(WebCore::AccessibilityARIAGrid::addChildren): Removed unnecessary cast.
* accessibility/AccessibilityObject.h:
* accessibility/AccessibilityObjectInterface.h:
* accessibility/AccessibilityTable.cpp:
(WebCore::AccessibilityTable::addChildren): Removed unnecessary cast.
(WebCore::AccessibilityTable::columnHeaders):
* accessibility/AccessibilityTableColumn.cpp:
(WebCore::AccessibilityTableColumn::columnHeader):
(WebCore::AccessibilityTableColumn::headerObject): Renamed columnHeader.
* accessibility/AccessibilityTableColumn.h:
* accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::initializeAttributeData):
(WebCore::AXIsolatedObject::isAccessibilityTableColumnInstance const):
* accessibility/isolatedtree/AXIsolatedObject.h:
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (257472 => 257473)


--- trunk/Source/WebCore/ChangeLog	2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/ChangeLog	2020-02-26 16:16:57 UTC (rev 257473)
@@ -1,3 +1,39 @@
+2020-02-26  Andres Gonzalez  <[email protected]>
+
+        AXIsolatedObject support for table column objects.
+        https://bugs.webkit.org/show_bug.cgi?id=208215
+
+        Reviewed by Chris Fleizach.
+
+        Covered by existing tests.
+
+        - AccessibilityTableColumn interface is now exposed through
+        AXCoreObject.
+        - Separated isTableColumn from isAccessibilityTableColumnInstance.
+        - This eliminates to need to downcast in the wrapper code, and hence
+        makes it possible that the same code works for both AccessibilityObjects
+        and AXIsolatedObjects.
+        - Completed the caching of table column properties in AXIsolatedObject.
+        - Some minor code cleanup.
+
+        * accessibility/AccessibilityARIAGrid.cpp:
+        (WebCore::AccessibilityARIAGrid::addChildren): Removed unnecessary cast.
+        * accessibility/AccessibilityObject.h:
+        * accessibility/AccessibilityObjectInterface.h:
+        * accessibility/AccessibilityTable.cpp:
+        (WebCore::AccessibilityTable::addChildren): Removed unnecessary cast.
+        (WebCore::AccessibilityTable::columnHeaders):
+        * accessibility/AccessibilityTableColumn.cpp:
+        (WebCore::AccessibilityTableColumn::columnHeader):
+        (WebCore::AccessibilityTableColumn::headerObject): Renamed columnHeader.
+        * accessibility/AccessibilityTableColumn.h:
+        * accessibility/isolatedtree/AXIsolatedObject.cpp:
+        (WebCore::AXIsolatedObject::initializeAttributeData):
+        (WebCore::AXIsolatedObject::isAccessibilityTableColumnInstance const):
+        * accessibility/isolatedtree/AXIsolatedObject.h:
+        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
+        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
+
 2020-02-26  Youenn Fablet  <[email protected]>
 
         Conversion between MediaSample and RemoteVideoSample should preserve the rotation information

Modified: trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp (257472 => 257473)


--- trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp	2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp	2020-02-26 16:16:57 UTC (rev 257473)
@@ -139,7 +139,7 @@
     // make the columns based on the number of columns in the first body
     for (unsigned i = 0; i < columnCount; ++i) {
         auto& column = downcast<AccessibilityTableColumn>(*axCache->getOrCreate(AccessibilityRole::Column));
-        column.setColumnIndex(static_cast<int>(i));
+        column.setColumnIndex(i);
         column.setParent(this);
         m_columns.append(&column);
         if (!column.accessibilityIsIgnored())

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (257472 => 257473)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.h	2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h	2020-02-26 16:16:57 UTC (rev 257473)
@@ -116,6 +116,8 @@
     bool isAccessibilityTableInstance() const override { return false; }
     bool isAccessibilityProgressIndicatorInstance() const override { return false; }
 
+    bool isAccessibilityTableColumnInstance() const override { return false; }
+
     bool isAttachmentElement() const override { return false; }
     bool isHeading() const override { return false; }
     bool isLink() const override { return false; }
@@ -170,7 +172,11 @@
     int axRowCount() const override { return 0; }
 
     bool isTableRow() const override { return false; }
+
     bool isTableColumn() const override { return false; }
+    unsigned columnIndex() const override { return 0; }
+    AXCoreObject* columnHeader() override { return nullptr; }
+
     bool isTableCell() const override { return false; }
     bool isFieldset() const override { return false; }
     bool isGroup() const override { return false; }

Modified: trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h (257472 => 257473)


--- trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h	2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h	2020-02-26 16:16:57 UTC (rev 257473)
@@ -489,6 +489,7 @@
     virtual bool isAccessibilitySVGRoot() const = 0;
     virtual bool isAccessibilitySVGElement() const = 0;
     virtual bool isAccessibilityTableInstance() const = 0;
+    virtual bool isAccessibilityTableColumnInstance() const = 0;
     virtual bool isAccessibilityProgressIndicatorInstance() const = 0;
 
     virtual bool isAttachmentElement() const = 0;
@@ -552,7 +553,12 @@
     virtual int axRowCount() const = 0;
 
     virtual bool isTableRow() const = 0;
+
+    // Table column support.
     virtual bool isTableColumn() const = 0;
+    virtual unsigned columnIndex() const = 0;
+    virtual AXCoreObject* columnHeader() = 0;
+
     virtual bool isTableCell() const = 0;
 
     virtual bool isFieldset() const = 0;

Modified: trunk/Source/WebCore/accessibility/AccessibilityTable.cpp (257472 => 257473)


--- trunk/Source/WebCore/accessibility/AccessibilityTable.cpp	2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/AccessibilityTable.cpp	2020-02-26 16:16:57 UTC (rev 257473)
@@ -418,7 +418,7 @@
     unsigned length = maxColumnCount;
     for (unsigned i = 0; i < length; ++i) {
         auto& column = downcast<AccessibilityTableColumn>(*axCache->getOrCreate(AccessibilityRole::Column));
-        column.setColumnIndex((int)i);
+        column.setColumnIndex(i);
         column.setParent(this);
         m_columns.append(&column);
         if (!column.accessibilityIsIgnored())
@@ -538,7 +538,7 @@
     AccessibilityChildrenVector columnsCopy = m_columns;
 
     for (const auto& column : columnsCopy) {
-        if (AXCoreObject* header = downcast<AccessibilityTableColumn>(*column).headerObject())
+        if (auto* header = column->columnHeader())
             headers.append(header);
     }
 

Modified: trunk/Source/WebCore/accessibility/AccessibilityTableColumn.cpp (257472 => 257473)


--- trunk/Source/WebCore/accessibility/AccessibilityTableColumn.cpp	2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/AccessibilityTableColumn.cpp	2020-02-26 16:16:57 UTC (rev 257473)
@@ -69,21 +69,18 @@
     return columnRect;
 }
 
-AXCoreObject* AccessibilityTableColumn::headerObject()
+AXCoreObject* AccessibilityTableColumn::columnHeader()
 {
-    if (!m_parent)
+    if (!m_parent || !is<AccessibilityTable>(*m_parent)
+        || !m_parent->isExposable())
         return nullptr;
-    
+
     RenderObject* renderer = m_parent->renderer();
     if (!renderer)
         return nullptr;
-    if (!is<AccessibilityTable>(*m_parent))
-        return nullptr;
 
     auto& parentTable = downcast<AccessibilityTable>(*m_parent);
-    if (!parentTable.isExposable())
-        return nullptr;
-    
+
     if (parentTable.isAriaTable()) {
         for (const auto& cell : children()) {
             if (cell->ariaRoleAttribute() == AccessibilityRole::ColumnHeader)

Modified: trunk/Source/WebCore/accessibility/AccessibilityTableColumn.h (257472 => 257473)


--- trunk/Source/WebCore/accessibility/AccessibilityTableColumn.h	2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/AccessibilityTableColumn.h	2020-02-26 16:16:57 UTC (rev 257473)
@@ -41,13 +41,13 @@
     static Ref<AccessibilityTableColumn> create();
     virtual ~AccessibilityTableColumn();
 
-    AXCoreObject* headerObject();
+    AXCoreObject* columnHeader() override;
 
     AccessibilityRole roleValue() const override { return AccessibilityRole::Column; }
-    
-    void setColumnIndex(int columnIndex) { m_columnIndex = columnIndex; }
-    int columnIndex() const { return m_columnIndex; }    
-    
+
+    void setColumnIndex(unsigned columnIndex) { m_columnIndex = columnIndex; }
+    unsigned columnIndex() const override { return m_columnIndex; }
+
     void addChildren() override;
     void setParent(AccessibilityObject*) override;
     
@@ -60,9 +60,10 @@
     bool computeAccessibilityIsIgnored() const override;
     bool isTableColumn() const override { return true; }
 
+    bool isAccessibilityTableColumnInstance() const final { return true; }
     unsigned m_columnIndex;
 };
 
 } // namespace WebCore 
 
-SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(AccessibilityTableColumn, isTableColumn())
+SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(AccessibilityTableColumn, isAccessibilityTableColumnInstance())

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp (257472 => 257473)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp	2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp	2020-02-26 16:16:57 UTC (rev 257473)
@@ -115,7 +115,6 @@
     setProperty(AXPropertyName::IsSlider, object.isSlider());
     setProperty(AXPropertyName::IsStyleFormatGroup, object.isStyleFormatGroup());
     setProperty(AXPropertyName::IsTableCell, object.isTableCell());
-    setProperty(AXPropertyName::IsTableColumn, object.isTableColumn());
     setProperty(AXPropertyName::IsTableRow, object.isTableRow());
     setProperty(AXPropertyName::IsTextControl, object.isTextControl());
     setProperty(AXPropertyName::IsTree, object.isTree());
@@ -237,6 +236,12 @@
         setProperty(AXPropertyName::AXRowCount, object.axRowCount());
     }
 
+    if (object.isTableColumn()) {
+        setProperty(AXPropertyName::IsTableColumn, object.isTableColumn());
+        setProperty(AXPropertyName::ColumnIndex, object.columnIndex());
+        setProperty(AXPropertyName::ColumnHeader, object.columnHeader());
+    }
+
     if (object.isTextControl())
         setProperty(AXPropertyName::TextLength, object.textLength());
 
@@ -937,6 +942,12 @@
     return false;
 }
 
+bool AXIsolatedObject::isAccessibilityTableColumnInstance() const
+{
+    ASSERT_NOT_REACHED();
+    return false;
+}
+
 bool AXIsolatedObject::isAccessibilityProgressIndicatorInstance() const
 {
     ASSERT_NOT_REACHED();

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h (257472 => 257473)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h	2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h	2020-02-26 16:16:57 UTC (rev 257473)
@@ -120,7 +120,9 @@
         ColorValue,
         Columns,
         ColumnCount,
+        ColumnHeader,
         ColumnHeaders,
+        ColumnIndex,
         ComputedLabel,
         ComputedRoleString,
         CurrentState,
@@ -399,7 +401,12 @@
     int axRowCount() const override { return intAttributeValue(AXPropertyName::AXRowCount); }
 
     bool isTableRow() const override { return boolAttributeValue(AXPropertyName::IsTableRow); }
+
+    // Table column support.
     bool isTableColumn() const override { return boolAttributeValue(AXPropertyName::IsTableColumn); }
+    unsigned columnIndex() const override { return unsignedAttributeValue(AXPropertyName::ColumnIndex); }
+    AXCoreObject* columnHeader() override { return objectAttributeValue(AXPropertyName::ColumnHeader); }
+
     bool isTableCell() const override { return boolAttributeValue(AXPropertyName::IsTableCell); }
     bool isFieldset() const override { return boolAttributeValue(AXPropertyName::IsFieldset); }
     bool isGroup() const override { return boolAttributeValue(AXPropertyName::IsGroup); }
@@ -689,7 +696,9 @@
     bool isAccessibilitySVGRoot() const override;
     bool isAccessibilitySVGElement() const override;
     bool isAccessibilityTableInstance() const override;
+    bool isAccessibilityTableColumnInstance() const override;
     bool isAccessibilityProgressIndicatorInstance() const override;
+
     bool isAttachmentElement() const override;
     bool isNativeImage() const override;
     bool isImageButton() const override;

Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (257472 => 257473)


--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm	2020-02-26 15:57:19 UTC (rev 257472)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm	2020-02-26 16:16:57 UTC (rev 257473)
@@ -2743,21 +2743,18 @@
             return @(backingObject->axRowCount());
     }
 
-    if (is<AccessibilityTableColumn>(*backingObject)) {
-        auto& column = downcast<AccessibilityTableColumn>(*backingObject);
+    if (backingObject->isTableColumn()) {
         if ([attributeName isEqualToString:NSAccessibilityIndexAttribute])
-            return [NSNumber numberWithInt:column.columnIndex()];
+            return [NSNumber numberWithUnsignedInt:backingObject->columnIndex()];
 
         // rows attribute for a column is the list of all the elements in that column at each row
-        if ([attributeName isEqualToString:NSAccessibilityRowsAttribute] ||
-            [attributeName isEqualToString:NSAccessibilityVisibleRowsAttribute]) {
-            return convertToNSArray(column.children());
-        }
+        if ([attributeName isEqualToString:NSAccessibilityRowsAttribute]
+            || [attributeName isEqualToString:NSAccessibilityVisibleRowsAttribute])
+            return convertToNSArray(backingObject->children());
+
         if ([attributeName isEqualToString:NSAccessibilityHeaderAttribute]) {
-            AXCoreObject* header = column.headerObject();
-            if (!header)
-                return nil;
-            return header->wrapper();
+            auto* header = backingObject->columnHeader();
+            return header ? header->wrapper() : nil;
         }
     }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to