Source/WebCore/ChangeLog

 12015-05-17 Andres Gonzalez <agonzalez334@nc.rr.com>
 2
 3 AX: WebKit exposes all Ruby Text as Unknown (Japanese EPUB accessibility blocker)
 4 https://bugs.webkit.org/show_bug.cgi?id=141303
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Test: accessibility/ruby-hierarchy-roles.html
 9
 10 * accessibility/AccessibilityObject.h:
 11 * accessibility/AccessibilityRenderObject.cpp:
 12 (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
 13 (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
 14 * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
 15 (createAccessibilityRoleMap):
 16 (-[WebAccessibilityObjectWrapper subrole]):
 17
1182015-05-17 Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>
219
320 [Streams API] Delegate ReadableStreamReader reference counting to ReadableStream
184444

Source/WebCore/accessibility/AccessibilityObject.h

@@enum AccessibilityRole {
176176 RadioGroupRole,
177177 RowHeaderRole,
178178 RowRole,
 179 RubyBaseRole,
 180 RubyBlockRole,
 181 RubyInlineRole,
 182 RubyRunRole,
 183 RubyTextRole,
179184 RulerRole,
180185 RulerMarkerRole,
181186 ScrollAreaRole,
183902

Source/WebCore/accessibility/AccessibilityRenderObject.cpp

@@bool AccessibilityRenderObject::computeA
13771377 if (node && node->hasTagName(dfnTag))
13781378 return false;
13791379
1380  // By default, objects should be ignored so that the AX hierarchy is not
 1380 // Make sure that ruby containers are not ignored.
 1381 if (m_renderer->isRubyRun()
 1382 || m_renderer->isRubyBlock()
 1383 || m_renderer->isRubyInline())
 1384 return false;
 1385
 1386 // By default, objects should be ignored so that the AX hierarchy is not
13811387 // filled with unnecessary items.
13821388 return true;
13831389}

@@AccessibilityRole AccessibilityRenderObj
25702576 if (node && node->hasTagName(dlTag))
25712577 return DescriptionListRole;
25722578
2573  if (node && (node->hasTagName(rpTag) || node->hasTagName(rtTag)))
2574  return AnnotationRole;
2575 
 2579 // Check for Ruby elements
 2580 if (m_renderer->isRubyText())
 2581 return RubyTextRole;
 2582 if (m_renderer->isRubyBase())
 2583 return RubyBaseRole;
 2584 if (m_renderer->isRubyRun())
 2585 return RubyRunRole;
 2586 if (m_renderer->isRubyBlock())
 2587 return RubyBlockRole;
 2588 if (m_renderer->isRubyInline())
 2589 return RubyInlineRole;
 2590
25762591 // This return value is what will be used if AccessibilityTableCell determines
25772592 // the cell should not be treated as a cell (e.g. because it is a layout table.
25782593 // In ATK, there is a distinction between generic text block elements and other
183902

Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm

@@using namespace HTMLNames;
120120#define NSAccessibilityContentSeparatorSubrole @"AXContentSeparator"
121121#endif
122122
 123// Define the Ruby subroles if are not defined in NSAccessibility.h
 124
 125#ifndef NSAccessibilityRubyBaseSubRole
 126#define NSAccessibilityRubyBaseSubrole @"AXRubyBase"
 127#endif
 128
 129#ifndef NSAccessibilityRubyBlockSubrole
 130#define NSAccessibilityRubyBlockSubrole @"AXRubyBlock"
 131#endif
 132
 133#ifndef NSAccessibilityRubyInlineSubrole
 134#define NSAccessibilityRubyInlineSubrole @"AXRubyInline"
 135#endif
 136
 137#ifndef NSAccessibilityRubyRunSubrole
 138#define NSAccessibilityRubyRunSubrole @"AXRubyRun"
 139#endif
 140
 141#ifndef NSAccessibilityRubyTextSubrole
 142#define NSAccessibilityRubyTextSubrole @"AXRubyText"
 143#endif
 144
123145// Miscellaneous
124146#ifndef NSAccessibilityBlockQuoteLevelAttribute
125147#define NSAccessibilityBlockQuoteLevelAttribute @"AXBlockQuoteLevel"

@@static const AccessibilityRoleMap& creat
19591981 { BlockquoteRole, NSAccessibilityGroupRole },
19601982 { SwitchRole, NSAccessibilityCheckBoxRole },
19611983 { SearchFieldRole, NSAccessibilityTextFieldRole },
 1984 { RubyBaseRole, NSAccessibilityGroupRole },
 1985 { RubyBlockRole, NSAccessibilityGroupRole },
 1986 { RubyInlineRole, NSAccessibilityGroupRole },
 1987 { RubyRunRole, NSAccessibilityGroupRole },
 1988 { RubyTextRole, NSAccessibilityGroupRole },
19621989 };
19631990 AccessibilityRoleMap& roleMap = *new AccessibilityRoleMap;
19641991

@@- (NSString*)subrole
21382165
21392166 if (m_object->isSwitch())
21402167 return NSAccessibilitySwitchSubrole;
 2168
 2169 // Ruby subroles
 2170 switch (role) {
 2171 case RubyBaseRole:
 2172 return NSAccessibilityRubyBaseSubrole;
 2173 case RubyBlockRole:
 2174 return NSAccessibilityRubyBlockSubrole;
 2175 case RubyInlineRole:
 2176 return NSAccessibilityRubyInlineSubrole;
 2177 case RubyRunRole:
 2178 return NSAccessibilityRubyRunSubrole;
 2179 case RubyTextRole:
 2180 return NSAccessibilityRubyTextSubrole;
 2181 default:
 2182 break;
 2183 }
21412184
21422185 return nil;
21432186}
183902

LayoutTests/ChangeLog

 12015-05-17 Andres Gonzalez <agonzalez334@nc.rr.com>
 2
 3 AX: WebKit exposes all Ruby Text as Unknown (Japanese EPUB accessibility blocker)
 4 https://bugs.webkit.org/show_bug.cgi?id=141303
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * accessibility/ruby-hierarchy-roles-expected.txt: Added.
 9 * accessibility/ruby-hierarchy-roles.html: Added.
 10 * platform/mac-mavericks/accessibility/ruby-hierarchy-roles-expected.txt: Added.
 11 * platform/mac/accessibility/ruby-hierarchy-roles-expected.txt: Added.
 12
1132015-05-16 Zalan Bujtas <zalan@apple.com>
214
315 REGRESSION (Subpixel): Dashed underline is missing when box is positioned at subpixels.
184444

LayoutTests/accessibility/ruby-hierarchy-roles-expected.txt

 1This tests that the ruby containers are exposed with the appropriate hierarchy and roles.
 2
 3On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 4
 5
 6PASS successfullyParsed is true
 7
 8TEST COMPLETE
 9basetext rubytext
0

LayoutTests/accessibility/ruby-hierarchy-roles.html

 1<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
 2<html>
 3 <head>
 4 <script src="../resources/js-test-pre.js"></script>
 5 </head>
 6 <body>
 7 <ruby id="rubyElemId">
 8 <rb>basetext</rb>
 9 <rp>(</rp>
 10 <rt>rubytext</rt>
 11 <rp>)</rp>
 12 </ruby>
 13
 14 <script>
 15 if (window.accessibilityController) {
 16 description("This tests that the ruby containers are exposed with the appropriate hierarchy and roles.")
 17 // At the moment, this is implemented only for OSX.
 18 var platform = accessibilityController.platformName;
 19 if ("mac" == platform) {
 20 // Expected values for roles and subroles.
 21 var expectedRubyRole = "AXRole: AXGroup"; // all ruby containers have AXGroup role
 22 var expectedRubyInlineSubrole = "AXSubrole: AXRubyInline";
 23 var expectedRubyBlockSubrole = "AXSubrole: AXRubyBlock";
 24 var expectedRubyRunSubrole = "AXSubrole: AXRubyRun";
 25 var expectedRubyTextSubrole = "AXSubrole: AXRubyText";
 26 var expectedRubyBaseSubrole = "AXSubrole: AXRubyBase";
 27
 28 // Try inline style first, block style second
 29 var rubyElem = document.getElementById("rubyElemId");
 30 shouldBeTrue("rubyElem != null");
 31 rubyElem.style.display = "inline";
 32 checkHierarchyAndRoles(rubyElem);
 33
 34 rubyElem.style.display = "block";
 35 checkHierarchyAndRoles(rubyElem);
 36
 37 function checkHierarchyAndRoles(rubyElem) {
 38 axRuby = window.accessibilityController.accessibleElementById("rubyElemId");
 39 shouldBeTrue("axRuby != null");
 40 role = axRuby.role;
 41 subrole = axRuby.subrole;
 42 shouldBe("role", "expectedRubyRole");
 43 if (rubyElem.style.display == "inline") {
 44 shouldBe("subrole", "expectedRubyInlineSubrole");
 45 }
 46 else {
 47 shouldBe("subrole", "expectedRubyBlockSubrole");
 48 }
 49
 50 // RubyRun
 51 axRubyRun = axRuby.childAtIndex(0);
 52 shouldBeTrue("axRubyRun != null");
 53 role = axRubyRun.role;
 54 subrole = axRubyRun.subrole;
 55 shouldBe("role", "expectedRubyRole");
 56 shouldBe("subrole", "expectedRubyRunSubrole");
 57
 58 // RubyText
 59 axRubyText = axRubyRun.childAtIndex(0);
 60 shouldBeTrue("axRubyText != null");
 61 role = axRubyText.role;
 62 subrole = axRubyText.subrole;
 63 shouldBe("role", "expectedRubyRole");
 64 shouldBe("subrole", "expectedRubyTextSubrole");
 65
 66 // RubyBase
 67 axRubyBase = axRubyRun.childAtIndex(1);
 68 shouldBeTrue("axRubyBase != null");
 69 role = axRubyBase.role;
 70 subrole = axRubyBase.subrole;
 71 shouldBe("role", "expectedRubyRole");
 72 shouldBe("subrole", "expectedRubyBaseSubrole");
 73 }
 74 }
 75 }
 76 </script>
 77 <script src="../resources/js-test-post.js"></script>
 78 </body>
 79</html>
0

LayoutTests/platform/mac-mavericks/accessibility/ruby-hierarchy-roles-expected.txt

 1This tests that the ruby containers are exposed with the appropriate hierarchy and roles.
 2
 3On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 4
 5
 6PASS rubyElem != null is true
 7PASS axRuby != null is true
 8PASS role is expectedRubyRole
 9PASS subrole is expectedRubyInlineSubrole
 10PASS axRubyRun != null is true
 11PASS role is expectedRubyRole
 12PASS subrole is expectedRubyRunSubrole
 13PASS axRubyText != null is true
 14PASS role is expectedRubyRole
 15PASS subrole is expectedRubyTextSubrole
 16PASS axRubyBase != null is true
 17PASS role is expectedRubyRole
 18PASS subrole is expectedRubyBaseSubrole
 19PASS axRuby != null is true
 20PASS role is expectedRubyRole
 21PASS subrole is expectedRubyBlockSubrole
 22PASS axRubyRun != null is true
 23PASS role is expectedRubyRole
 24PASS subrole is expectedRubyRunSubrole
 25PASS axRubyText != null is true
 26PASS role is expectedRubyRole
 27PASS subrole is expectedRubyTextSubrole
 28PASS axRubyBase != null is true
 29PASS role is expectedRubyRole
 30PASS subrole is expectedRubyBaseSubrole
 31PASS successfullyParsed is true
 32
 33TEST COMPLETE
 34basetext rubytext
0

LayoutTests/platform/mac/accessibility/ruby-hierarchy-roles-expected.txt

 1This tests that the ruby containers are exposed with the appropriate hierarchy and roles.
 2
 3On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 4
 5
 6PASS rubyElem != null is true
 7PASS axRuby != null is true
 8PASS role is expectedRubyRole
 9PASS subrole is expectedRubyInlineSubrole
 10PASS axRubyRun != null is true
 11PASS role is expectedRubyRole
 12PASS subrole is expectedRubyRunSubrole
 13PASS axRubyText != null is true
 14PASS role is expectedRubyRole
 15PASS subrole is expectedRubyTextSubrole
 16PASS axRubyBase != null is true
 17PASS role is expectedRubyRole
 18PASS subrole is expectedRubyBaseSubrole
 19PASS axRuby != null is true
 20PASS role is expectedRubyRole
 21PASS subrole is expectedRubyBlockSubrole
 22PASS axRubyRun != null is true
 23PASS role is expectedRubyRole
 24PASS subrole is expectedRubyRunSubrole
 25PASS axRubyText != null is true
 26PASS role is expectedRubyRole
 27PASS subrole is expectedRubyTextSubrole
 28PASS axRubyBase != null is true
 29PASS role is expectedRubyRole
 30PASS subrole is expectedRubyBaseSubrole
 31PASS successfullyParsed is true
 32
 33TEST COMPLETE
 34basetext rubytext
0