chromium/content/test/data/accessibility/regression/hidden-table.html

<!doctype html>
<!--
@WAIT-FOR:Done
-->
<body>
  <table>
    <thead>
      <tr>
        <th>Header 1</th>
        <th>Header 2</th>
      </tr>
    </thead>
    <tbody hidden>
    </tbody>
    <tfoot>
    </tfoot>
  </table>

  <script>
    function addRow(container) {
        let row = document.createElement('tr');
        container.appendChild(row);
        for (let j = 0; j < 100; j++) {
            let cell = document.createElement('td');
            cell.innerHTML = Math.random();
            row.appendChild(cell);
            cell.tabIndex = -1;
        }
    }

    setTimeout(() => {
        // Now add a bunch of rows to the tbody, which is hidden.
        // Every one of those added cells changes its tabIndex, which
        // triggers a call to MarkAXObjectDirty on a node that's not
        // included in the accessibility tree. That caused a bug where
        // all of the real nodes of the table keep getting re-serialized.
        // This is now caught by a DCHECK in BrowserAccessibilityManager
        // that an AXTreeUpdate shouldn't be larger than the resulting tree.
        for (let i = 0; i < 10; i++) {
            addRow(document.querySelector('tbody'));
        }

        // Finally, clear out all of those extra rows and finish
        // the test.
        setTimeout(() => {
            document.querySelector('tbody').innerHTML = '';
            let done = document.createElement('div');
            done.innerHTML = 'Done';
            document.body.appendChild(done);
        }, 10);
    }, 10);
  </script>
</body>