[webkit-changes] [WebKit/WebKit] 723eb8: AX: Submit Bug button on Bugzilla is not accessibl...

Tyler Wilcock noreply at github.com
Thu Oct 19 12:43:39 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 723eb83c4fdb24e0d50c664452328dc6188ca7dd
      https://github.com/WebKit/WebKit/commit/723eb83c4fdb24e0d50c664452328dc6188ca7dd
  Author: Tyler Wilcock <tyler_w at apple.com>
  Date:   2023-10-19 (Thu, 19 Oct 2023)

  Changed paths:
    M LayoutTests/accessibility/aria-cellspans-with-native-cellspans-expected.txt
    M LayoutTests/accessibility/aria-table-attributes-expected.txt
    M LayoutTests/accessibility/aria-table-attributes.html
    M LayoutTests/accessibility/custom-elements/table-expected.txt
    M LayoutTests/accessibility/custom-elements/table.html
    A LayoutTests/accessibility/out-of-bounds-rowspan-aria-hidden-expected.txt
    A LayoutTests/accessibility/out-of-bounds-rowspan-aria-hidden.html
    A LayoutTests/accessibility/out-of-bounds-rowspan-display-none-expected.txt
    A LayoutTests/accessibility/out-of-bounds-rowspan-display-none.html
    A LayoutTests/accessibility/out-of-bounds-rowspan-expected.txt
    A LayoutTests/accessibility/out-of-bounds-rowspan-orphan-rows-expected.txt
    A LayoutTests/accessibility/out-of-bounds-rowspan-orphan-rows.html
    A LayoutTests/accessibility/out-of-bounds-rowspan-presentational-row-expected.txt
    A LayoutTests/accessibility/out-of-bounds-rowspan-presentational-row.html
    A LayoutTests/accessibility/out-of-bounds-rowspan.html
    M LayoutTests/platform/glib/accessibility/custom-elements/table-expected.txt
    A LayoutTests/platform/glib/accessibility/out-of-bounds-rowspan-aria-hidden-expected.txt
    A LayoutTests/platform/glib/accessibility/out-of-bounds-rowspan-display-none-expected.txt
    A LayoutTests/platform/glib/accessibility/out-of-bounds-rowspan-expected.txt
    A LayoutTests/platform/glib/accessibility/out-of-bounds-rowspan-orphan-rows-expected.txt
    A LayoutTests/platform/glib/accessibility/out-of-bounds-rowspan-presentational-row-expected.txt
    M LayoutTests/platform/ios/TestExpectations
    A LayoutTests/platform/ios/accessibility/out-of-bounds-rowspan-aria-hidden-expected.txt
    A LayoutTests/platform/ios/accessibility/out-of-bounds-rowspan-display-none-expected.txt
    A LayoutTests/platform/ios/accessibility/out-of-bounds-rowspan-expected.txt
    A LayoutTests/platform/ios/accessibility/out-of-bounds-rowspan-orphan-rows-expected.txt
    A LayoutTests/platform/ios/accessibility/out-of-bounds-rowspan-presentational-row-expected.txt
    M LayoutTests/resources/accessibility-helper.js
    M Source/WebCore/accessibility/AXLogger.cpp
    M Source/WebCore/accessibility/AXObjectCache.cpp
    M Source/WebCore/accessibility/AXObjectCache.h
    M Source/WebCore/accessibility/AccessibilityObject.cpp
    M Source/WebCore/accessibility/AccessibilityObject.h
    M Source/WebCore/accessibility/AccessibilityRenderObject.cpp
    M Source/WebCore/accessibility/AccessibilitySVGElement.cpp
    M Source/WebCore/accessibility/AccessibilityTable.cpp
    M Source/WebCore/accessibility/AccessibilityTableCell.cpp
    M Source/WebCore/accessibility/AccessibilityTableCell.h
    M Source/WebCore/accessibility/AccessibilityTableRow.cpp
    M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp

  Log Message:
  -----------
  AX: Submit Bug button on Bugzilla is not accessible via VoiceOver VO-Right navigation
https://bugs.webkit.org/show_bug.cgi?id=263162
rdar://115783249

Reviewed by Andres Gonzalez.

This bug happens for two reasons:

  1. Bugzilla represents its UI via HTML table, and separates rows into
     multiple different tbody elements
  2. Some cells have rowspans that span out-of-bounds of their
     containing tbody due to display:none rows

Per spec, rowspan is not allowed to escape the table section (tbody, thead, tfoot)
that the cell is contained in, but our algorithm did not prevent that. The result was
that all the cells following the rowspan cell were shifted inappropriately, with some
being shifted out of the table entirely.

This patch fixes the issue by implementing the downward-growing cell algorithm to expand
rowspanned cells as much as necessary (and not any further).

https://html.spec.whatwg.org/multipage/tables.html#algorithm-for-growing-downward-growing-cells

This (along with necessary auxiliary changes) fix numerous bugs beyond the one described above:

  1. Cells now track their "effective" rowspan, i.e. how many rows they
     actually expand in the final table layout. Previously, we took the
     author's provided rowspan as truth, despite it often not being
     accurate (because of AX-hidden rows, or because it was bigger than
     the entire number of rows in the rowgroup).

     This allows us to provide more accurate information to AT users
     (e.g. when VoiceOver reads "spans x rows").

   2. Properly handle implicit rowgroups in ARIA tables, the lack of
      which caused us to fail to expose content on real websites

   3. We now properly ignore role="presentation" rows

   4. We no longer perform a full `updateNode` for objects who change
      rowspan, aria-rowspan, colspan, and aria-colspan attributes. This
      was wasteful and unnecessary. Instead, we only update what is
      necessary: AXPropertyName::ColumnIndexRange and
      AXPropertyName::RowIndexRange

All of these issues exposed a lack of coverage in our tests. New tests are added to rectify this:
  - out-of-bounds-rowspan-aria-hidden.html
  - out-of-bounds-rowspan-display-none.html
  - out-of-bounds-rowspan-orphan-rows.html
  - out-of-bounds-rowspan-presentational-row.html
  - out-of-bounds-rowspan.html

New test cases are also added to aria-table-attributes.html.

Several expectations in existing tests are also updated, as the the old expectations were verifying
incorrect results.

* LayoutTests/accessibility/aria-cellspans-with-native-cellspans-expected.txt:
* LayoutTests/accessibility/aria-table-attributes-expected.txt:
* LayoutTests/accessibility/aria-table-attributes.html:
* LayoutTests/accessibility/custom-elements/table-expected.txt:
* LayoutTests/accessibility/custom-elements/table.html:
* LayoutTests/accessibility/out-of-bounds-rowspan-aria-hidden-expected.txt: Added.
* LayoutTests/accessibility/out-of-bounds-rowspan-aria-hidden.html: Added.
* LayoutTests/accessibility/out-of-bounds-rowspan-display-none-expected.txt: Added.
* LayoutTests/accessibility/out-of-bounds-rowspan-display-none.html: Added.
* LayoutTests/accessibility/out-of-bounds-rowspan-expected.txt: Added.
* LayoutTests/accessibility/out-of-bounds-rowspan-orphan-rows-expected.txt: Added.
* LayoutTests/accessibility/out-of-bounds-rowspan-orphan-rows.html: Added.
* LayoutTests/accessibility/out-of-bounds-rowspan-presentational-row-expected.txt: Added.
* LayoutTests/accessibility/out-of-bounds-rowspan-presentational-row.html: Added.
* LayoutTests/accessibility/out-of-bounds-rowspan.html: Added.
* LayoutTests/platform/glib/accessibility/custom-elements/table-expected.txt: Added.
* LayoutTests/platform/glib/accessibility/out-of-bounds-rowspan-aria-hidden-expected.txt: Added.
* LayoutTests/platform/glib/accessibility/out-of-bounds-rowspan-orphan-rows-expected.txt: Added.
* LayoutTests/platform/glib/accessibility/out-of-bounds-rowspan-presentational-row-expected.txt: Added.
* LayoutTests/platform/glib/accessibility/out-of-bounds-rowspan-display-none-expected.txt: Added.
* LayoutTests/platform/glib/accessibility/out-of-bounds-rowspan-expected.txt: Added.
* LayoutTests/platform/ios/TestExpectations: Enable new tests.
* LayoutTests/platform/ios/accessibility/out-of-bounds-rowspan-aria-hidden-expected.txt: Added.
* LayoutTests/platform/ios/accessibility/out-of-bounds-rowspan-orphan-rows-expected.txt: Added.
* LayoutTests/platform/ios/accessibility/out-of-bounds-rowspan-presentational-row-expected.txt: Added.
* LayoutTests/platform/ios/accessibility/out-of-bounds-rowspan-display-none-expected.txt: Added.
* LayoutTests/platform/ios/accessibility/out-of-bounds-rowspan-expected.txt: Added.
* LayoutTests/resources/accessibility-helper.js:
(dumpAXTable):
(dumpAXSearchTraversal.elementDescription):
(dumpAXSearchTraversal):
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::handleRowspanChanged):
(WebCore::AXObjectCache::handleAttributeChange):
(WebCore::AXObjectCache::performDeferredCacheUpdate):
(WebCore::AXObjectCache::updateIsolatedTree):
(WebCore::AXObjectCache::deferRowspanChange):
* Source/WebCore/accessibility/AXObjectCache.h:
(WebCore::AXObjectCache::deferRowspanChange):
* Source/WebCore/accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::ignoredFromPresentationalRole const):
* Source/WebCore/accessibility/AccessibilityObject.h:
* Source/WebCore/accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const):
* Source/WebCore/accessibility/AccessibilitySVGElement.cpp:
(WebCore::AccessibilitySVGElement::computeAccessibilityIsIgnored const):
* Source/WebCore/accessibility/AccessibilityTable.cpp:
(WebCore::AccessibilityTable::addChildren):
* Source/WebCore/accessibility/AccessibilityTableCell.cpp:
(WebCore::AccessibilityTableCell::rowIndexRange const):
* Source/WebCore/accessibility/AccessibilityTableCell.h:
(WebCore::AccessibilityTableCell::incrementEffectiveRowSpan):
(WebCore::AccessibilityTableCell::resetEffectiveRowSpan):
* Source/WebCore/accessibility/AccessibilityTableRow.cpp:
(WebCore::AccessibilityTableRow::computeAccessibilityIsIgnored const):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::updateNodeProperties):

Canonical link: https://commits.webkit.org/269544@main




More information about the webkit-changes mailing list