AX: WEB: VoiceOver does not announce some WAI-ARIA document structures
authorcfleizach@apple.com <cfleizach@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Mar 2016 06:52:54 +0000 (06:52 +0000)
committercfleizach@apple.com <cfleizach@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Mar 2016 06:52:54 +0000 (06:52 +0000)
https://bugs.webkit.org/show_bug.cgi?id=155603
<rdar://problem/25227385>

Reviewed by Darin Adler.

Source/WebCore:

Expose more ARIA landmark type roles on iOS for accessibility.

Updated test: accessibility/ios-simulator/landmark-type.html

* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper _accessibilityIsLandmarkRole:]):
(-[WebAccessibilityObjectWrapper accessibilityLabel]):
* platform/LocalizedStrings.cpp:
(WebCore::searchMenuClearRecentSearchesText):
(WebCore::AXWebAreaText):
(WebCore::AXListItemActionVerb):
(WebCore::AXAutoFillCredentialsLabel):
* platform/LocalizedStrings.h:

LayoutTests:

* accessibility/ios-simulator/landmark-type-expected.txt:
* accessibility/ios-simulator/landmark-type.html:

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

LayoutTests/ChangeLog
LayoutTests/accessibility/ios-simulator/landmark-type-expected.txt
LayoutTests/accessibility/ios-simulator/landmark-type.html
Source/WebCore/ChangeLog
Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm
Source/WebCore/platform/LocalizedStrings.cpp
Source/WebCore/platform/LocalizedStrings.h

index 34aa90e..1641d11 100644 (file)
@@ -1,3 +1,14 @@
+2016-03-17  Chris Fleizach  <cfleizach@apple.com>
+
+        AX: WEB: VoiceOver does not announce some WAI-ARIA document structures
+        https://bugs.webkit.org/show_bug.cgi?id=155603
+        <rdar://problem/25227385>
+
+        Reviewed by Darin Adler.
+
+        * accessibility/ios-simulator/landmark-type-expected.txt:
+        * accessibility/ios-simulator/landmark-type.html:
+
 2016-03-17  Brent Fulgham  <bfulgham@apple.com>
 
         [XSS Auditor] Off by one in XSSAuditor::canonicalizedSnippetForJavaScript()
index dc47ba2..e7b64ac 100644 (file)
@@ -2,6 +2,10 @@ non landmark
 text
 text
 text
+footer
+article
+document
+note
 This tests that landmarks return their type as part of the AX label.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
@@ -13,6 +17,14 @@ PASS banner.description is 'AXLabel: banner'
 PASS banner.childAtIndex(0).traits != nonLandmarkText.traits is true
 PASS region.description is 'AXLabel: testregion, region'
 PASS region.childAtIndex(0).traits != nonLandmarkText.traits is true
+PASS footer.description is 'AXLabel: footer'
+PASS footer.childAtIndex(0).traits != nonLandmarkText.traits is true
+PASS article.description is 'AXLabel: article'
+PASS article.childAtIndex(0).traits != nonLandmarkText.traits is true
+PASS note.description is 'AXLabel: note'
+PASS note.childAtIndex(0).traits != nonLandmarkText.traits is true
+PASS documentContainer.description is 'AXLabel: document'
+PASS documentContainer.childAtIndex(0).traits != nonLandmarkText.traits is true
 PASS region.childAtIndex(0).traits == main.childAtIndex(0).traits is true
 PASS successfullyParsed is true
 
index bbe59fb..1543731 100644 (file)
@@ -24,6 +24,22 @@ text
 text
 </div>
 
+<footer id="footer">
+footer
+</footer>
+
+<div role="article" id="article">
+article
+</div>
+
+<div role="document" id="documentcontainer">
+document
+</div>
+
+<div role="note" id="note">
+note
+</div>
+
 <p id="description"></p>
 <div id="console"></div>
 
@@ -49,6 +65,22 @@ text
         shouldBe("region.description", "'AXLabel: testregion, region'");
         shouldBeTrue("region.childAtIndex(0).traits != nonLandmarkText.traits");
 
+        var footer = accessibilityController.accessibleElementById("footer");
+        shouldBe("footer.description", "'AXLabel: footer'");
+        shouldBeTrue("footer.childAtIndex(0).traits != nonLandmarkText.traits");
+
+        var article = accessibilityController.accessibleElementById("article");
+        shouldBe("article.description", "'AXLabel: article'");
+        shouldBeTrue("article.childAtIndex(0).traits != nonLandmarkText.traits");
+
+        var note = accessibilityController.accessibleElementById("note");
+        shouldBe("note.description", "'AXLabel: note'");
+        shouldBeTrue("note.childAtIndex(0).traits != nonLandmarkText.traits");
+
+        var documentContainer = accessibilityController.accessibleElementById("documentcontainer");
+        shouldBe("documentContainer.description", "'AXLabel: document'");
+        shouldBeTrue("documentContainer.childAtIndex(0).traits != nonLandmarkText.traits");
+
         shouldBeTrue("region.childAtIndex(0).traits == main.childAtIndex(0).traits");
     }
 
index d1bd118..a487f5c 100644 (file)
@@ -1,3 +1,25 @@
+2016-03-17  Chris Fleizach  <cfleizach@apple.com>
+
+        AX: WEB: VoiceOver does not announce some WAI-ARIA document structures
+        https://bugs.webkit.org/show_bug.cgi?id=155603
+        <rdar://problem/25227385>
+
+        Reviewed by Darin Adler.
+
+        Expose more ARIA landmark type roles on iOS for accessibility.
+
+        Updated test: accessibility/ios-simulator/landmark-type.html
+
+        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
+        (-[WebAccessibilityObjectWrapper _accessibilityIsLandmarkRole:]):
+        (-[WebAccessibilityObjectWrapper accessibilityLabel]):
+        * platform/LocalizedStrings.cpp:
+        (WebCore::searchMenuClearRecentSearchesText):
+        (WebCore::AXWebAreaText):
+        (WebCore::AXListItemActionVerb):
+        (WebCore::AXAutoFillCredentialsLabel):
+        * platform/LocalizedStrings.h:
+
 2016-03-17  Daniel Bates  <dabates@apple.com>
 
         Cleanup: Remove the need to pass reporting status to ContentSecurityPolicy functions
index 5d1c329..1add181 100644 (file)
@@ -498,7 +498,11 @@ static AccessibilityObjectWrapper* AccessibilityUnignoredAncestor(AccessibilityO
 - (BOOL)_accessibilityIsLandmarkRole:(AccessibilityRole)role
 {
     switch (role) {
+    case DocumentRole:
+    case DocumentArticleRole:
+    case DocumentNoteRole:
     case DocumentRegionRole:
+    case FooterRole:
     case LandmarkApplicationRole:
     case LandmarkBannerRole:
     case LandmarkComplementaryRole:
@@ -958,7 +962,11 @@ static void appendStringToResult(NSMutableString *result, NSString *string)
     NSString *axTitle = [self baseAccessibilityTitle];
     NSString *axDescription = [self baseAccessibilityDescription];
     NSString *landmarkDescription = [self ariaLandmarkRoleDescription];
-    
+
+    // Footer is not considered a landmark, but we want the role description.
+    if (m_object->roleValue() == FooterRole)
+        landmarkDescription = AXFooterRoleDescriptionText();
+
     NSMutableString *result = [NSMutableString string];
     if (m_object->roleValue() == HorizontalRuleRole)
         appendStringToResult(result, AXHorizontalRuleDescriptionText());
index 155eb58..4ca3d92 100644 (file)
@@ -544,6 +544,7 @@ String searchMenuClearRecentSearchesText()
 {
     return WEB_UI_STRING("Clear Recent Searches", "menu item in Recent Searches menu that empties menu's contents");
 }
+#endif // !PLATFORM(IOS)
 
 String AXWebAreaText()
 {
@@ -652,7 +653,6 @@ String AXListItemActionVerb()
     notImplemented();
     return "select";
 }
-#endif // !PLATFORM(IOS)
 
 String AXAutoFillCredentialsLabel()
 {
index 058d943..f0eac4f 100644 (file)
@@ -149,6 +149,7 @@ namespace WebCore {
     String searchMenuNoRecentSearchesText();
     String searchMenuRecentSearchesText();
     String searchMenuClearRecentSearchesText();
+#endif
 
     String AXWebAreaText();
     String AXLinkText();
@@ -172,7 +173,6 @@ namespace WebCore {
     String AXMenuListPopupActionVerb();
     String AXLinkActionVerb();
     String AXListItemActionVerb();
-#endif
 
 #if ENABLE(INPUT_TYPE_WEEK)
     // weekFormatInLDML() returns week and year format in LDML, Unicode