Title: [230782] trunk
Revision
230782
Author
n_w...@apple.com
Date
2018-04-18 14:21:50 -0700 (Wed, 18 Apr 2018)

Log Message

AX: [macOS] WebKit hangs when triggering an alert from an AOM increment event
https://bugs.webkit.org/show_bug.cgi?id=184742

Reviewed by Chris Fleizach.

Source/WebCore:

Made increment and decrement actions on the macOS to be async. So that VoiceOver
won't hang indefinitely if performing the actions causes an alert or other modal
behaviors.

Test: accessibility/mac/async-increment-decrement-action.html

* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper accessibilityPerformIncrementAction]):
(-[WebAccessibilityObjectWrapper _accessibilityPerformIncrementAction]):
(-[WebAccessibilityObjectWrapper accessibilityPerformDecrementAction]):
(-[WebAccessibilityObjectWrapper _accessibilityPerformDecrementAction]):
(-[WebAccessibilityObjectWrapper accessibilityPerformAction:]):

Tools:

* DumpRenderTree/mac/AccessibilityUIElementMac.mm:
(AccessibilityUIElement::increment):
(AccessibilityUIElement::decrement):
* WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
(WTR::AccessibilityUIElement::asyncIncrement):
(WTR::AccessibilityUIElement::asyncDecrement):
* WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
* WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
(WTR::AccessibilityUIElement::increment):
(WTR::AccessibilityUIElement::decrement):
(WTR::AccessibilityUIElement::asyncIncrement):
(WTR::AccessibilityUIElement::asyncDecrement):

LayoutTests:

* accessibility/mac/async-increment-decrement-action-expected.txt: Added.
* accessibility/mac/async-increment-decrement-action.html: Added.
* platform/mac-wk1/TestExpectations:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (230781 => 230782)


--- trunk/LayoutTests/ChangeLog	2018-04-18 21:21:17 UTC (rev 230781)
+++ trunk/LayoutTests/ChangeLog	2018-04-18 21:21:50 UTC (rev 230782)
@@ -1,3 +1,14 @@
+2018-04-18  Nan Wang  <n_w...@apple.com>
+
+        AX: [macOS] WebKit hangs when triggering an alert from an AOM increment event
+        https://bugs.webkit.org/show_bug.cgi?id=184742
+
+        Reviewed by Chris Fleizach.
+
+        * accessibility/mac/async-increment-decrement-action-expected.txt: Added.
+        * accessibility/mac/async-increment-decrement-action.html: Added.
+        * platform/mac-wk1/TestExpectations:
+
 2018-04-18  Ross Kirsling  <ross.kirsl...@sony.com>
 
         [Win] Layout Test js/date-constructor.html is failing

Added: trunk/LayoutTests/accessibility/mac/async-increment-decrement-action-expected.txt (0 => 230782)


--- trunk/LayoutTests/accessibility/mac/async-increment-decrement-action-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/accessibility/mac/async-increment-decrement-action-expected.txt	2018-04-18 21:21:50 UTC (rev 230782)
@@ -0,0 +1,15 @@
+
+This tests that increment and decrement actions are async.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS obj.intValue is 25
+PASS obj.intValue is 25
+PASS obj.intValue is 50
+PASS obj.intValue is 50
+PASS obj.intValue is 25
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/accessibility/mac/async-increment-decrement-action.html (0 => 230782)


--- trunk/LayoutTests/accessibility/mac/async-increment-decrement-action.html	                        (rev 0)
+++ trunk/LayoutTests/accessibility/mac/async-increment-decrement-action.html	2018-04-18 21:21:50 UTC (rev 230782)
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src=""
+</head>
+<body id="body">
+
+<input type="range" min="0" max="100" value="25" step="25" id="range1"/>
+
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+
+    description("This tests that increment and decrement actions are async.");
+
+    if (window.accessibilityController) {
+        jsTestIsAsync = true;
+
+        var obj = accessibilityController.accessibleElementById("range1");
+        
+        shouldBe("obj.intValue", "25");
+
+        obj.asyncIncrement();
+        shouldBe("obj.intValue", "25");
+
+        setTimeout(function() {
+            shouldBe("obj.intValue", "50");
+
+            obj.asyncDecrement();
+            shouldBe("obj.intValue", "50");
+
+            setTimeout(function() {
+                shouldBe("obj.intValue", "25");
+                finishJSTest();
+            }, 5);
+        }, 5);
+    }
+
+</script>
+
+<script src=""
+</body>
+</html>

Modified: trunk/LayoutTests/platform/mac-wk1/TestExpectations (230781 => 230782)


--- trunk/LayoutTests/platform/mac-wk1/TestExpectations	2018-04-18 21:21:17 UTC (rev 230781)
+++ trunk/LayoutTests/platform/mac-wk1/TestExpectations	2018-04-18 21:21:50 UTC (rev 230782)
@@ -501,6 +501,7 @@
 webkit.org/b/180898 accessibility/mac/AOM-events.html [ Skip ]
 webkit.org/b/183023 accessibility/mac/AOM-events-all.html [ Skip ]
 webkit.org/b/183352 accessibility/ios-simulator/AOM-dismiss-event.html [ Skip ]
+webkit.org/b/184742 accessibility/mac/async-increment-decrement-action.html [ Skip ]
 
 webkit.org/b/182752 accessibility/mac/accessibility-make-first-responder.html [ Skip ]
 

Modified: trunk/Source/WebCore/ChangeLog (230781 => 230782)


--- trunk/Source/WebCore/ChangeLog	2018-04-18 21:21:17 UTC (rev 230781)
+++ trunk/Source/WebCore/ChangeLog	2018-04-18 21:21:50 UTC (rev 230782)
@@ -1,3 +1,23 @@
+2018-04-18  Nan Wang  <n_w...@apple.com>
+
+        AX: [macOS] WebKit hangs when triggering an alert from an AOM increment event
+        https://bugs.webkit.org/show_bug.cgi?id=184742
+
+        Reviewed by Chris Fleizach.
+
+        Made increment and decrement actions on the macOS to be async. So that VoiceOver
+        won't hang indefinitely if performing the actions causes an alert or other modal
+        behaviors.
+
+        Test: accessibility/mac/async-increment-decrement-action.html
+
+        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
+        (-[WebAccessibilityObjectWrapper accessibilityPerformIncrementAction]):
+        (-[WebAccessibilityObjectWrapper _accessibilityPerformIncrementAction]):
+        (-[WebAccessibilityObjectWrapper accessibilityPerformDecrementAction]):
+        (-[WebAccessibilityObjectWrapper _accessibilityPerformDecrementAction]):
+        (-[WebAccessibilityObjectWrapper accessibilityPerformAction:]):
+
 2018-04-18  Youenn Fablet  <you...@apple.com>
 
         MediaResourceLoader should set its fetch destination

Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (230781 => 230782)


--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm	2018-04-18 21:21:17 UTC (rev 230781)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm	2018-04-18 21:21:50 UTC (rev 230782)
@@ -3482,6 +3482,13 @@
 
 - (void)accessibilityPerformIncrementAction
 {
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [self _accessibilityPerformIncrementAction];
+    });
+}
+
+- (void)_accessibilityPerformIncrementAction
+{
     if (![self updateObjectBackingStore])
         return;
     
@@ -3493,6 +3500,13 @@
 
 - (void)accessibilityPerformDecrementAction
 {
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [self _accessibilityPerformDecrementAction];
+    });
+}
+
+- (void)_accessibilityPerformDecrementAction
+{
     if (![self updateObjectBackingStore])
         return;
     
@@ -3573,6 +3587,12 @@
     else if ([action isEqualToString:@"AXSyncPressAction"])
         [self _accessibilityPerformPressAction];
     
+    else if ([action isEqualToString:@"AXSyncIncrementAction"])
+        [self _accessibilityPerformIncrementAction];
+    
+    else if ([action isEqualToString:@"AXSyncDecrementAction"])
+        [self _accessibilityPerformDecrementAction];
+    
     else if ([action isEqualToString:NSAccessibilityShowMenuAction])
         [self accessibilityPerformShowMenuAction];
     

Modified: trunk/Tools/ChangeLog (230781 => 230782)


--- trunk/Tools/ChangeLog	2018-04-18 21:21:17 UTC (rev 230781)
+++ trunk/Tools/ChangeLog	2018-04-18 21:21:50 UTC (rev 230782)
@@ -1,3 +1,23 @@
+2018-04-18  Nan Wang  <n_w...@apple.com>
+
+        AX: [macOS] WebKit hangs when triggering an alert from an AOM increment event
+        https://bugs.webkit.org/show_bug.cgi?id=184742
+
+        Reviewed by Chris Fleizach.
+
+        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
+        (AccessibilityUIElement::increment):
+        (AccessibilityUIElement::decrement):
+        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
+        (WTR::AccessibilityUIElement::asyncIncrement):
+        (WTR::AccessibilityUIElement::asyncDecrement):
+        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
+        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
+        (WTR::AccessibilityUIElement::increment):
+        (WTR::AccessibilityUIElement::decrement):
+        (WTR::AccessibilityUIElement::asyncIncrement):
+        (WTR::AccessibilityUIElement::asyncDecrement):
+
 2018-04-18  Ross Kirsling  <ross.kirsl...@sony.com>
 
         Fix archive step for WinCairo build bot.

Modified: trunk/Tools/DumpRenderTree/mac/AccessibilityUIElementMac.mm (230781 => 230782)


--- trunk/Tools/DumpRenderTree/mac/AccessibilityUIElementMac.mm	2018-04-18 21:21:17 UTC (rev 230781)
+++ trunk/Tools/DumpRenderTree/mac/AccessibilityUIElementMac.mm	2018-04-18 21:21:50 UTC (rev 230782)
@@ -1328,7 +1328,7 @@
 void AccessibilityUIElement::increment()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    [m_element accessibilityPerformAction:NSAccessibilityIncrementAction];
+    [m_element accessibilityPerformAction:@"AXSyncIncrementAction"];
     END_AX_OBJC_EXCEPTIONS
 }
 
@@ -1335,7 +1335,7 @@
 void AccessibilityUIElement::decrement()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    [m_element accessibilityPerformAction:NSAccessibilityDecrementAction];
+    [m_element accessibilityPerformAction:@"AXSyncDecrementAction"];
     END_AX_OBJC_EXCEPTIONS
 }
 

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h (230781 => 230782)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h	2018-04-18 21:21:17 UTC (rev 230781)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h	2018-04-18 21:21:50 UTC (rev 230782)
@@ -100,8 +100,12 @@
     bool dismiss();
 #if PLATFORM(MAC)
     void syncPress();
+    void asyncIncrement();
+    void asyncDecrement();
 #else
     void syncPress() { press(); }
+    void asyncIncrement() { }
+    void asyncDecrement() { };
 #endif
 
     // Attributes - platform-independent implementations

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl (230781 => 230782)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl	2018-04-18 21:21:17 UTC (rev 230781)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl	2018-04-18 21:21:50 UTC (rev 230782)
@@ -115,6 +115,8 @@
     // Actions.
     void increment();
     void decrement();
+    void asyncIncrement();
+    void asyncDecrement();
     void press();
     void syncPress();
     void showMenu();

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm (230781 => 230782)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm	2018-04-18 21:21:17 UTC (rev 230781)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm	2018-04-18 21:21:50 UTC (rev 230782)
@@ -1407,7 +1407,7 @@
 void AccessibilityUIElement::increment()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
-    [m_element accessibilityPerformAction:NSAccessibilityIncrementAction];
+    [m_element accessibilityPerformAction:@"AXSyncIncrementAction"];
     END_AX_OBJC_EXCEPTIONS
 }
 
@@ -1414,6 +1414,20 @@
 void AccessibilityUIElement::decrement()
 {
     BEGIN_AX_OBJC_EXCEPTIONS
+    [m_element accessibilityPerformAction:@"AXSyncDecrementAction"];
+    END_AX_OBJC_EXCEPTIONS
+}
+
+void AccessibilityUIElement::asyncIncrement()
+{
+    BEGIN_AX_OBJC_EXCEPTIONS
+    [m_element accessibilityPerformAction:NSAccessibilityIncrementAction];
+    END_AX_OBJC_EXCEPTIONS
+}
+
+void AccessibilityUIElement::asyncDecrement()
+{
+    BEGIN_AX_OBJC_EXCEPTIONS
     [m_element accessibilityPerformAction:NSAccessibilityDecrementAction];
     END_AX_OBJC_EXCEPTIONS
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to