Title: [175068] trunk/Source/WebCore
Revision
175068
Author
[email protected]
Date
2014-10-22 14:45:20 -0700 (Wed, 22 Oct 2014)

Log Message

Avoid confusion between AccessibilityObject::isTable() / isAccessibilityTable()
https://bugs.webkit.org/show_bug.cgi?id=137899

Reviewed by Darin Adler.

Avoid confusion between AccessibilityObject::isTable() and
isAccessibilityTable(). isTable() is equivalent to
is<AccessibilityTable>(), while isAccessibilityTable() is an
AccessibilityTable that is exposed as an AccessibilityTable to the
platform.

This patch is renaming isAccessibilityTable() to
isExposableThroughAccessibility(), makes it non-virtual and defines it
on AccessibilityTable only, for clarity.

This patch also renames isTableExposableThroughAccessibility() to
computeIisTableExposableThroughAccessibility() as it is called only
once to initialize the m_isExposableThroughAccessibility data member.

No new tests, no behavior change.

* accessibility/AccessibilityARIAGrid.cpp:
(WebCore::AccessibilityARIAGrid::addChildren):
* accessibility/AccessibilityARIAGrid.h:
* accessibility/AccessibilityARIAGridCell.cpp:
(WebCore::AccessibilityARIAGridCell::parentTable):
(WebCore::AccessibilityARIAGridCell::rowIndexRange):
(WebCore::AccessibilityARIAGridCell::columnIndexRange):
* accessibility/AccessibilityARIAGridRow.cpp:
(WebCore::AccessibilityARIAGridRow::disclosedRows):
(WebCore::AccessibilityARIAGridRow::disclosedByRow):
(WebCore::AccessibilityARIAGridRow::parentTable):
* accessibility/AccessibilityNodeObject.cpp:
(WebCore::shouldUseAccessiblityObjectInnerText):
* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::isAccessibilityObjectSearchMatchAtIndex):
(WebCore::appendChildrenToArray):
* accessibility/AccessibilityObject.h:
(WebCore::AccessibilityObject::isAccessibilityTable): Deleted.
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::ariaSelectedRows):
* accessibility/AccessibilityTable.cpp:
(WebCore::AccessibilityTable::AccessibilityTable):
(WebCore::AccessibilityTable::init):
(WebCore::AccessibilityTable::isExposableThroughAccessibility):
(WebCore::AccessibilityTable::computeIsTableExposableThroughAccessibility):
(WebCore::AccessibilityTable::addChildren):
(WebCore::AccessibilityTable::tableLevel):
(WebCore::AccessibilityTable::roleValue):
(WebCore::AccessibilityTable::computeAccessibilityIsIgnored):
(WebCore::AccessibilityTable::title):
(WebCore::AccessibilityTable::isAccessibilityTable): Deleted.
(WebCore::AccessibilityTable::isTableExposableThroughAccessibility): Deleted.
* accessibility/AccessibilityTable.h:
* accessibility/AccessibilityTableCell.cpp:
(WebCore::AccessibilityTableCell::isTableCell):
* accessibility/AccessibilityTableColumn.cpp:
(WebCore::AccessibilityTableColumn::headerObject):
(WebCore::AccessibilityTableColumn::addChildren):
* accessibility/AccessibilityTableHeaderContainer.cpp:
(WebCore::AccessibilityTableHeaderContainer::addChildren):
* accessibility/AccessibilityTableRow.cpp:
(WebCore::AccessibilityTableRow::isTableRow):
(WebCore::AccessibilityTableRow::parentTable):
* accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
(webkitAccessibleGetNChildren):
(webkitAccessibleRefChild):
(webkitAccessibleGetAttributes):
* accessibility/mac/AXObjectCacheMac.mm:
(WebCore::AXObjectCache::postPlatformNotification):
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
(-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
(-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
(-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (175067 => 175068)


--- trunk/Source/WebCore/ChangeLog	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/ChangeLog	2014-10-22 21:45:20 UTC (rev 175068)
@@ -1,5 +1,85 @@
 2014-10-22  Chris Dumez  <[email protected]>
 
+        Avoid confusion between AccessibilityObject::isTable() / isAccessibilityTable()
+        https://bugs.webkit.org/show_bug.cgi?id=137899
+
+        Reviewed by Darin Adler.
+
+        Avoid confusion between AccessibilityObject::isTable() and
+        isAccessibilityTable(). isTable() is equivalent to
+        is<AccessibilityTable>(), while isAccessibilityTable() is an
+        AccessibilityTable that is exposed as an AccessibilityTable to the
+        platform.
+
+        This patch is renaming isAccessibilityTable() to
+        isExposableThroughAccessibility(), makes it non-virtual and defines it
+        on AccessibilityTable only, for clarity.
+
+        This patch also renames isTableExposableThroughAccessibility() to
+        computeIisTableExposableThroughAccessibility() as it is called only
+        once to initialize the m_isExposableThroughAccessibility data member.
+
+        No new tests, no behavior change.
+
+        * accessibility/AccessibilityARIAGrid.cpp:
+        (WebCore::AccessibilityARIAGrid::addChildren):
+        * accessibility/AccessibilityARIAGrid.h:
+        * accessibility/AccessibilityARIAGridCell.cpp:
+        (WebCore::AccessibilityARIAGridCell::parentTable):
+        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
+        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
+        * accessibility/AccessibilityARIAGridRow.cpp:
+        (WebCore::AccessibilityARIAGridRow::disclosedRows):
+        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
+        (WebCore::AccessibilityARIAGridRow::parentTable):
+        * accessibility/AccessibilityNodeObject.cpp:
+        (WebCore::shouldUseAccessiblityObjectInnerText):
+        * accessibility/AccessibilityObject.cpp:
+        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatchAtIndex):
+        (WebCore::appendChildrenToArray):
+        * accessibility/AccessibilityObject.h:
+        (WebCore::AccessibilityObject::isAccessibilityTable): Deleted.
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::ariaSelectedRows):
+        * accessibility/AccessibilityTable.cpp:
+        (WebCore::AccessibilityTable::AccessibilityTable):
+        (WebCore::AccessibilityTable::init):
+        (WebCore::AccessibilityTable::isExposableThroughAccessibility):
+        (WebCore::AccessibilityTable::computeIsTableExposableThroughAccessibility):
+        (WebCore::AccessibilityTable::addChildren):
+        (WebCore::AccessibilityTable::tableLevel):
+        (WebCore::AccessibilityTable::roleValue):
+        (WebCore::AccessibilityTable::computeAccessibilityIsIgnored):
+        (WebCore::AccessibilityTable::title):
+        (WebCore::AccessibilityTable::isAccessibilityTable): Deleted.
+        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility): Deleted.
+        * accessibility/AccessibilityTable.h:
+        * accessibility/AccessibilityTableCell.cpp:
+        (WebCore::AccessibilityTableCell::isTableCell):
+        * accessibility/AccessibilityTableColumn.cpp:
+        (WebCore::AccessibilityTableColumn::headerObject):
+        (WebCore::AccessibilityTableColumn::addChildren):
+        * accessibility/AccessibilityTableHeaderContainer.cpp:
+        (WebCore::AccessibilityTableHeaderContainer::addChildren):
+        * accessibility/AccessibilityTableRow.cpp:
+        (WebCore::AccessibilityTableRow::isTableRow):
+        (WebCore::AccessibilityTableRow::parentTable):
+        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
+        (webkitAccessibleGetNChildren):
+        (webkitAccessibleRefChild):
+        (webkitAccessibleGetAttributes):
+        * accessibility/mac/AXObjectCacheMac.mm:
+        (WebCore::AXObjectCache::postPlatformNotification):
+        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
+        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
+        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
+        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
+        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
+        (-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
+        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
+
+2014-10-22  Chris Dumez  <[email protected]>
+
         Avoid repeated is<MutableStyleProperties>() checks in StyleProperties
         https://bugs.webkit.org/show_bug.cgi?id=137978
 

Modified: trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp	2014-10-22 21:45:20 UTC (rev 175068)
@@ -100,7 +100,7 @@
 {
     ASSERT(!m_haveChildren); 
     
-    if (!isAccessibilityTable()) {
+    if (!isExposableThroughAccessibility()) {
         AccessibilityRenderObject::addChildren();
         return;
     }

Modified: trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.h (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.h	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.h	2014-10-22 21:45:20 UTC (rev 175068)
@@ -53,7 +53,7 @@
     // ARIA treegrids and grids support selected rows.
     virtual bool supportsSelectedRows() override { return true; }
     virtual bool isMultiSelectable() const override { return true; }
-    virtual bool isTableExposableThroughAccessibility() const override { return true; }
+    virtual bool computeIsTableExposableThroughAccessibility() const override { return true; }
     
     void addRowDescendant(AccessibilityObject*, HashSet<AccessibilityObject*>& appendedRows, unsigned& columnCount);
     bool addTableCellChild(AccessibilityObject*, HashSet<AccessibilityObject*>& appendedRows, unsigned& columnCount);

Modified: trunk/Source/WebCore/accessibility/AccessibilityARIAGridCell.cpp (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityARIAGridCell.cpp	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityARIAGridCell.cpp	2014-10-22 21:45:20 UTC (rev 175068)
@@ -55,14 +55,14 @@
     if (!parent)
         return nullptr;
     
-    if (parent->isAccessibilityTable())
+    if (is<AccessibilityTable>(*parent) && downcast<AccessibilityTable>(*parent).isExposableThroughAccessibility())
         return downcast<AccessibilityTable>(parent);
 
     // It could happen that we hadn't reached the parent table yet (in
     // case objects for rows were not ignoring accessibility) so for
     // that reason we need to run parentObjectUnignored once again.
     parent = parent->parentObjectUnignored();
-    if (!parent || !parent->isAccessibilityTable())
+    if (!(is<AccessibilityTable>(parent) && downcast<AccessibilityTable>(*parent).isExposableThroughAccessibility()))
         return nullptr;
     
     return downcast<AccessibilityTable>(parent);
@@ -77,7 +77,7 @@
     if (is<AccessibilityTableRow>(*parent)) {
         // We already got a table row, use its API.
         rowRange.first = downcast<AccessibilityTableRow>(*parent).rowIndex();
-    } else if (parent->isAccessibilityTable()) {
+    } else if (is<AccessibilityTable>(*parent) && downcast<AccessibilityTable>(*parent).isExposableThroughAccessibility()) {
         // We reached the parent table, so we need to inspect its
         // children to determine the row index for the cell in it.
         unsigned columnCount = downcast<AccessibilityTable>(*parent).columnCount();
@@ -104,7 +104,8 @@
     if (!parent)
         return;
 
-    if (!parent->isTableRow() && !parent->isAccessibilityTable())
+    if (!is<AccessibilityTableRow>(*parent)
+        && !(is<AccessibilityTable>(*parent) && downcast<AccessibilityTable>(*parent).isExposableThroughAccessibility()))
         return;
 
     const AccessibilityChildrenVector& siblings = parent->children();

Modified: trunk/Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp	2014-10-22 21:45:20 UTC (rev 175068)
@@ -63,7 +63,7 @@
     // The contiguous disclosed rows will be the rows in the table that 
     // have an aria-level of plus 1 from this row.
     AccessibilityObject* parent = parentObjectUnignored();
-    if (!parent || !parent->isAccessibilityTable())
+    if (!is<AccessibilityTable>(*parent) || !downcast<AccessibilityTable>(*parent).isExposableThroughAccessibility())
         return;
     
     // Search for rows that match the correct level. 
@@ -90,7 +90,7 @@
     // The row that discloses this one is the row in the table
     // that is aria-level subtract 1 from this row.
     AccessibilityObject* parent = parentObjectUnignored();
-    if (!parent || !parent->isAccessibilityTable())
+    if (!is<AccessibilityTable>(*parent) || !downcast<AccessibilityTable>(*parent).isExposableThroughAccessibility())
         return nullptr;
     
     // If the level is 1 or less, than nothing discloses this row.
@@ -120,8 +120,11 @@
     // only have "row" elements, but if not, we still should handle it gracefully by finding the right table.
     for (AccessibilityObject* parent = parentObject(); parent; parent = parent->parentObject()) {
         // The parent table for an ARIA grid row should be an ARIA table.
-        if (parent->isAccessibilityTable() && downcast<AccessibilityTable>(*parent).isAriaTable())
-            return downcast<AccessibilityTable>(parent);
+        if (is<AccessibilityTable>(*parent)) {
+            AccessibilityTable& tableParent = downcast<AccessibilityTable>(*parent);
+            if (tableParent.isExposableThroughAccessibility() && tableParent.isAriaTable())
+                return &tableParent;
+        }
     }
     
     return nullptr;

Modified: trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp	2014-10-22 21:45:20 UTC (rev 175068)
@@ -31,6 +31,7 @@
 
 #include "AXObjectCache.h"
 #include "AccessibilityImageMapLink.h"
+#include "AccessibilityList.h"
 #include "AccessibilityListBox.h"
 #include "AccessibilitySpinButton.h"
 #include "AccessibilityTable.h"
@@ -1623,9 +1624,15 @@
         return false;
 
     // Skip big container elements like lists, tables, etc.
-    if (obj->isList() || obj->isAccessibilityTable() || obj->isTree() || obj->isCanvas())
+    if (is<AccessibilityList>(*obj))
         return false;
 
+    if (is<AccessibilityTable>(*obj) && downcast<AccessibilityTable>(*obj).isExposableThroughAccessibility())
+        return false;
+
+    if (obj->isTree() || obj->isCanvas())
+        return false;
+
     return true;
 }
 

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2014-10-22 21:45:20 UTC (rev 175068)
@@ -231,11 +231,11 @@
         
     case TableSameLevelSearchKey:
         return criteria->startObject
-            && axObject->isAccessibilityTable()
-            && axObject->tableLevel() == criteria->startObject->tableLevel();
+            && is<AccessibilityTable>(*axObject) && downcast<AccessibilityTable>(*axObject).isExposableThroughAccessibility()
+            && downcast<AccessibilityTable>(*axObject).tableLevel() == criteria->startObject->tableLevel();
         
     case TableSearchKey:
-        return axObject->isAccessibilityTable();
+        return is<AccessibilityTable>(*axObject) && downcast<AccessibilityTable>(*axObject).isExposableThroughAccessibility();
         
     case TextFieldSearchKey:
         return axObject->isTextControl();
@@ -502,7 +502,7 @@
 {
     // A table's children includes elements whose own children are also the table's children (due to the way the Mac exposes tables).
     // The rows from the table should be queried, since those are direct descendants of the table, and they contain content.
-    const auto& searchChildren = object->isAccessibilityTable() ? downcast<AccessibilityTable>(*object).rows() : object->children();
+    const auto& searchChildren = is<AccessibilityTable>(*object) && downcast<AccessibilityTable>(*object).isExposableThroughAccessibility() ? downcast<AccessibilityTable>(*object).rows() : object->children();
 
     size_t childrenSize = searchChildren.size();
 

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.h	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h	2014-10-22 21:45:20 UTC (rev 175068)
@@ -475,7 +475,6 @@
     virtual bool isControl() const { return false; }
     virtual bool isList() const { return false; }
     virtual bool isTable() const { return false; }
-    virtual bool isAccessibilityTable() const { return false; }
     virtual bool isDataTable() const { return false; }
     virtual bool isTableRow() const { return false; }
     virtual bool isTableColumn() const { return false; }

Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2014-10-22 21:45:20 UTC (rev 175068)
@@ -3144,8 +3144,11 @@
         AccessibilityChildrenVector allRows;
         ariaTreeRows(allRows);
         rowsIteration(allRows);
-    } else if (isAccessibilityTable() && downcast<AccessibilityTable>(*this).supportsSelectedRows())
-        rowsIteration(downcast<AccessibilityTable>(*this).rows());
+    } else if (is<AccessibilityTable>(*this)) {
+        auto& thisTable = downcast<AccessibilityTable>(*this);
+        if (thisTable.isExposableThroughAccessibility() && thisTable.supportsSelectedRows())
+            rowsIteration(thisTable.rows());
+    }
 }
     
 void AccessibilityRenderObject::ariaListboxSelectedChildren(AccessibilityChildrenVector& result)

Modified: trunk/Source/WebCore/accessibility/AccessibilityTable.cpp (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityTable.cpp	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityTable.cpp	2014-10-22 21:45:20 UTC (rev 175068)
@@ -51,7 +51,7 @@
 AccessibilityTable::AccessibilityTable(RenderObject* renderer)
     : AccessibilityRenderObject(renderer)
     , m_headerContainer(nullptr)
-    , m_isAccessibilityTable(true)
+    , m_isExposableThroughAccessibility(true)
 {
 }
 
@@ -62,7 +62,7 @@
 void AccessibilityTable::init()
 {
     AccessibilityRenderObject::init();
-    m_isAccessibilityTable = isTableExposableThroughAccessibility();
+    m_isExposableThroughAccessibility = computeIsTableExposableThroughAccessibility();
 }
 
 PassRefPtr<AccessibilityTable> AccessibilityTable::create(RenderObject* renderer)
@@ -82,12 +82,12 @@
     return false;
 }
 
-bool AccessibilityTable::isAccessibilityTable() const
+bool AccessibilityTable::isExposableThroughAccessibility() const
 {
     if (!m_renderer)
         return false;
     
-    return m_isAccessibilityTable;
+    return m_isExposableThroughAccessibility;
 }
 
 HTMLTableElement* AccessibilityTable::tableElement() const
@@ -309,7 +309,7 @@
     return false;
 }
     
-bool AccessibilityTable::isTableExposableThroughAccessibility() const
+bool AccessibilityTable::computeIsTableExposableThroughAccessibility() const
 {
     // The following is a heuristic used to determine if a
     // <table> should be exposed as an AXTable. The goal
@@ -347,7 +347,7 @@
 
 void AccessibilityTable::addChildren()
 {
-    if (!isAccessibilityTable()) {
+    if (!isExposableThroughAccessibility()) {
         AccessibilityRenderObject::addChildren();
         return;
     }
@@ -525,7 +525,7 @@
 {
     int level = 0;
     for (AccessibilityObject* obj = static_cast<AccessibilityObject*>(const_cast<AccessibilityTable*>(this)); obj; obj = obj->parentObject()) {
-        if (obj->isAccessibilityTable())
+        if (is<AccessibilityTable>(*obj) && downcast<AccessibilityTable>(*obj).isExposableThroughAccessibility())
             ++level;
     }
     
@@ -568,7 +568,7 @@
 
 AccessibilityRole AccessibilityTable::roleValue() const
 {
-    if (!isAccessibilityTable())
+    if (!isExposableThroughAccessibility())
         return AccessibilityRenderObject::roleValue();
 
     return TableRole;
@@ -582,7 +582,7 @@
     if (decision == IgnoreObject)
         return true;
     
-    if (!isAccessibilityTable())
+    if (!isExposableThroughAccessibility())
         return AccessibilityRenderObject::computeAccessibilityIsIgnored();
         
     return false;
@@ -597,7 +597,7 @@
 
 String AccessibilityTable::title() const
 {
-    if (!isAccessibilityTable())
+    if (!isExposableThroughAccessibility())
         return AccessibilityRenderObject::title();
     
     String title;

Modified: trunk/Source/WebCore/accessibility/AccessibilityTable.h (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityTable.h	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityTable.h	2014-10-22 21:45:20 UTC (rev 175068)
@@ -60,7 +60,7 @@
     virtual bool supportsSelectedRows() { return false; }
     unsigned columnCount();
     unsigned rowCount();
-    virtual int tableLevel() const override;
+    virtual int tableLevel() const override final;
     
     virtual String title() const override;
     
@@ -75,15 +75,15 @@
     // an object that contains, as children, all the objects that act as headers
     AccessibilityObject* headerContainer();
 
-    // isAccessibilityTable is whether it is exposed as an AccessibilityTable to the platform.
-    virtual bool isAccessibilityTable() const override final;
+    // isExposableThroughAccessibility() is whether it is exposed as an AccessibilityTable to the platform.
+    bool isExposableThroughAccessibility() const;
 
 protected:
     AccessibilityChildrenVector m_rows;
     AccessibilityChildrenVector m_columns;
 
     RefPtr<AccessibilityObject> m_headerContainer;
-    bool m_isAccessibilityTable;
+    bool m_isExposableThroughAccessibility;
 
     bool hasARIARole() const;
 
@@ -92,11 +92,10 @@
     // isDataTable is whether it is exposed as an AccessibilityTable because the heuristic
     // think this "looks" like a data-based table (instead of a table used for layout).
     virtual bool isDataTable() const override;
-
-    virtual bool isTableExposableThroughAccessibility() const;
     virtual bool computeAccessibilityIsIgnored() const override;
 
 private:
+    virtual bool computeIsTableExposableThroughAccessibility() const;
     virtual void titleElementText(Vector<AccessibilityText>&) const override;
     HTMLTableElement* tableElement() const;
     void addChildrenFromSection(RenderTableSection*, unsigned& maxColumnCount);

Modified: trunk/Source/WebCore/accessibility/AccessibilityTableCell.cpp (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityTableCell.cpp	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityTableCell.cpp	2014-10-22 21:45:20 UTC (rev 175068)
@@ -100,7 +100,7 @@
     // This used to check if the unignoredParent was a row, but that exploded performance if
     // this was in nested tables. This check should be just as good.
     AccessibilityObject* parentTable = this->parentTable();
-    return parentTable && parentTable->isAccessibilityTable();
+    return is<AccessibilityTable>(parentTable) && downcast<AccessibilityTable>(*parentTable).isExposableThroughAccessibility();
 }
     
 AccessibilityRole AccessibilityTableCell::determineAccessibilityRole()

Modified: trunk/Source/WebCore/accessibility/AccessibilityTableColumn.cpp (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityTableColumn.cpp	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityTableColumn.cpp	2014-10-22 21:45:20 UTC (rev 175068)
@@ -75,11 +75,13 @@
     RenderObject* renderer = m_parent->renderer();
     if (!renderer)
         return nullptr;
-    
-    if (!m_parent->isAccessibilityTable())
+    if (!is<AccessibilityTable>(*m_parent))
         return nullptr;
+
+    auto& parentTable = downcast<AccessibilityTable>(*m_parent);
+    if (!parentTable.isExposableThroughAccessibility())
+        return nullptr;
     
-    auto& parentTable = downcast<AccessibilityTable>(*m_parent);
     if (parentTable.isAriaTable()) {
         for (const auto& cell : children()) {
             if (cell->ariaRoleAttribute() == ColumnHeaderRole)
@@ -170,10 +172,13 @@
     ASSERT(!m_haveChildren); 
     
     m_haveChildren = true;
-    if (!m_parent || !m_parent->isAccessibilityTable())
+    if (!is<AccessibilityTable>(m_parent))
         return;
+
+    auto& parentTable = downcast<AccessibilityTable>(*m_parent);
+    if (!parentTable.isExposableThroughAccessibility())
+        return;
     
-    AccessibilityTable& parentTable = downcast<AccessibilityTable>(*m_parent);
     int numRows = parentTable.rowCount();
     
     for (int i = 0; i < numRows; ++i) {

Modified: trunk/Source/WebCore/accessibility/AccessibilityTableHeaderContainer.cpp (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityTableHeaderContainer.cpp	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityTableHeaderContainer.cpp	2014-10-22 21:45:20 UTC (rev 175068)
@@ -70,10 +70,14 @@
     ASSERT(!m_haveChildren); 
     
     m_haveChildren = true;
-    if (!m_parent || !m_parent->isAccessibilityTable())
+    if (!is<AccessibilityTable>(m_parent))
         return;
+
+    auto& parentTable = downcast<AccessibilityTable>(*m_parent);
+    if (!parentTable.isExposableThroughAccessibility())
+        return;
     
-    downcast<AccessibilityTable>(*m_parent).columnHeaders(m_children);
+    parentTable.columnHeaders(m_children);
     
     for (const auto& child : m_children)
         m_headerRect.unite(child->elementRect());

Modified: trunk/Source/WebCore/accessibility/AccessibilityTableRow.cpp (175067 => 175068)


--- trunk/Source/WebCore/accessibility/AccessibilityTableRow.cpp	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/AccessibilityTableRow.cpp	2014-10-22 21:45:20 UTC (rev 175068)
@@ -73,10 +73,7 @@
 bool AccessibilityTableRow::isTableRow() const
 {
     AccessibilityObject* table = parentTable();
-    if (!table || !table->isAccessibilityTable())
-        return false;
-    
-    return true;
+    return is<AccessibilityTable>(table)  && downcast<AccessibilityTable>(*table).isExposableThroughAccessibility();
 }
     
 AccessibilityObject* AccessibilityTableRow::observableObject() const
@@ -106,8 +103,12 @@
     for (AccessibilityObject* parent = parentObject(); parent; parent = parent->parentObject()) {
         // If this is a table object, but not an accessibility table, we should stop because we don't want to
         // choose another ancestor table as this row's table.
-        if (is<AccessibilityTable>(*parent))
-            return downcast<AccessibilityTable>(*parent).isAccessibilityTable() ? downcast<AccessibilityTable>(parent) : nullptr;
+        if (is<AccessibilityTable>(*parent)) {
+            auto& parentTable = downcast<AccessibilityTable>(*parent);
+            if (parentTable.isExposableThroughAccessibility())
+                return &parentTable;
+            break;
+        }
     }
     
     return nullptr;

Modified: trunk/Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.cpp (175067 => 175068)


--- trunk/Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.cpp	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.cpp	2014-10-22 21:45:20 UTC (rev 175068)
@@ -37,6 +37,7 @@
 #include "AXObjectCache.h"
 #include "AccessibilityList.h"
 #include "AccessibilityListBoxOption.h"
+#include "AccessibilityTable.h"
 #include "Document.h"
 #include "Frame.h"
 #include "FrameView.h"
@@ -355,7 +356,7 @@
 
     // Tables should be treated in a different way because rows should
     // be bypassed when exposing the accessible hierarchy.
-    if (coreObject->isAccessibilityTable())
+    if (is<AccessibilityTable>(*coreObject) && downcast<AccessibilityTable>(*coreObject).isExposableThroughAccessibility())
         return getNChildrenForTable(coreObject);
 
     return coreObject->children().size();
@@ -398,7 +399,7 @@
 
     // Tables are special cases because rows should be bypassed, but
     // still taking their cells into account.
-    if (coreObject->isAccessibilityTable())
+    if (is<AccessibilityTable>(*coreObject) && downcast<AccessibilityTable>(*coreObject).isExposableThroughAccessibility())
         coreChild = getChildForTable(coreObject, index);
     else {
         const AccessibilityObject::AccessibilityChildrenVector& children = coreObject->children();
@@ -520,7 +521,7 @@
 
     // Set the 'layout-guess' attribute to help Assistive
     // Technologies know when an exposed table is not data table.
-    if (coreObject->isAccessibilityTable() && !coreObject->isDataTable())
+    if (is<AccessibilityTable>(*coreObject) && downcast<AccessibilityTable>(*coreObject).isExposableThroughAccessibility() && !coreObject->isDataTable())
         attributeSet = addToAtkAttributeSet(attributeSet, "layout-guess", "true");
 
     String placeholder = coreObject->placeholderValue();

Modified: trunk/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm (175067 => 175068)


--- trunk/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm	2014-10-22 21:45:20 UTC (rev 175068)
@@ -29,6 +29,7 @@
 #if HAVE(ACCESSIBILITY)
 
 #import "AccessibilityObject.h"
+#import "AccessibilityTable.h"
 #import "RenderObject.h"
 #import "WebAccessibilityObjectWrapperMac.h"
 #import "WebCoreSystemInterface.h"
@@ -96,7 +97,7 @@
             macNotification = @"AXInvalidStatusChanged";
             break;
         case AXSelectedChildrenChanged:
-            if (obj->isAccessibilityTable())
+            if (is<AccessibilityTable>(*obj) && downcast<AccessibilityTable>(*obj).isExposableThroughAccessibility())
                 macNotification = NSAccessibilitySelectedRowsChangedNotification;
             else
                 macNotification = NSAccessibilitySelectedChildrenChangedNotification;

Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (175067 => 175068)


--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm	2014-10-22 21:16:48 UTC (rev 175067)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm	2014-10-22 21:45:20 UTC (rev 175068)
@@ -1199,7 +1199,7 @@
     if (m_object->supportsARIADropping())
         [additional addObject:NSAccessibilityDropEffectsAttribute];
     
-    if (m_object->isAccessibilityTable() && downcast<AccessibilityTable>(*m_object).supportsSelectedRows())
+    if (is<AccessibilityTable>(*m_object) && downcast<AccessibilityTable>(*m_object).isExposableThroughAccessibility() && downcast<AccessibilityTable>(*m_object).supportsSelectedRows())
         [additional addObject:NSAccessibilitySelectedRowsAttribute];
     
     if (m_object->supportsARIALiveRegion()) {
@@ -1590,7 +1590,7 @@
     else if (m_object->isAnchor() || m_object->isImage() || m_object->isLink())
         objectAttributes = anchorAttrs;
     
-    else if (m_object->isAccessibilityTable())
+    else if (is<AccessibilityTable>(*m_object) && downcast<AccessibilityTable>(*m_object).isExposableThroughAccessibility())
         objectAttributes = tableAttrs;
     else if (m_object->isTableColumn())
         objectAttributes = tableColAttrs;
@@ -2554,7 +2554,7 @@
         }
     }
     
-    if (m_object->isAccessibilityTable()) {
+    if (is<AccessibilityTable>(*m_object) && downcast<AccessibilityTable>(*m_object).isExposableThroughAccessibility()) {
         auto& table = downcast<AccessibilityTable>(*m_object);
         if ([attributeName isEqualToString:NSAccessibilityRowsAttribute])
             return convertToNSArray(table.rows());
@@ -3128,7 +3128,7 @@
     if (m_object->isTextControl())
         return textParamAttrs;
     
-    if (m_object->isAccessibilityTable())
+    if (is<AccessibilityTable>(*m_object) && downcast<AccessibilityTable>(*m_object).isExposableThroughAccessibility())
         return tableParamAttrs;
     
     if (m_object->isMenuRelated())
@@ -3314,7 +3314,7 @@
     else if ([attributeName isEqualToString:NSAccessibilitySelectedRowsAttribute]) {
         AccessibilityObject::AccessibilityChildrenVector selectedRows;
         convertToVector(array, selectedRows);
-        if (m_object->isTree() || m_object->isAccessibilityTable())
+        if (m_object->isTree() || (is<AccessibilityTable>(*m_object) && downcast<AccessibilityTable>(*m_object).isExposableThroughAccessibility()))
             m_object->setSelectedRows(selectedRows);
     } else if ([attributeName isEqualToString:NSAccessibilityGrabbedAttribute])
         m_object->setARIAGrabbed([number boolValue]);
@@ -3703,7 +3703,7 @@
         return [self textMarkerForVisiblePosition:visiblePosRange.end];
     }
     
-    if (m_object->isAccessibilityTable()) {
+    if (is<AccessibilityTable>(*m_object) && downcast<AccessibilityTable>(*m_object).isExposableThroughAccessibility()) {
         if ([attribute isEqualToString:NSAccessibilityCellForColumnAndRowParameterizedAttribute]) {
             if (array == nil || [array count] != 2)
                 return nil;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to