AX: Long narrow tables should not be made in data tables unnecessarily
https://bugs.webkit.org/show_bug.cgi?id=221061
<rdar://problem/73681149>

Reviewed by Zalan Bujtas.

Source/WebCore:

Some web authors use long columns/rows of cells for layout purposes. We shouldn't
automatically turn these into data tables based on row count only.
Instead let's ensure there are at least two rows/cols of content before automatically
turning into a data table.

Test: accessibility/narrow-tables-ignored.html

* accessibility/AccessibilityTable.cpp:
(WebCore::AccessibilityTable::isDataTable const):

LayoutTests:

* accessibility/narrow-tables-ignored-expected.txt: Added.
* accessibility/narrow-tables-ignored.html: Added.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@272024 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index d513bfd..6613727 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,14 @@
+2021-01-28  Chris Fleizach  <cfleizach@apple.com>
+
+        AX: Long narrow tables should not be made in data tables unnecessarily
+        https://bugs.webkit.org/show_bug.cgi?id=221061
+        <rdar://problem/73681149>
+
+        Reviewed by Zalan Bujtas.
+
+        * accessibility/narrow-tables-ignored-expected.txt: Added.
+        * accessibility/narrow-tables-ignored.html: Added.
+
 2021-01-28  Ada Chan  <ada.chan@apple.com>
 
         REGRESSION (r271988): XRSession.end() promise is not resolved if PlatformXR::Device::supportsSessionShutdownNotification() returns false
diff --git a/LayoutTests/accessibility/narrow-tables-ignored-expected.txt b/LayoutTests/accessibility/narrow-tables-ignored-expected.txt
new file mode 100644
index 0000000..0c7bddf
--- /dev/null
+++ b/LayoutTests/accessibility/narrow-tables-ignored-expected.txt
@@ -0,0 +1,13 @@
+This tests that very narrow or very wide tables are ignored.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+table1: AXRole: AXGroup
+table2: AXRole: AXGroup
+table3: AXRole: AXTable
+table4: AXRole: AXTable
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/accessibility/narrow-tables-ignored.html b/LayoutTests/accessibility/narrow-tables-ignored.html
new file mode 100644
index 0000000..a2ea021
--- /dev/null
+++ b/LayoutTests/accessibility/narrow-tables-ignored.html
@@ -0,0 +1,105 @@
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body id="body">
+
+<div id="content">
+
+<!-- Ignore table -- not enough rows -->
+<table id="table1" tabindex="0">
+<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td>
+<td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
+</table>
+
+<!-- Ignore table -- not enough columns -->
+<table id="table2" tabindex="0">
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+<tr><td>td</td></tr>
+</table>
+
+<!-- Show table - enough rows -->
+<table id="table3" tabindex="0">
+<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td>
+<td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td>
+<td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
+</table>
+
+<!-- Show table -- enough cols -->
+<table id="table4" tabindex="0">
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+<tr><td>td</td><td>td</td></tr>
+</table>
+
+</div>
+
+<p id="description"></p>
+<div id="console"></div>
+<script>
+    description("This tests that very narrow or very wide tables are ignored.");
+    if (window.accessibilityController) {
+
+        // Ignore tables because they're too narrow.
+        var table1 = accessibilityController.accessibleElementById("table1");
+        debug("table1: " + table1.role);
+
+        var table2 = accessibilityController.accessibleElementById("table2");
+        debug("table2: " + table2.role);
+
+        // Tables not ignored, because they are wide enough.
+        var table3 = accessibilityController.accessibleElementById("table3");
+        debug("table3: " + table3.role);
+
+        var table4 = accessibilityController.accessibleElementById("table4");
+        debug("table4: " + table4.role);
+        document.getElementById("content").style.display = "none";
+    }
+</script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>