AX: [ATK] Table captions and table rows are missing from the accessible hierarchy
authorjdiggs@igalia.com <jdiggs@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Dec 2014 02:02:36 +0000 (02:02 +0000)
committerjdiggs@igalia.com <jdiggs@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Dec 2014 02:02:36 +0000 (02:02 +0000)
https://bugs.webkit.org/show_bug.cgi?id=139005

Reviewed by Chris Fleizach.

Source/WebCore:

Expose table captions and rows via ATK. Accomplishing the former is done
by role mapping and inclusion of the object as a child of the table for
ATK. Accomplishing the latter was mostly a matter of deleting all the ATK
platform code that had been forcing rows to be ignored. Because captions
are not being exposed on the Mac, they are now explicitly being ignored
for that platform.

Tests: accessibility/aria-table-hierarchy.html
       accessibility/table-hierarchy.html

* accessibility/AccessibilityObject.h:
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::determineAccessibilityRole): Added CaptionRole.
* accessibility/AccessibilityTable.cpp:
(WebCore::AccessibilityTable::addChildren): Include non-ignored captions as table children.
* accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
(webkitAccessibleGetNChildren): Removed special handling for tables.
(webkitAccessibleRefChild): Removed special handling for tables.
(webkitAccessibleGetIndexInParent): Removed special handling for table cells.
(atkRole): Corrected broken mapping for RowRole.
(getNChildrenForTable): Deleted.
(getChildForTable): Deleted.
(getIndexInParentForCellInRow): Deleted.
* accessibility/mac/AccessibilityObjectMac.mm:
(WebCore::AccessibilityObject::accessibilityPlatformIncludesObject): Ignore captions as table children.

Tools:

* WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
Add mapping for ATK_ROLE_CAPTION to roleToString

LayoutTests:

* accessibility/aria-table-hierarchy.html: Added.
* accessibility/roles-exposed.html: Removed comment pointing to this bug.
* accessibility/table-hierarchy.html: Added.
* platform/efl/accessibility/aria-table-hierarchy-expected.txt: Added.
* platform/efl/accessibility/roles-exposed-expected.txt: Updated to reflect new behavior.
* platform/efl/accessibility/table-detection-expected.txt: Updated to reflect new behavior.
* platform/efl/accessibility/table-hierarchy-expected.txt: Added.
* platform/efl/accessibility/table-roles-hierarchy-expected.txt: Added.
* platform/efl/accessibility/table-with-rules-expected.txt: Updated to reflect new behavior.
* platform/gtk/accessibility/aria-table-hierarchy-expected.txt: Updated to reflect new behavior.
* platform/gtk/accessibility/aria-table-hierarchy.html: Removed (made into a shared test).
* platform/gtk/accessibility/caret-offsets-expected.txt: Updated to reflect new behavior.
* platform/gtk/accessibility/caret-offsets.html: Modified to handle inclusion of rows.
* platform/gtk/accessibility/roles-exposed-expected.txt: Updated to reflect new behavior.
* platform/gtk/accessibility/table-detection-expected.txt: Updated to reflect new behavior.
* platform/gtk/accessibility/table-hierarchy-expected.txt: Updated to reflect new behavior.
* platform/gtk/accessibility/table-hierarchy.html: Removed (made into a shared test).
* platform/gtk/accessibility/table-roles-hierarchy-expected.txt: Added.
* platform/gtk/accessibility/table-with-rules-expected.txt: Updated to reflect new behavior.
* platform/gtk/accessibility/text-for-range-table-cells.html: Updated to reflect new behavior.
* platform/mac/accessibility/aria-table-hierarchy-expected.txt: Added.
* platform/mac/accessibility/table-hierarchy-expected.txt: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@176706 268f45cc-cd09-0410-ab3c-d52691b4dbfc

31 files changed:
LayoutTests/ChangeLog
LayoutTests/accessibility/aria-table-hierarchy.html [new file with mode: 0644]
LayoutTests/accessibility/roles-exposed.html
LayoutTests/accessibility/table-hierarchy.html [new file with mode: 0644]
LayoutTests/platform/efl/accessibility/aria-table-hierarchy-expected.txt [new file with mode: 0644]
LayoutTests/platform/efl/accessibility/roles-exposed-expected.txt
LayoutTests/platform/efl/accessibility/table-detection-expected.txt
LayoutTests/platform/efl/accessibility/table-hierarchy-expected.txt [new file with mode: 0644]
LayoutTests/platform/efl/accessibility/table-roles-hierarchy-expected.txt [new file with mode: 0644]
LayoutTests/platform/efl/accessibility/table-with-rules-expected.txt
LayoutTests/platform/gtk/accessibility/aria-table-hierarchy-expected.txt
LayoutTests/platform/gtk/accessibility/aria-table-hierarchy.html [deleted file]
LayoutTests/platform/gtk/accessibility/caret-offsets-expected.txt
LayoutTests/platform/gtk/accessibility/caret-offsets.html
LayoutTests/platform/gtk/accessibility/roles-exposed-expected.txt
LayoutTests/platform/gtk/accessibility/table-detection-expected.txt
LayoutTests/platform/gtk/accessibility/table-hierarchy-expected.txt
LayoutTests/platform/gtk/accessibility/table-hierarchy.html [deleted file]
LayoutTests/platform/gtk/accessibility/table-roles-hierarchy-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/accessibility/table-with-rules-expected.txt
LayoutTests/platform/gtk/accessibility/text-for-range-table-cells.html
LayoutTests/platform/mac/accessibility/aria-table-hierarchy-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/accessibility/table-hierarchy-expected.txt [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/accessibility/AccessibilityObject.h
Source/WebCore/accessibility/AccessibilityRenderObject.cpp
Source/WebCore/accessibility/AccessibilityTable.cpp
Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.cpp
Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm
Tools/ChangeLog
Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp

index c74be3a..8bedf22 100644 (file)
@@ -1,3 +1,33 @@
+2014-12-02  Joanmarie Diggs  <jdiggs@igalia.com>
+
+        AX: [ATK] Table captions and table rows are missing from the accessible hierarchy
+        https://bugs.webkit.org/show_bug.cgi?id=139005
+
+        Reviewed by Chris Fleizach.
+
+        * accessibility/aria-table-hierarchy.html: Added.
+        * accessibility/roles-exposed.html: Removed comment pointing to this bug.
+        * accessibility/table-hierarchy.html: Added.
+        * platform/efl/accessibility/aria-table-hierarchy-expected.txt: Added.
+        * platform/efl/accessibility/roles-exposed-expected.txt: Updated to reflect new behavior.
+        * platform/efl/accessibility/table-detection-expected.txt: Updated to reflect new behavior.
+        * platform/efl/accessibility/table-hierarchy-expected.txt: Added.
+        * platform/efl/accessibility/table-roles-hierarchy-expected.txt: Added.
+        * platform/efl/accessibility/table-with-rules-expected.txt: Updated to reflect new behavior.
+        * platform/gtk/accessibility/aria-table-hierarchy-expected.txt: Updated to reflect new behavior.
+        * platform/gtk/accessibility/aria-table-hierarchy.html: Removed (made into a shared test).
+        * platform/gtk/accessibility/caret-offsets-expected.txt: Updated to reflect new behavior.
+        * platform/gtk/accessibility/caret-offsets.html: Modified to handle inclusion of rows.
+        * platform/gtk/accessibility/roles-exposed-expected.txt: Updated to reflect new behavior.
+        * platform/gtk/accessibility/table-detection-expected.txt: Updated to reflect new behavior.
+        * platform/gtk/accessibility/table-hierarchy-expected.txt: Updated to reflect new behavior.
+        * platform/gtk/accessibility/table-hierarchy.html: Removed (made into a shared test).
+        * platform/gtk/accessibility/table-roles-hierarchy-expected.txt: Added.
+        * platform/gtk/accessibility/table-with-rules-expected.txt: Updated to reflect new behavior.
+        * platform/gtk/accessibility/text-for-range-table-cells.html: Updated to reflect new behavior.
+        * platform/mac/accessibility/aria-table-hierarchy-expected.txt: Added.
+        * platform/mac/accessibility/table-hierarchy-expected.txt: Added.
+
 2014-12-02  Chris Dumez  <cdumez@apple.com>
 
         Crash when setting 'flex' CSS property to 'calc(2 * 3) calc(2 * 3)'
diff --git a/LayoutTests/accessibility/aria-table-hierarchy.html b/LayoutTests/accessibility/aria-table-hierarchy.html
new file mode 100644 (file)
index 0000000..93a1dc3
--- /dev/null
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+<script>
+    function dumpAccessibilityChildren(element, level) {
+        if (element.stringValue.indexOf('End of test') >= 0)
+            return false;
+
+        var indent = "";
+        for (var k = 0; k < level; k++) { indent += "  "; }
+        debug(indent + element.role + " " + element.stringValue);
+        var childrenCount = element.childrenCount;
+        for (var k = 0; k < childrenCount; k++) {
+            if (!dumpAccessibilityChildren(element.childAtIndex(k), level+1))
+                return false;
+        }
+        return true;
+    }
+</script>
+</head>
+<body id="body">
+<div role="grid">
+<div role="row"><div role="gridcell">foo</div><div role="gridcell">bar</div></div>
+</div>
+<div role="grid">
+<div role="row"><div role="columnheader">Odd</div><div role="columnheader">Even</div></div>
+<div role="row"><div role="gridcell">1</div><div role="gridcell">2</div></div>
+<div role="row"><div role="gridcell">3</div><div role="gridcell">4</div></div>
+</div>
+<div role="grid">
+<div role="row"><div role="gridcell">hello</div><div role="gridcell">world</div></div>
+</div>
+<div role="grid">
+<div role="row"><div role="columnheader">Odd</div><div role="columnheader">Even</div></div>
+<div role="row"><div role="gridcell"><p>1</p></div><div role="gridcell"><p>2</p></div></div>
+<div role="row"><div role="gridcell"><p>3</p></div><div role="gridcell"><p>4</p></div></div>
+</div>
+<div>End of test</div>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+  description("This tests the accessible hierarchy for an ARIA table.");
+  if (window.accessibilityController) {
+      document.getElementById("body").focus();
+      dumpAccessibilityChildren(accessibilityController.focusedElement, 0);
+  }
+</script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
index 3840d08..7ce939c 100644 (file)
 <svg data-platform="atk,mac" class="ex">X</svg>
 
 <table data-platform="atk,mac" class="ex">
-    <!-- [ATK] Object not exposed (webkit.org/b/139005) --><caption data-platform="atk,mac" class="ex">X</caption>
+    <caption data-platform="atk,mac" class="ex">X</caption>
     <thead data-platform="atk,mac" class="ex">
         <!-- [ATK] Object not exposed (webkit.org/b/139005) --><tr data-platform="atk,mac" class="ex">
             <!-- Need separate test to verify colheader/rowheader -->
diff --git a/LayoutTests/accessibility/table-hierarchy.html b/LayoutTests/accessibility/table-hierarchy.html
new file mode 100644 (file)
index 0000000..7a58908
--- /dev/null
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+<script>
+    function dumpAccessibilityChildren(element, level) {
+        if (element.stringValue.indexOf('End of test') >= 0)
+            return false;
+
+        var indent = "";
+        for (var k = 0; k < level; k++) { indent += "  "; }
+        debug(indent + element.role + " " + element.stringValue);
+        var childrenCount = element.childrenCount;
+        for (var k = 0; k < childrenCount; k++) {
+            if (!dumpAccessibilityChildren(element.childAtIndex(k), level+1))
+                return false;
+        }
+        return true;
+    }
+</script>
+</head>
+<body id="body">
+<table>
+<tr><td>foo</td><td>bar</td></tr>
+</table>
+<table>
+<tr><th>Odd</th><th>Even</th></tr>
+<tr><td>1</td><td>2</td></tr>
+<tr><td>3</td><td>4</td></tr>
+</table>
+<table>
+<tbody>
+<tr><td>hello</td><td>world</td></tr>
+</tbody>
+</table>
+<table border=1>
+<tr><th>Odd</th><th>Even</th></tr>
+<tr><td><p>1</p></td><td><p>2</p></td></tr>
+<tr><td><p>3</p></td><td><p>4</p></td></tr>
+</table>
+<div>End of test</div>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+    description("This tests the accessible hierarchy for an HTML table.");
+    if (window.accessibilityController) {
+      document.getElementById("body").focus();
+      dumpAccessibilityChildren(accessibilityController.focusedElement, 0);
+    }
+</script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/platform/efl/accessibility/aria-table-hierarchy-expected.txt b/LayoutTests/platform/efl/accessibility/aria-table-hierarchy-expected.txt
new file mode 100644 (file)
index 0000000..50ae5dc
--- /dev/null
@@ -0,0 +1,63 @@
+foo
+bar
+Odd
+Even
+1
+2
+3
+4
+hello
+world
+Odd
+Even
+1
+
+2
+
+3
+
+4
+
+End of test
+This tests the accessible hierarchy for an ARIA table.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+AXRole: AXWebArea 
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: foo
+      AXRole: AXCell AXValue: bar
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXColumnHeader AXValue: Odd
+      AXRole: AXColumnHeader AXValue: Even
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 1
+      AXRole: AXCell AXValue: 2
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 3
+      AXRole: AXCell AXValue: 4
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: hello
+      AXRole: AXCell AXValue: world
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXColumnHeader AXValue: Odd
+      AXRole: AXColumnHeader AXValue: Even
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 1<\n><\n>
+        AXRole: AXParagraph AXValue: 1
+      AXRole: AXCell AXValue: 2<\n><\n>
+        AXRole: AXParagraph AXValue: 2
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 3<\n><\n>
+        AXRole: AXParagraph AXValue: 3
+      AXRole: AXCell AXValue: 4<\n><\n>
+        AXRole: AXParagraph AXValue: 4
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
index 9d4319e..59953e4 100644 (file)
@@ -284,13 +284,13 @@ table
       AXRole: AXTable
       
 caption
-      AXRole: 
+      AXRole: AXCaption
       
 thead
       AXRole: 
       
 tr
-      AXRole: 
+      AXRole: AXRow
       
 th
       AXRole: AXColumnHeader
@@ -299,7 +299,7 @@ tbody
       AXRole: 
       
 tr
-      AXRole: 
+      AXRole: AXRow
       
 td
       AXRole: AXCell
@@ -308,7 +308,7 @@ tfoot
       AXRole: 
       
 tr
-      AXRole: 
+      AXRole: AXRow
       
 th
       AXRole: AXRowHeader
@@ -419,7 +419,7 @@ div[role=rowgroup]
       AXRole: 
       
 div[role=row]
-      AXRole: 
+      AXRole: AXRow
       
 div[role=rowheader]
       AXRole: AXRowHeader
@@ -569,7 +569,7 @@ div[role=rowgroup]
       AXRole: 
       
 div[role=row]
-      AXRole: 
+      AXRole: AXRow
       
 div[role=rowheader]
       AXRole: AXRowHeader
index db79a11..2ee5e57 100644 (file)
@@ -3,7 +3,7 @@ This should be a table because it has a thead.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 4
+AXChildren: 2
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 62.000000, 47.000000 }
 AXTitle: 
@@ -26,7 +26,7 @@ This should be a table because cells have borders.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 68.000000, 29.000000 }
 AXTitle: 
@@ -48,7 +48,7 @@ This should not be a table because its cells do not have borders.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 64.000000, 27.000000 }
 AXTitle: 
@@ -70,7 +70,7 @@ This should be a table because a cell has a special attribute
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 58.000000, 23.000000 }
 AXTitle: 
@@ -92,7 +92,7 @@ This should be a table because a cell has a special attribute.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 58.000000, 23.000000 }
 AXTitle: 
@@ -114,7 +114,7 @@ This should be a table because a cell has a special attribute.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 4
+AXChildren: 2
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 58.000000, 43.000000 }
 AXTitle: 
@@ -137,7 +137,7 @@ This should be a table because cells have different colors.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 58.000000, 23.000000 }
 AXTitle: 
@@ -159,7 +159,7 @@ This should not be a table because cells have different but no spacing.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 52.000000, 19.000000 }
 AXTitle: 
@@ -181,7 +181,7 @@ This should not be a table because cells have the same colors even though there
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 61.000000, 25.000000 }
 AXTitle: 
@@ -203,7 +203,7 @@ This should be a table because it has the "rules" attr.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 53.000000, 19.000000 }
 AXTitle: 
@@ -225,7 +225,7 @@ This should not be a table because it only has one valid cell (need more than on
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 769.000000, 27.000000 }
 AXTitle: 
@@ -275,7 +275,7 @@ This should be a table because it's editable.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 64.000000, 27.000000 }
 AXTitle: 
@@ -297,7 +297,7 @@ This should be a table because most cells have a top border.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 4
+AXChildren: 2
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 62.000000, 49.000000 }
 AXTitle: 
@@ -320,7 +320,7 @@ This should not be a table because cells have different borders.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 4
+AXChildren: 2
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 62.000000, 47.000000 }
 AXTitle: 
@@ -343,7 +343,7 @@ This should be a table because it sets empty-cells: hide on the table.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 6
+AXChildren: 3
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 64.000000, 70.000000 }
 AXTitle: 
@@ -367,7 +367,7 @@ This should be a table because it sets empty-cells: hide on a cell.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 6
+AXChildren: 3
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 64.000000, 71.000000 }
 AXTitle: 
@@ -391,7 +391,7 @@ This should be a table because it has a col.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 4
+AXChildren: 2
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 62.000000, 47.000000 }
 AXTitle: 
diff --git a/LayoutTests/platform/efl/accessibility/table-hierarchy-expected.txt b/LayoutTests/platform/efl/accessibility/table-hierarchy-expected.txt
new file mode 100644 (file)
index 0000000..85c48fa
--- /dev/null
@@ -0,0 +1,57 @@
+foo    bar
+Odd    Even
+1      2
+3      4
+hello  world
+Odd    Even
+1
+
+2
+
+3
+
+4
+
+End of test
+This tests the accessible hierarchy for an HTML table.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+AXRole: AXWebArea 
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: foo
+      AXRole: AXCell AXValue: bar
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXColumnHeader AXValue: Odd
+      AXRole: AXColumnHeader AXValue: Even
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 1
+      AXRole: AXCell AXValue: 2
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 3
+      AXRole: AXCell AXValue: 4
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: hello
+      AXRole: AXCell AXValue: world
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXColumnHeader AXValue: Odd
+      AXRole: AXColumnHeader AXValue: Even
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 1<\n><\n>
+        AXRole: AXParagraph AXValue: 1
+      AXRole: AXCell AXValue: 2<\n><\n>
+        AXRole: AXParagraph AXValue: 2
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 3<\n><\n>
+        AXRole: AXParagraph AXValue: 3
+      AXRole: AXCell AXValue: 4<\n><\n>
+        AXRole: AXParagraph AXValue: 4
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/efl/accessibility/table-roles-hierarchy-expected.txt b/LayoutTests/platform/efl/accessibility/table-roles-hierarchy-expected.txt
new file mode 100644 (file)
index 0000000..ae5ef13
--- /dev/null
@@ -0,0 +1,31 @@
+No     Country Capital
+1.     Poland  Warsaw
+2.     Russia  Moscow
+3.     Ukraine Kiev
+All    3 countries     3 capitals
+
+
+This shows the hierarchy of table roles.
+
+role: AXRole: AXTable
+    role: AXRole: AXRow
+        role: AXRole: AXColumnHeader
+        role: AXRole: AXColumnHeader
+        role: AXRole: AXColumnHeader
+    role: AXRole: AXRow
+        role: AXRole: AXRowHeader
+        role: AXRole: AXCell
+        role: AXRole: AXCell
+    role: AXRole: AXRow
+        role: AXRole: AXRowHeader
+        role: AXRole: AXCell
+        role: AXRole: AXCell
+    role: AXRole: AXRow
+        role: AXRole: AXRowHeader
+        role: AXRole: AXCell
+        role: AXRole: AXCell
+    role: AXRole: AXRow
+        role: AXRole: AXRowHeader
+        role: AXRole: AXCell
+        role: AXRole: AXCell
+
index 9e58b03..5875a6f 100644 (file)
@@ -7,7 +7,7 @@ asdf    asdf
 ------------------------------------
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 57.000000, 20.000000 }
 AXTitle: 
@@ -25,7 +25,7 @@ AXPlatformAttributes: html-id:testTable2, toolkit:WebKitEfl
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 62.000000, 24.000000 }
 AXTitle: 
@@ -43,7 +43,7 @@ AXPlatformAttributes: html-id:testTable3, toolkit:WebKitEfl
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 56.000000, 20.000000 }
 AXTitle: 
@@ -61,7 +61,7 @@ AXPlatformAttributes: html-id:testTable4, toolkit:WebKitEfl
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 0.000000, 0.000000 }
 AXSize: { 62.000000, 24.000000 }
 AXTitle: 
index 917bfb6..50ae5dc 100644 (file)
@@ -18,43 +18,45 @@ Even
 
 4
 
-This tests the Atk table hierarhy for an ARIA table.
+End of test
+This tests the accessible hierarchy for an ARIA table.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS table1.role is 'AXRole: AXTable'
-PASS table1.rowCount is 1
-PASS table1.columnCount is 2
-PASS table2.role is 'AXRole: AXTable'
-PASS table2.rowCount is 3
-PASS table2.columnCount is 2
-PASS table3.role is 'AXRole: AXTable'
-PASS table3.rowCount is 1
-PASS table3.columnCount is 2
-PASS table4.role is 'AXRole: AXTable'
-PASS table4.rowCount is 3
-PASS table4.columnCount is 2
-PASS children is 2
-PASS table1.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table1.childAtIndex(i).role is 'AXRole: AXCell'
-PASS children is 6
-PASS table2.childAtIndex(0).role is 'AXRole: AXColumnHeader'
-PASS table2.childAtIndex(1).role is 'AXRole: AXColumnHeader'
-PASS table2.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table2.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table2.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table2.childAtIndex(i).role is 'AXRole: AXCell'
-PASS children is 2
-PASS table3.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table3.childAtIndex(i).role is 'AXRole: AXCell'
-PASS children is 6
-PASS table4.childAtIndex(0).role is 'AXRole: AXColumnHeader'
-PASS table4.childAtIndex(1).role is 'AXRole: AXColumnHeader'
-PASS table4.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table4.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table4.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table4.childAtIndex(i).role is 'AXRole: AXCell'
+AXRole: AXWebArea 
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: foo
+      AXRole: AXCell AXValue: bar
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXColumnHeader AXValue: Odd
+      AXRole: AXColumnHeader AXValue: Even
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 1
+      AXRole: AXCell AXValue: 2
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 3
+      AXRole: AXCell AXValue: 4
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: hello
+      AXRole: AXCell AXValue: world
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXColumnHeader AXValue: Odd
+      AXRole: AXColumnHeader AXValue: Even
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 1<\n><\n>
+        AXRole: AXParagraph AXValue: 1
+      AXRole: AXCell AXValue: 2<\n><\n>
+        AXRole: AXParagraph AXValue: 2
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 3<\n><\n>
+        AXRole: AXParagraph AXValue: 3
+      AXRole: AXCell AXValue: 4<\n><\n>
+        AXRole: AXParagraph AXValue: 4
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/LayoutTests/platform/gtk/accessibility/aria-table-hierarchy.html b/LayoutTests/platform/gtk/accessibility/aria-table-hierarchy.html
deleted file mode 100644 (file)
index b5d4525..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../../resources/js-test-pre.js"></script>
-</head>
-<body id="body">
-<div role="grid">
-<div role="row"><div role="gridcell">foo</div><div role="gridcell">bar</div></div>
-</div>
-<div role="grid">
-<div role="row"><div role="columnheader">Odd</div><div role="columnheader">Even</div></div>
-<div role="row"><div role="gridcell">1</div><div role="gridcell">2</div></div>
-<div role="row"><div role="gridcell">3</div><div role="gridcell">4</div></div>
-</div>
-<div role="grid">
-<div role="row"><div role="gridcell">hello</div><div role="gridcell">world</div></div>
-</div>
-<div role="grid">
-<div role="row"><div role="columnheader">Odd</div><div role="columnheader">Even</div></div>
-<div role="row"><div role="gridcell"><p>1</p></div><div role="gridcell"><p>2</p></div></div>
-<div role="row"><div role="gridcell"><p>3</p></div><div role="gridcell"><p>4</p></div></div>
-</div>
-<p id="description"></p>
-<div id="console"></div>
-<script>
-    description("This tests the Atk table hierarhy for an ARIA table.");
-    if (window.accessibilityController) {
-        testRunner.dumpAsText();
-        document.getElementById("body").focus();
-        var webArea = accessibilityController.focusedElement;
-
-        var table1 = webArea.childAtIndex(0);
-        shouldBe("table1.role", "'AXRole: AXTable'");
-        shouldBe("table1.rowCount", "1");
-        shouldBe("table1.columnCount", "2");
-        var table2 = webArea.childAtIndex(1);
-        shouldBe("table2.role", "'AXRole: AXTable'");
-        shouldBe("table2.rowCount", "3");
-        shouldBe("table2.columnCount", "2");
-        var table3 = webArea.childAtIndex(2);
-        shouldBe("table3.role", "'AXRole: AXTable'");
-        shouldBe("table3.rowCount", "1");
-        shouldBe("table3.columnCount", "2");
-        var table4 = webArea.childAtIndex(3);
-        shouldBe("table4.role", "'AXRole: AXTable'");
-        shouldBe("table4.rowCount", "3");
-        shouldBe("table4.columnCount", "2");
-
-        var children = table1.childrenCount;
-        shouldBe("children", "2");
-        for (i = 0; i < children; ++i) {
-            shouldBe("table1.childAtIndex(i).role", "'AXRole: AXCell'");
-        }
-        children = table2.childrenCount;
-        shouldBe("children", "6");
-        shouldBe("table2.childAtIndex(0).role", "'AXRole: AXColumnHeader'");
-        shouldBe("table2.childAtIndex(1).role", "'AXRole: AXColumnHeader'");
-        for (i = 2; i < children; ++i) {
-            shouldBe("table2.childAtIndex(i).role", "'AXRole: AXCell'");
-        }
-        children = table3.childrenCount;
-        shouldBe("children", "2");
-        for (i = 0; i < children; ++i) {
-            shouldBe("table3.childAtIndex(i).role", "'AXRole: AXCell'");
-        }
-        children = table4.childrenCount;
-        shouldBe("children", "6");
-        shouldBe("table4.childAtIndex(0).role", "'AXRole: AXColumnHeader'");
-        shouldBe("table4.childAtIndex(1).role", "'AXRole: AXColumnHeader'");
-        for (i = 2; i < children; ++i) {
-            shouldBe("table4.childAtIndex(i).role", "'AXRole: AXCell'");
-        }
-    }
-</script>
-<script src="../../../resources/js-test-post.js"></script>
-</body>
-</html>
index bc641b0..1d5be2e 100644 (file)
@@ -38,7 +38,8 @@ PASS setCaretOffset(comboBoxOption, 1) is false
 PASS textEntry.role is "AXRole: AXTextField"
 PASS caretMovedData is "TextField|5"
 PASS table.role is "AXRole: AXTable"
-PASS table.childrenCount is 4
+PASS table.childrenCount is 1
+PASS row.role is "AXRole: AXRow"
 PASS tableCell.role is "AXRole: AXCell"
 PASS caretMovedData is "Cell|2"
 PASS successfullyParsed is true
index d07604c..1e7ea19 100644 (file)
@@ -105,8 +105,10 @@ if (window.accessibilityController) {
 
     table = root.childAtIndex(4);
     shouldBeEqualToString('table.role', 'AXRole: AXTable');
-    shouldBe('table.childrenCount', '4');
-    tableCell = table.childAtIndex(0);
+    shouldBe('table.childrenCount', '1');
+    row = table.childAtIndex(0);
+    shouldBeEqualToString('row.role', 'AXRole: AXRow');
+    tableCell = row.childAtIndex(0);
     shouldBeEqualToString('tableCell.role', 'AXRole: AXCell');
     resetCaretOffsetForObject(tableCell, 2);
     shouldBeEqualToString('caretMovedData', 'Cell|2');
index 9d4319e..59953e4 100644 (file)
@@ -284,13 +284,13 @@ table
       AXRole: AXTable
       
 caption
-      AXRole: 
+      AXRole: AXCaption
       
 thead
       AXRole: 
       
 tr
-      AXRole: 
+      AXRole: AXRow
       
 th
       AXRole: AXColumnHeader
@@ -299,7 +299,7 @@ tbody
       AXRole: 
       
 tr
-      AXRole: 
+      AXRole: AXRow
       
 td
       AXRole: AXCell
@@ -308,7 +308,7 @@ tfoot
       AXRole: 
       
 tr
-      AXRole: 
+      AXRole: AXRow
       
 th
       AXRole: AXRowHeader
@@ -419,7 +419,7 @@ div[role=rowgroup]
       AXRole: 
       
 div[role=row]
-      AXRole: 
+      AXRole: AXRow
       
 div[role=rowheader]
       AXRole: AXRowHeader
@@ -569,7 +569,7 @@ div[role=rowgroup]
       AXRole: 
       
 div[role=row]
-      AXRole: 
+      AXRole: AXRow
       
 div[role=rowheader]
       AXRole: AXRowHeader
index 0066fa2..edc95e4 100644 (file)
@@ -3,7 +3,7 @@ This should be a table because it has a thead.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 4
+AXChildren: 2
 AXPosition: { 8.000000, 66.000000 }
 AXSize: { 62.000000, 45.000000 }
 AXTitle: 
@@ -26,7 +26,7 @@ This should be a table because cells have borders.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 484.000000 }
 AXSize: { 68.000000, 28.000000 }
 AXTitle: 
@@ -48,7 +48,7 @@ This should not be a table because its cells do not have borders.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 332.000000 }
 AXSize: { 64.000000, 26.000000 }
 AXTitle: 
@@ -70,7 +70,7 @@ This should be a table because a cell has a special attribute
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 333.000000 }
 AXSize: { 58.000000, 22.000000 }
 AXTitle: 
@@ -92,7 +92,7 @@ This should be a table because a cell has a special attribute.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 333.000000 }
 AXSize: { 58.000000, 22.000000 }
 AXTitle: 
@@ -114,7 +114,7 @@ This should be a table because a cell has a special attribute.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 4
+AXChildren: 2
 AXPosition: { 8.000000, 333.000000 }
 AXSize: { 58.000000, 41.000000 }
 AXTitle: 
@@ -137,7 +137,7 @@ This should be a table because cells have different colors.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 333.000000 }
 AXSize: { 58.000000, 22.000000 }
 AXTitle: 
@@ -159,7 +159,7 @@ This should not be a table because cells have different but no spacing.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 333.000000 }
 AXSize: { 52.000000, 18.000000 }
 AXTitle: 
@@ -181,7 +181,7 @@ This should not be a table because cells have the same colors even though there
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 346.000000 }
 AXSize: { 61.000000, 24.000000 }
 AXTitle: 
@@ -203,7 +203,7 @@ This should be a table because it has the "rules" attr.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 333.000000 }
 AXSize: { 53.000000, 18.000000 }
 AXTitle: 
@@ -225,7 +225,7 @@ This should not be a table because it only has one valid cell (need more than on
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 346.000000 }
 AXSize: { 769.000000, 27.000000 }
 AXTitle: 
@@ -275,7 +275,7 @@ This should be a table because it's editable.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 333.000000 }
 AXSize: { 64.000000, 26.000000 }
 AXTitle: 
@@ -297,7 +297,7 @@ This should be a table because most cells have a top border.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 4
+AXChildren: 2
 AXPosition: { 8.000000, 333.000000 }
 AXSize: { 62.000000, 47.000000 }
 AXTitle: 
@@ -320,7 +320,7 @@ This should not be a table because cells have different borders.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 4
+AXChildren: 2
 AXPosition: { 8.000000, 333.000000 }
 AXSize: { 62.000000, 45.000000 }
 AXTitle: 
@@ -343,7 +343,7 @@ This should be a table because it sets empty-cells: hide on the table.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 6
+AXChildren: 3
 AXPosition: { 8.000000, 333.000000 }
 AXSize: { 64.000000, 67.000000 }
 AXTitle: 
@@ -367,7 +367,7 @@ This should be a table because it sets empty-cells: hide on a cell.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 6
+AXChildren: 3
 AXPosition: { 8.000000, 333.000000 }
 AXSize: { 64.000000, 68.000000 }
 AXTitle: 
@@ -391,7 +391,7 @@ This should be a table because it has a col.
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 4
+AXChildren: 2
 AXPosition: { 8.000000, 333.000000 }
 AXSize: { 62.000000, 45.000000 }
 AXTitle: 
index 61d3161..85c48fa 100644 (file)
@@ -12,43 +12,45 @@ Odd Even
 
 4
 
-This tests the Atk table hierarhy.
+End of test
+This tests the accessible hierarchy for an HTML table.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS table1.role is 'AXRole: AXTable'
-PASS table1.rowCount is 1
-PASS table1.columnCount is 2
-PASS table2.role is 'AXRole: AXTable'
-PASS table2.rowCount is 3
-PASS table2.columnCount is 2
-PASS table3.role is 'AXRole: AXTable'
-PASS table3.rowCount is 1
-PASS table3.columnCount is 2
-PASS table4.role is 'AXRole: AXTable'
-PASS table4.rowCount is 3
-PASS table4.columnCount is 2
-PASS children is 2
-PASS table1.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table1.childAtIndex(i).role is 'AXRole: AXCell'
-PASS children is 6
-PASS table2.childAtIndex(0).role is 'AXRole: AXColumnHeader'
-PASS table2.childAtIndex(1).role is 'AXRole: AXColumnHeader'
-PASS table2.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table2.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table2.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table2.childAtIndex(i).role is 'AXRole: AXCell'
-PASS children is 2
-PASS table3.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table3.childAtIndex(i).role is 'AXRole: AXCell'
-PASS children is 6
-PASS table4.childAtIndex(0).role is 'AXRole: AXColumnHeader'
-PASS table4.childAtIndex(1).role is 'AXRole: AXColumnHeader'
-PASS table4.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table4.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table4.childAtIndex(i).role is 'AXRole: AXCell'
-PASS table4.childAtIndex(i).role is 'AXRole: AXCell'
+AXRole: AXWebArea 
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: foo
+      AXRole: AXCell AXValue: bar
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXColumnHeader AXValue: Odd
+      AXRole: AXColumnHeader AXValue: Even
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 1
+      AXRole: AXCell AXValue: 2
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 3
+      AXRole: AXCell AXValue: 4
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: hello
+      AXRole: AXCell AXValue: world
+  AXRole: AXTable 
+    AXRole: AXRow 
+      AXRole: AXColumnHeader AXValue: Odd
+      AXRole: AXColumnHeader AXValue: Even
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 1<\n><\n>
+        AXRole: AXParagraph AXValue: 1
+      AXRole: AXCell AXValue: 2<\n><\n>
+        AXRole: AXParagraph AXValue: 2
+    AXRole: AXRow 
+      AXRole: AXCell AXValue: 3<\n><\n>
+        AXRole: AXParagraph AXValue: 3
+      AXRole: AXCell AXValue: 4<\n><\n>
+        AXRole: AXParagraph AXValue: 4
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/LayoutTests/platform/gtk/accessibility/table-hierarchy.html b/LayoutTests/platform/gtk/accessibility/table-hierarchy.html
deleted file mode 100644 (file)
index 7b36066..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../../resources/js-test-pre.js"></script>
-</head>
-<body id="body">
-<table>
-<tr><td>foo</td><td>bar</td></tr>
-</table>
-<table>
-<tr><th>Odd</th><th>Even</th></tr>
-<tr><td>1</td><td>2</td></tr>
-<tr><td>3</td><td>4</td></tr>
-</table>
-<table>
-<tbody>
-<tr><td>hello</td><td>world</td></tr>
-</tbody>
-</table>
-<table border=1>
-<tr><th>Odd</th><th>Even</th></tr>
-<tr><td><p>1</p></td><td><p>2</p></td></tr>
-<tr><td><p>3</p></td><td><p>4</p></td></tr>
-</table>
-<p id="description"></p>
-<div id="console"></div>
-<script>
-    description("This tests the Atk table hierarhy.");
-    if (window.accessibilityController) {
-        testRunner.dumpAsText();
-        document.getElementById("body").focus();
-        var webArea = accessibilityController.focusedElement;
-
-        var table1 = webArea.childAtIndex(0);
-        shouldBe("table1.role", "'AXRole: AXTable'");
-        shouldBe("table1.rowCount", "1");
-        shouldBe("table1.columnCount", "2");
-        var table2 = webArea.childAtIndex(1);
-        shouldBe("table2.role", "'AXRole: AXTable'");
-        shouldBe("table2.rowCount", "3");
-        shouldBe("table2.columnCount", "2");
-        var table3 = webArea.childAtIndex(2);
-        shouldBe("table3.role", "'AXRole: AXTable'");
-        shouldBe("table3.rowCount", "1");
-        shouldBe("table3.columnCount", "2");
-        var table4 = webArea.childAtIndex(3);
-        shouldBe("table4.role", "'AXRole: AXTable'");
-        shouldBe("table4.rowCount", "3");
-        shouldBe("table4.columnCount", "2");
-
-        var children = table1.childrenCount;
-        shouldBe("children", "2");
-        for (i = 0; i < children; ++i) {
-            shouldBe("table1.childAtIndex(i).role", "'AXRole: AXCell'");
-        }
-        children = table2.childrenCount;
-        shouldBe("children", "6");
-        shouldBe("table2.childAtIndex(0).role", "'AXRole: AXColumnHeader'");
-        shouldBe("table2.childAtIndex(1).role", "'AXRole: AXColumnHeader'");
-        for (i = 2; i < children; ++i) {
-            shouldBe("table2.childAtIndex(i).role", "'AXRole: AXCell'");
-        }
-        children = table3.childrenCount;
-        shouldBe("children", "2");
-        for (i = 0; i < children; ++i) {
-            shouldBe("table3.childAtIndex(i).role", "'AXRole: AXCell'");
-        }
-        children = table4.childrenCount;
-        shouldBe("children", "6");
-        shouldBe("table4.childAtIndex(0).role", "'AXRole: AXColumnHeader'");
-        shouldBe("table4.childAtIndex(1).role", "'AXRole: AXColumnHeader'");
-        for (i = 2; i < children; ++i) {
-            shouldBe("table4.childAtIndex(i).role", "'AXRole: AXCell'");
-        }
-    }
-</script>
-<script src="../../../resources/js-test-post.js"></script>
-</body>
-</html>
diff --git a/LayoutTests/platform/gtk/accessibility/table-roles-hierarchy-expected.txt b/LayoutTests/platform/gtk/accessibility/table-roles-hierarchy-expected.txt
new file mode 100644 (file)
index 0000000..ae5ef13
--- /dev/null
@@ -0,0 +1,31 @@
+No     Country Capital
+1.     Poland  Warsaw
+2.     Russia  Moscow
+3.     Ukraine Kiev
+All    3 countries     3 capitals
+
+
+This shows the hierarchy of table roles.
+
+role: AXRole: AXTable
+    role: AXRole: AXRow
+        role: AXRole: AXColumnHeader
+        role: AXRole: AXColumnHeader
+        role: AXRole: AXColumnHeader
+    role: AXRole: AXRow
+        role: AXRole: AXRowHeader
+        role: AXRole: AXCell
+        role: AXRole: AXCell
+    role: AXRole: AXRow
+        role: AXRole: AXRowHeader
+        role: AXRole: AXCell
+        role: AXRole: AXCell
+    role: AXRole: AXRow
+        role: AXRole: AXRowHeader
+        role: AXRole: AXCell
+        role: AXRole: AXCell
+    role: AXRole: AXRow
+        role: AXRole: AXRowHeader
+        role: AXRole: AXCell
+        role: AXRole: AXCell
+
index a1391fe..5400219 100644 (file)
@@ -7,7 +7,7 @@ asdf    asdf
 ------------------------------------
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 27.000000 }
 AXSize: { 57.000000, 19.000000 }
 AXTitle: 
@@ -25,7 +25,7 @@ AXPlatformAttributes: html-id:testTable2, toolkit:WebKitGtk
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 46.000000 }
 AXSize: { 62.000000, 23.000000 }
 AXTitle: 
@@ -43,7 +43,7 @@ AXPlatformAttributes: html-id:testTable3, toolkit:WebKitGtk
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 69.000000 }
 AXSize: { 56.000000, 19.000000 }
 AXTitle: 
@@ -61,7 +61,7 @@ AXPlatformAttributes: html-id:testTable4, toolkit:WebKitGtk
 
 AXRole: AXTable
 AXParent: AXWebArea
-AXChildren: 2
+AXChildren: 1
 AXPosition: { 8.000000, 88.000000 }
 AXSize: { 62.000000, 23.000000 }
 AXTitle: 
index 9f8235f..424de03 100644 (file)
     if (window.accessibilityController) {
         document.getElementById("body").focus();
         var webArea = accessibilityController.focusedElement;
-        var table = webArea.childAtIndex(0);
-        var cell1 = table.childAtIndex(0);
-        var cell2 = table.childAtIndex(1);
-        var cell3 = table.childAtIndex(2);
-        var cell4 = table.childAtIndex(3);
+        var row = webArea.childAtIndex(0).childAtIndex(0);
+        var cell1 = row.childAtIndex(0);
+        var cell2 = row.childAtIndex(1);
+        var cell3 = row.childAtIndex(2);
+        var cell4 = row.childAtIndex(3);
         shouldBe("cell1.stringForRange(0, -1)", "'a table cell'");
         shouldBe("cell2.stringForRange(0, -1)", "''");
         shouldBe("cell3.stringForRange(0, -1)", "'Block span in a link in a table cell\\nInline span in a link in a table cell'");
diff --git a/LayoutTests/platform/mac/accessibility/aria-table-hierarchy-expected.txt b/LayoutTests/platform/mac/accessibility/aria-table-hierarchy-expected.txt
new file mode 100644 (file)
index 0000000..259ec2b
--- /dev/null
@@ -0,0 +1,136 @@
+foo
+bar
+Odd
+Even
+1
+2
+3
+4
+hello
+world
+Odd
+Even
+1
+
+2
+
+3
+
+4
+
+End of test
+This tests the accessible hierarchy for an ARIA table.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+AXRole: AXWebArea AXValue: 
+  AXRole: AXTable AXValue: 
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: foo
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: bar
+    AXRole: AXColumn AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: foo
+    AXRole: AXColumn AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: bar
+    AXRole: AXGroup AXValue: 
+  AXRole: AXTable AXValue: 
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Odd
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Even
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 1
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 2
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 3
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 4
+    AXRole: AXColumn AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Odd
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 1
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 3
+    AXRole: AXColumn AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Even
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 2
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 4
+    AXRole: AXGroup AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Odd
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Even
+  AXRole: AXTable AXValue: 
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: hello
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: world
+    AXRole: AXColumn AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: hello
+    AXRole: AXColumn AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: world
+    AXRole: AXGroup AXValue: 
+  AXRole: AXTable AXValue: 
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Odd
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Even
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 1
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 2
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 3
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 4
+    AXRole: AXColumn AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Odd
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 1
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 3
+    AXRole: AXColumn AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Even
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 2
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 4
+    AXRole: AXGroup AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Odd
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Even
+  AXRole: AXGroup AXValue: 
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/mac/accessibility/table-hierarchy-expected.txt b/LayoutTests/platform/mac/accessibility/table-hierarchy-expected.txt
new file mode 100644 (file)
index 0000000..7610fc2
--- /dev/null
@@ -0,0 +1,112 @@
+foo    bar
+Odd    Even
+1      2
+3      4
+hello  world
+Odd    Even
+1
+
+2
+
+3
+
+4
+
+End of test
+This tests the accessible hierarchy for an HTML table.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+AXRole: AXWebArea AXValue: 
+  AXRole: AXGroup AXValue: 
+    AXRole: AXStaticText AXValue: foo
+  AXRole: AXGroup AXValue: 
+    AXRole: AXStaticText AXValue: bar
+  AXRole: AXTable AXValue: 
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Odd
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Even
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 1
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 2
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 3
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 4
+    AXRole: AXColumn AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Odd
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 1
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 3
+    AXRole: AXColumn AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Even
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 2
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: 4
+    AXRole: AXGroup AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Odd
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Even
+  AXRole: AXGroup AXValue: 
+    AXRole: AXStaticText AXValue: hello
+  AXRole: AXGroup AXValue: 
+    AXRole: AXStaticText AXValue: world
+  AXRole: AXTable AXValue: 
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Odd
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Even
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 1
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 2
+    AXRole: AXRow AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 3
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 4
+    AXRole: AXColumn AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Odd
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 1
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 3
+    AXRole: AXColumn AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Even
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 2
+      AXRole: AXCell AXValue: 
+        AXRole: AXGroup AXValue: 
+          AXRole: AXStaticText AXValue: 4
+    AXRole: AXGroup AXValue: 
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Odd
+      AXRole: AXCell AXValue: 
+        AXRole: AXStaticText AXValue: Even
+  AXRole: AXGroup AXValue: 
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
index 80a317f..96cdef4 100644 (file)
@@ -1,3 +1,36 @@
+2014-12-02  Joanmarie Diggs  <jdiggs@igalia.com>
+
+        AX: [ATK] Table captions and table rows are missing from the accessible hierarchy
+        https://bugs.webkit.org/show_bug.cgi?id=139005
+
+        Reviewed by Chris Fleizach.
+
+        Expose table captions and rows via ATK. Accomplishing the former is done
+        by role mapping and inclusion of the object as a child of the table for
+        ATK. Accomplishing the latter was mostly a matter of deleting all the ATK
+        platform code that had been forcing rows to be ignored. Because captions
+        are not being exposed on the Mac, they are now explicitly being ignored
+        for that platform.
+
+        Tests: accessibility/aria-table-hierarchy.html
+               accessibility/table-hierarchy.html
+
+        * accessibility/AccessibilityObject.h:
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::determineAccessibilityRole): Added CaptionRole.
+        * accessibility/AccessibilityTable.cpp:
+        (WebCore::AccessibilityTable::addChildren): Include non-ignored captions as table children.
+        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
+        (webkitAccessibleGetNChildren): Removed special handling for tables.
+        (webkitAccessibleRefChild): Removed special handling for tables.
+        (webkitAccessibleGetIndexInParent): Removed special handling for table cells.
+        (atkRole): Corrected broken mapping for RowRole.
+        (getNChildrenForTable): Deleted.
+        (getChildForTable): Deleted.
+        (getIndexInParentForCellInRow): Deleted.
+        * accessibility/mac/AccessibilityObjectMac.mm:
+        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject): Ignore captions as table children.
+
 2014-12-02  Alexey Proskuryakov  <ap@apple.com>
 
         http/tests/appcache/main-resource-fallback-for-network-error-crash.html can break subsequent tests
index 074b6a8..c270b96 100644 (file)
@@ -107,6 +107,7 @@ enum AccessibilityRole {
     BusyIndicatorRole,
     ButtonRole,
     CanvasRole,
+    CaptionRole,
     CellRole, 
     CheckBoxRole,
     ColorWellRole,
index 90687ec..77e7f9d 100644 (file)
@@ -2618,6 +2618,9 @@ AccessibilityRole AccessibilityRenderObject::determineAccessibilityRole()
     if (node && node->hasTagName(blockquoteTag))
         return BlockquoteRole;
 
+    if (node && node->hasTagName(captionTag))
+        return CaptionRole;
+
 #if ENABLE(VIDEO)
     if (is<HTMLVideoElement>(node))
         return VideoRole;
index 1d5300e..912f649 100644 (file)
@@ -362,6 +362,14 @@ void AccessibilityTable::addChildren()
     // Go through all the available sections to pull out the rows and add them as children.
     table.recalcSectionsIfNeeded();
     
+    if (HTMLTableElement* tableElement = this->tableElement()) {
+        if (HTMLTableCaptionElement* caption = tableElement->caption()) {
+            AccessibilityObject& axCaption = *axObjectCache()->getOrCreate(caption);
+            if (!axCaption.accessibilityIsIgnored())
+                m_children.append(&axCaption);
+        }
+    }
+
     unsigned maxColumnCount = 0;
     RenderTableSection* footer = table.footer();
     
index c2bab07..0aa3dda 100644 (file)
@@ -327,22 +327,6 @@ static AtkObject* webkitAccessibleGetParent(AtkObject* object)
     return coreParent->wrapper();
 }
 
-static gint getNChildrenForTable(AccessibilityObject* coreObject)
-{
-    const AccessibilityObject::AccessibilityChildrenVector& tableChildren = coreObject->children();
-    size_t cellsCount = 0;
-
-    // Look for the actual index of the cell inside the table.
-    for (const auto& tableChild : tableChildren) {
-        if (tableChild->isTableRow())
-            cellsCount += tableChild->children().size();
-        else
-            cellsCount++;
-    }
-
-    return cellsCount;
-}
-
 static gint webkitAccessibleGetNChildren(AtkObject* object)
 {
     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE(object), 0);
@@ -350,38 +334,9 @@ static gint webkitAccessibleGetNChildren(AtkObject* object)
 
     AccessibilityObject* coreObject = core(object);
 
-    // Tables should be treated in a different way because rows should
-    // be bypassed when exposing the accessible hierarchy.
-    if (is<AccessibilityTable>(*coreObject) && downcast<AccessibilityTable>(*coreObject).isExposableThroughAccessibility())
-        return getNChildrenForTable(coreObject);
-
     return coreObject->children().size();
 }
 
-static AccessibilityObject* getChildForTable(AccessibilityObject* coreObject, gint index)
-{
-    const AccessibilityObject::AccessibilityChildrenVector& tableChildren = coreObject->children();
-    size_t cellsCount = 0;
-
-    // Look for the actual index of the cell inside the table.
-    size_t current = static_cast<size_t>(index);
-    for (const auto& tableChild : tableChildren) {
-        if (tableChild->isTableRow()) {
-            const AccessibilityObject::AccessibilityChildrenVector& rowChildren = tableChild->children();
-            size_t rowChildrenCount = rowChildren.size();
-            if (current < cellsCount + rowChildrenCount)
-                return rowChildren.at(current - cellsCount).get();
-            cellsCount += rowChildrenCount;
-        } else if (cellsCount == current)
-            return tableChild.get();
-        else
-            cellsCount++;
-    }
-
-    // Shouldn't reach if the child was found.
-    return 0;
-}
-
 static AtkObject* webkitAccessibleRefChild(AtkObject* object, gint index)
 {
     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE(object), 0);
@@ -393,16 +348,10 @@ static AtkObject* webkitAccessibleRefChild(AtkObject* object, gint index)
     AccessibilityObject* coreObject = core(object);
     AccessibilityObject* coreChild = 0;
 
-    // Tables are special cases because rows should be bypassed, but
-    // still taking their cells into account.
-    if (is<AccessibilityTable>(*coreObject) && downcast<AccessibilityTable>(*coreObject).isExposableThroughAccessibility())
-        coreChild = getChildForTable(coreObject, index);
-    else {
-        const AccessibilityObject::AccessibilityChildrenVector& children = coreObject->children();
-        if (static_cast<unsigned>(index) >= children.size())
-            return 0;
-        coreChild = children.at(index).get();
-    }
+    const AccessibilityObject::AccessibilityChildrenVector& children = coreObject->children();
+    if (static_cast<size_t>(index) >= children.size())
+        return 0;
+    coreChild = children.at(index).get();
 
     if (!coreChild)
         return 0;
@@ -414,40 +363,6 @@ static AtkObject* webkitAccessibleRefChild(AtkObject* object, gint index)
     return child;
 }
 
-static gint getIndexInParentForCellInRow(AccessibilityObject* coreObject)
-{
-    AccessibilityObject* parent = coreObject->parentObjectUnignored();
-    if (!parent)
-        return -1;
-
-    AccessibilityObject* grandParent = parent->parentObjectUnignored();
-    if (!grandParent)
-        return -1;
-
-    const AccessibilityObject::AccessibilityChildrenVector& rows = grandParent->children();
-    size_t previousCellsCount = 0;
-
-    // Look for the actual index of the cell inside the table.
-    for (const auto& row : rows) {
-        if (!row->isTableRow())
-            continue;
-
-        const AccessibilityObject::AccessibilityChildrenVector& cells = row->children();
-        size_t cellsCount = cells.size();
-
-        if (row == parent) {
-            for (unsigned j = 0; j < cellsCount; ++j) {
-                if (cells[j] == coreObject)
-                    return previousCellsCount + j;
-            }
-        }
-
-        previousCellsCount += cellsCount;
-    }
-
-    return -1;
-}
-
 static gint webkitAccessibleGetIndexInParent(AtkObject* object)
 {
     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE(object), -1);
@@ -471,11 +386,6 @@ static gint webkitAccessibleGetIndexInParent(AtkObject* object)
         }
     }
 
-    // Need to calculate the index of the cell in the table, as
-    // rows won't be exposed to assistive technologies.
-    if (parent && parent->isTableRow() && coreObject->isTableCell())
-        return getIndexInParentForCellInRow(coreObject);
-
     if (!parent)
         return -1;
 
@@ -630,8 +540,7 @@ static AtkRole atkRole(AccessibilityObject* coreObject)
         // return ATK_ROLE_TABLE_COLUMN_HEADER; // Is this right?
         return ATK_ROLE_UNKNOWN; // Matches Mozilla
     case RowRole:
-        // return ATK_ROLE_TABLE_ROW_HEADER; // Is this right?
-        return ATK_ROLE_LIST_ITEM; // Matches Mozilla
+        return ATK_ROLE_TABLE_ROW;
     case ToolbarRole:
         return ATK_ROLE_TOOL_BAR;
     case BusyIndicatorRole:
@@ -670,6 +579,8 @@ static AtkRole atkRole(AccessibilityObject* coreObject)
         return ATK_ROLE_ROW_HEADER;
     case ColumnHeaderRole:
         return ATK_ROLE_COLUMN_HEADER;
+    case CaptionRole:
+        return ATK_ROLE_CAPTION;
     case CellRole:
         return coreObject->inheritsPresentationalRole() ? ATK_ROLE_SECTION : ATK_ROLE_TABLE_CELL;
     case LinkRole:
index 1cc08cf..5f3a244 100644 (file)
@@ -77,6 +77,9 @@ AccessibilityObjectInclusion AccessibilityObject::accessibilityPlatformIncludesO
     if (isMenuListPopup() || isMenuListOption())
         return IgnoreObject;
 
+    if (roleValue() == CaptionRole)
+        return IgnoreObject;
+
     // Never expose an unknown object on the Mac. Clients of the AX API will not know what to do with it.
     // Special case is when the unknown object is actually an attachment.
     if (roleValue() == UnknownRole && !isAttachment())
index 0d5face..3dd105e 100644 (file)
@@ -1,3 +1,13 @@
+2014-12-02  Joanmarie Diggs  <jdiggs@igalia.com>
+
+        AX: [ATK] Table captions and table rows are missing from the accessible hierarchy
+        https://bugs.webkit.org/show_bug.cgi?id=139005
+
+        Reviewed by Chris Fleizach.
+
+        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
+        Add mapping for ATK_ROLE_CAPTION to roleToString
+
 2014-12-02  Alexey Proskuryakov  <ap@apple.com>
 
         http/tests/appcache/main-resource-fallback-for-network-error-crash.html can break subsequent tests
index 03c5bd3..c135e76 100644 (file)
@@ -339,6 +339,8 @@ const gchar* roleToString(AtkObject* object)
         return "AXDialog";
     case ATK_ROLE_CANVAS:
         return "AXCanvas";
+    case ATK_ROLE_CAPTION:
+        return "AXCaption";
     case ATK_ROLE_CHECK_BOX:
         return "AXCheckBox";
     case ATK_ROLE_COLOR_CHOOSER: