Add accessibility support to WKDataListSuggestionsView.
https://bugs.webkit.org/show_bug.cgi?id=199772
<rdar://problem/47095851>

Patch by Andres Gonzalez <andresg_22@apple.com> on 2019-07-13
Reviewed by Chris Fleizach.

Source/WebCore:

Localizable strings for accessibility announcements.

* en.lproj/Localizable.strings:

Source/WebKit:

Added accessibility announcement notifications to show, dismiss and selection change for the datalist suggestions view.
* UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
(-[WKDataListSuggestionsView notifyAccessibilityClients:]):
(-[WKDataListSuggestionsView moveSelectionByDirection:]):
(-[WKDataListSuggestionsView invalidate]):
(-[WKDataListSuggestionsView showSuggestionsDropdown:]):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@247418 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 9e5d9f3..802d6c3 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,15 @@
+2019-07-13  Andres Gonzalez  <andresg_22@apple.com>
+
+        Add accessibility support to WKDataListSuggestionsView.
+        https://bugs.webkit.org/show_bug.cgi?id=199772
+        <rdar://problem/47095851>
+
+        Reviewed by Chris Fleizach.
+
+        Localizable strings for accessibility announcements.
+
+        * en.lproj/Localizable.strings:
+
 2019-07-13  Chris Dumez  <cdumez@apple.com>
 
         Drop non thread-safe usage of WeakPtr in VideoFullscreenInterfaceAVKit
diff --git a/Source/WebCore/en.lproj/Localizable.strings b/Source/WebCore/en.lproj/Localizable.strings
index a381069..8c9e9d6 100644
--- a/Source/WebCore/en.lproj/Localizable.strings
+++ b/Source/WebCore/en.lproj/Localizable.strings
@@ -775,6 +775,12 @@
 /* Menu section heading for subtitles */
 "Subtitles" = "Subtitles";
 
+/* Accessibility announcement for the data list suggestions dropdown going away. */
+"Suggestions list hidden." = "Suggestions list hidden.";
+
+/* Accessibility announcement that the suggestions list became visible. The format argument is for the first option in the list. */
+"Suggestions list visible, %@" = "Suggestions list visible, %@";
+
 /* Undo action name */
 "Superscript (Undo action name)" = "Superscript";
 
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 25eef33..800ca2c 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,18 @@
+2019-07-13  Andres Gonzalez  <andresg_22@apple.com>
+
+        Add accessibility support to WKDataListSuggestionsView.
+        https://bugs.webkit.org/show_bug.cgi?id=199772
+        <rdar://problem/47095851>
+
+        Reviewed by Chris Fleizach.
+
+        Added accessibility announcement notifications to show, dismiss and selection change for the datalist suggestions view.
+        * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm:
+        (-[WKDataListSuggestionsView notifyAccessibilityClients:]):
+        (-[WKDataListSuggestionsView moveSelectionByDirection:]):
+        (-[WKDataListSuggestionsView invalidate]):
+        (-[WKDataListSuggestionsView showSuggestionsDropdown:]):
+
 2019-07-13  Zalan Bujtas  <zalan@apple.com>
 
         Cannot bring up custom media controls at all on v.youku.com
diff --git a/Source/WebKit/UIProcess/mac/WebDataListSuggestionsDropdownMac.mm b/Source/WebKit/UIProcess/mac/WebDataListSuggestionsDropdownMac.mm
index 1c273e3..bedd164 100644
--- a/Source/WebKit/UIProcess/mac/WebDataListSuggestionsDropdownMac.mm
+++ b/Source/WebKit/UIProcess/mac/WebDataListSuggestionsDropdownMac.mm
@@ -30,6 +30,7 @@
 
 #import "WebPageProxy.h"
 #import <WebCore/IntRect.h>
+#import <WebCore/LocalizedStrings.h>
 #import <pal/spi/cocoa/NSColorSPI.h>
 
 static const CGFloat dropdownTopMargin = 2;
@@ -352,6 +353,14 @@
     [_table setVisibleRect:[_enclosingWindow frame]];
 }
 
+- (void)notifyAccessibilityClients:(NSString *)info
+{
+    NSDictionary<NSAccessibilityNotificationUserInfoKey, id> *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:
+        NSAccessibilityPriorityKey, @(NSAccessibilityPriorityHigh),
+        NSAccessibilityAnnouncementKey, info, nil];
+    NSAccessibilityPostNotificationWithUserInfo(NSApp, NSAccessibilityAnnouncementRequestedNotification, userInfo);
+}
+
 - (void)moveSelectionByDirection:(const String&)direction
 {
     size_t size = _suggestions.size();
@@ -368,6 +377,10 @@
         newSelection = (direction == "Up") ? (size - 1) : 0;
 
     [_table setActiveRow:newSelection];
+
+    // Notify accessibility clients of new selection.
+    NSString *currentSelectedString = [self currentSelectedString];
+    [self notifyAccessibilityClients:currentSelectedString];
 }
 
 - (void)invalidate
@@ -383,6 +396,10 @@
     [[_view window] removeChildWindow:_enclosingWindow.get()];
     [_enclosingWindow close];
     _enclosingWindow = nil;
+
+    // Notify accessibility clients that datalist went away.
+    NSString *info = WEB_UI_STRING("Suggestions list hidden.", "Accessibility announcement for the data list suggestions dropdown going away.");
+    [self notifyAccessibilityClients:info];
 }
 
 - (NSRect)dropdownRectForElementRect:(const WebCore::IntRect&)rect
@@ -399,6 +416,11 @@
     [_table reload];
     [[_view window] addChildWindow:_enclosingWindow.get() ordered:NSWindowAbove];
     [[_table enclosingScrollView] flashScrollers];
+
+    // Notify accessibility clients of datalist becoming visible.
+    NSString *currentSelectedString = [self currentSelectedString];
+    NSString *info = [NSString stringWithFormat:WEB_UI_STRING("Suggestions list visible, %@", "Accessibility announcement that the suggestions list became visible. The format argument is for the first option in the list."), currentSelectedString];
+    [self notifyAccessibilityClients:info];
 }
 
 - (void)selectedRow:(NSTableView *)sender