Title: [267281] trunk
Revision
267281
Author
akeer...@apple.com
Date
2020-09-18 13:34:36 -0700 (Fri, 18 Sep 2020)

Log Message

[macOS] Date/time inputs should focus the next editable component when entering a separator key
https://bugs.webkit.org/show_bug.cgi?id=216661
<rdar://problem/69091856>

Reviewed by Wenson Hsieh.

Source/WebCore:

NSDatePicker focuses the next editable field when entering a separator
key. We should match this behavior to be consistent with the rest of
the system.

* html/shadow/DateTimeFieldElement.cpp:
(WebCore::DateTimeFieldElement::defaultKeyboardEventHandler):

Tools:

* WebKitTestRunner/mac/EventSenderProxy.mm:
(WTR::EventSenderProxy::keyDown):

Add support for colon, semicolon, and comma keys. The keycode values are
taken from the virtual keycode values in HIToolbox/Events.h.

Note that the keycode for colon and semicolon is the same, as there is
no distinct value for colon. This is safe as it matches the _javascript_
behavior.

LayoutTests:

Added new test cases to the existing set of keyboard tests for date/time inputs.

* fast/forms/date/date-editable-components/date-editable-components-keyboard-events-expected.txt:
* fast/forms/date/date-editable-components/date-editable-components-keyboard-events.html:
* fast/forms/datetimelocal/datetimelocal-editable-components/datetimelocal-editable-components-keyboard-events-expected.txt:
* fast/forms/datetimelocal/datetimelocal-editable-components/datetimelocal-editable-components-keyboard-events.html:
* fast/forms/time/time-editable-components/time-editable-components-keyboard-events-expected.txt:
* fast/forms/time/time-editable-components/time-editable-components-keyboard-events.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (267280 => 267281)


--- trunk/LayoutTests/ChangeLog	2020-09-18 20:28:55 UTC (rev 267280)
+++ trunk/LayoutTests/ChangeLog	2020-09-18 20:34:36 UTC (rev 267281)
@@ -1,3 +1,20 @@
+2020-09-18  Aditya Keerthi  <akeer...@apple.com>
+
+        [macOS] Date/time inputs should focus the next editable component when entering a separator key
+        https://bugs.webkit.org/show_bug.cgi?id=216661
+        <rdar://problem/69091856>
+
+        Reviewed by Wenson Hsieh.
+
+        Added new test cases to the existing set of keyboard tests for date/time inputs.
+
+        * fast/forms/date/date-editable-components/date-editable-components-keyboard-events-expected.txt:
+        * fast/forms/date/date-editable-components/date-editable-components-keyboard-events.html:
+        * fast/forms/datetimelocal/datetimelocal-editable-components/datetimelocal-editable-components-keyboard-events-expected.txt:
+        * fast/forms/datetimelocal/datetimelocal-editable-components/datetimelocal-editable-components-keyboard-events.html:
+        * fast/forms/time/time-editable-components/time-editable-components-keyboard-events-expected.txt:
+        * fast/forms/time/time-editable-components/time-editable-components-keyboard-events.html:
+
 2020-09-18  Chris Dumez  <cdu...@apple.com>
 
         Import AudioContext / AudioListener / AudioNode / AudioParam layout tests from Blink

Modified: trunk/LayoutTests/fast/forms/date/date-editable-components/date-editable-components-keyboard-events-expected.txt (267280 => 267281)


--- trunk/LayoutTests/fast/forms/date/date-editable-components/date-editable-components-keyboard-events-expected.txt	2020-09-18 20:28:55 UTC (rev 267280)
+++ trunk/LayoutTests/fast/forms/date/date-editable-components/date-editable-components-keyboard-events-expected.txt	2020-09-18 20:34:36 UTC (rev 267281)
@@ -35,6 +35,17 @@
 PASS changeEventsFired is 3
 PASS inputEventsFired is 3
 
+Advance field keys
+PASS input.value is "2020-06-02"
+PASS input.value is "2020-06-03"
+PASS input.value is "2020-06-04"
+PASS input.value is "2020-06-05"
+PASS input.value is "2020-06-06"
+PASS input.value is "2020-06-07"
+PASS input.value is "2020-06-08"
+PASS changeEventsFired is 7
+PASS inputEventsFired is 7
+
 Up/Down arrow keys
 PASS input.value is "2020-01-20"
 PASS input.value is "2020-02-20"

Modified: trunk/LayoutTests/fast/forms/date/date-editable-components/date-editable-components-keyboard-events.html (267280 => 267281)


--- trunk/LayoutTests/fast/forms/date/date-editable-components/date-editable-components-keyboard-events.html	2020-09-18 20:28:55 UTC (rev 267280)
+++ trunk/LayoutTests/fast/forms/date/date-editable-components/date-editable-components-keyboard-events.html	2020-09-18 20:34:36 UTC (rev 267281)
@@ -130,6 +130,37 @@
     shouldBe("changeEventsFired", "3");
     shouldBe("inputEventsFired", "3");
 
+    beginTest("Advance field keys", "2020-06-05");         // [06]/01/2020
+    UIHelper.keyDown(" ");                                 // -> 06/[01]/2020
+    UIHelper.keyDown("2");                                 // -> 06/[02]/2020
+    shouldBeEqualToString("input.value", "2020-06-02");
+    UIHelper.keyDown("leftArrow");                         // -> [06]/02/2020
+    UIHelper.keyDown("/");                                 // -> 06/[02]/2020
+    UIHelper.keyDown("3");                                 // -> 06/[03]/2020
+    shouldBeEqualToString("input.value", "2020-06-03");
+    UIHelper.keyDown("leftArrow");                         // -> [06]/03/2020
+    UIHelper.keyDown("-");                                 // -> 06/[03]/2020
+    UIHelper.keyDown("4");                                 // -> 06/[04]/2020
+    shouldBeEqualToString("input.value", "2020-06-04");
+    UIHelper.keyDown("leftArrow");                         // -> [06]/04/2020
+    UIHelper.keyDown(".");                                 // -> 06/[04]/2020
+    UIHelper.keyDown("5");                                 // -> 06/[05]/2020
+    shouldBeEqualToString("input.value", "2020-06-05");
+    UIHelper.keyDown("leftArrow");                         // -> [06]/05/2020
+    UIHelper.keyDown(":");                                 // -> 06/[05]/2020
+    UIHelper.keyDown("6");                                 // -> 06/[06]/2020
+    shouldBeEqualToString("input.value", "2020-06-06");
+    UIHelper.keyDown("leftArrow");                         // -> [06]/06/2020
+    UIHelper.keyDown(";");                                 // -> 06/[06]/2020
+    UIHelper.keyDown("7");                                 // -> 06/[07]/2020
+    shouldBeEqualToString("input.value", "2020-06-07");
+    UIHelper.keyDown("leftArrow");                         // -> [06]/07/2020
+    UIHelper.keyDown(",");                                 // -> 06/[07]/2020
+    UIHelper.keyDown("8");                                 // -> 06/[08]/2020
+    shouldBeEqualToString("input.value", "2020-06-08");
+    shouldBe("changeEventsFired", "7");
+    shouldBe("inputEventsFired", "7");
+
     beginTest("Up/Down arrow keys", "2020-12-20");         // [12]/20/2020
     UIHelper.keyDown("upArrow");                           // [01]/20/2020
     shouldBeEqualToString("input.value", "2020-01-20");

Modified: trunk/LayoutTests/fast/forms/datetimelocal/datetimelocal-editable-components/datetimelocal-editable-components-keyboard-events-expected.txt (267280 => 267281)


--- trunk/LayoutTests/fast/forms/datetimelocal/datetimelocal-editable-components/datetimelocal-editable-components-keyboard-events-expected.txt	2020-09-18 20:28:55 UTC (rev 267280)
+++ trunk/LayoutTests/fast/forms/datetimelocal/datetimelocal-editable-components/datetimelocal-editable-components-keyboard-events-expected.txt	2020-09-18 20:34:36 UTC (rev 267281)
@@ -37,6 +37,17 @@
 PASS changeEventsFired is 11
 PASS inputEventsFired is 11
 
+Advance field keys
+PASS input.value is "2020-06-02T16:27"
+PASS input.value is "2020-06-03T16:27"
+PASS input.value is "2020-06-04T16:27"
+PASS input.value is "2020-06-05T16:27"
+PASS input.value is "2020-06-06T16:27"
+PASS input.value is "2020-06-07T16:27"
+PASS input.value is "2020-06-08T16:27"
+PASS changeEventsFired is 7
+PASS inputEventsFired is 7
+
 Up/Down arrow keys
 PASS input.value is "2020-01-20T23:59"
 PASS input.value is "2020-02-20T23:59"

Modified: trunk/LayoutTests/fast/forms/datetimelocal/datetimelocal-editable-components/datetimelocal-editable-components-keyboard-events.html (267280 => 267281)


--- trunk/LayoutTests/fast/forms/datetimelocal/datetimelocal-editable-components/datetimelocal-editable-components-keyboard-events.html	2020-09-18 20:28:55 UTC (rev 267280)
+++ trunk/LayoutTests/fast/forms/datetimelocal/datetimelocal-editable-components/datetimelocal-editable-components-keyboard-events.html	2020-09-18 20:34:36 UTC (rev 267281)
@@ -141,6 +141,37 @@
     shouldBe("changeEventsFired", "11");
     shouldBe("inputEventsFired", "11");
 
+    beginTest("Advance field keys", "2020-06-05T16:27");        // [06]/01/2020 04:27 PM
+    UIHelper.keyDown(" ");                                      // -> 06/[01]/2020 04:27 PM
+    UIHelper.keyDown("2");                                      // -> 06/[02]/2020 04:27 PM
+    shouldBeEqualToString("input.value", "2020-06-02T16:27");
+    UIHelper.keyDown("leftArrow");                              // -> [06]/02/2020 04:27 PM
+    UIHelper.keyDown("/");                                      // -> 06/[02]/2020 04:27 PM
+    UIHelper.keyDown("3");                                      // -> 06/[03]/2020 04:27 PM
+    shouldBeEqualToString("input.value", "2020-06-03T16:27");
+    UIHelper.keyDown("leftArrow");                              // -> [06]/03/2020 04:27 PM
+    UIHelper.keyDown("-");                                      // -> 06/[03]/2020 04:27 PM
+    UIHelper.keyDown("4");                                      // -> 06/[04]/2020 04:27 PM
+    shouldBeEqualToString("input.value", "2020-06-04T16:27");
+    UIHelper.keyDown("leftArrow");                              // -> [06]/04/2020 04:27 PM
+    UIHelper.keyDown(".");                                      // -> 06/[04]/2020 04:27 PM
+    UIHelper.keyDown("5");                                      // -> 06/[05]/2020 04:27 PM
+    shouldBeEqualToString("input.value", "2020-06-05T16:27");
+    UIHelper.keyDown("leftArrow");                              // -> [06]/05/2020 04:27 PM
+    UIHelper.keyDown(":");                                      // -> 06/[05]/2020 04:27 PM
+    UIHelper.keyDown("6");                                      // -> 06/[06]/2020 04:27 PM
+    shouldBeEqualToString("input.value", "2020-06-06T16:27");
+    UIHelper.keyDown("leftArrow");                              // -> [06]/06/2020 04:27 PM
+    UIHelper.keyDown(";");                                      // -> 06/[06]/2020 04:27 PM
+    UIHelper.keyDown("7");                                      // -> 06/[07]/2020 04:27 PM
+    shouldBeEqualToString("input.value", "2020-06-07T16:27");
+    UIHelper.keyDown("leftArrow");                              // -> [06]/07/2020 04:27 PM
+    UIHelper.keyDown(",");                                      // -> 06/[07]/2020 04:27 PM
+    UIHelper.keyDown("8");                                      // -> 06/[08]/2020 04:27 PM
+    shouldBeEqualToString("input.value", "2020-06-08T16:27");
+    shouldBe("changeEventsFired", "7");
+    shouldBe("inputEventsFired", "7");
+
     beginTest("Up/Down arrow keys", "2020-12-20T23:59");        // [12]/20/2020 11:59 PM
     UIHelper.keyDown("upArrow");                                // -> [01]/20/2020 11:59 PM
     shouldBeEqualToString("input.value", "2020-01-20T23:59");

Modified: trunk/LayoutTests/fast/forms/time/time-editable-components/time-editable-components-keyboard-events-expected.txt (267280 => 267281)


--- trunk/LayoutTests/fast/forms/time/time-editable-components/time-editable-components-keyboard-events-expected.txt	2020-09-18 20:28:55 UTC (rev 267280)
+++ trunk/LayoutTests/fast/forms/time/time-editable-components/time-editable-components-keyboard-events-expected.txt	2020-09-18 20:34:36 UTC (rev 267281)
@@ -29,6 +29,17 @@
 PASS changeEventsFired is 5
 PASS inputEventsFired is 5
 
+Advance field keys
+PASS input.value is "01:02"
+PASS input.value is "01:03"
+PASS input.value is "01:04"
+PASS input.value is "01:05"
+PASS input.value is "01:06"
+PASS input.value is "01:07"
+PASS input.value is "01:08"
+PASS changeEventsFired is 7
+PASS inputEventsFired is 7
+
 Up/Down arrow keys
 PASS input.value is "12:59"
 PASS input.value is "13:59"

Modified: trunk/LayoutTests/fast/forms/time/time-editable-components/time-editable-components-keyboard-events.html (267280 => 267281)


--- trunk/LayoutTests/fast/forms/time/time-editable-components/time-editable-components-keyboard-events.html	2020-09-18 20:28:55 UTC (rev 267280)
+++ trunk/LayoutTests/fast/forms/time/time-editable-components/time-editable-components-keyboard-events.html	2020-09-18 20:34:36 UTC (rev 267281)
@@ -93,6 +93,37 @@
     shouldBe("changeEventsFired", "5");
     shouldBe("inputEventsFired", "5");
 
+    beginTest("Advance field keys", "01:28");              // [01]:28 AM
+    UIHelper.keyDown(" ");                                 // -> 01:[28] AM
+    UIHelper.keyDown("2");                                 // -> 01:[02] AM
+    shouldBeEqualToString("input.value", "01:02");
+    UIHelper.keyDown("leftArrow");                         // -> [01]:02 AM
+    UIHelper.keyDown("/");                                 // -> 01:[02] AM
+    UIHelper.keyDown("3");                                 // -> 01:[03] AM
+    shouldBeEqualToString("input.value", "01:03");
+    UIHelper.keyDown("leftArrow");                         // -> [01]:03 AM
+    UIHelper.keyDown("-");                                 // -> 01:[03] AM
+    UIHelper.keyDown("4");                                 // -> 01:[04] AM
+    shouldBeEqualToString("input.value", "01:04");
+    UIHelper.keyDown("leftArrow");                         // -> [01]:04 AM
+    UIHelper.keyDown(".");                                 // -> 01:[04] AM
+    UIHelper.keyDown("5");                                 // -> 01:[05] AM
+    shouldBeEqualToString("input.value", "01:05");
+    UIHelper.keyDown("leftArrow");                         // -> [01]:05 AM
+    UIHelper.keyDown(":");                                 // -> 01:[05] AM
+    UIHelper.keyDown("6");                                 // -> 01:[06] AM
+    shouldBeEqualToString("input.value", "01:06");
+    UIHelper.keyDown("leftArrow");                         // -> [01]:06 AM
+    UIHelper.keyDown(";");                                 // -> 01:[06] AM
+    UIHelper.keyDown("7");                                 // -> 01:[07] AM
+    shouldBeEqualToString("input.value", "01:07");
+    UIHelper.keyDown("leftArrow");                         // -> [01]:07 AM
+    UIHelper.keyDown(",");                                 // -> 01:[07] AM
+    UIHelper.keyDown("8");                                 // -> 01:[08] AM
+    shouldBeEqualToString("input.value", "01:08");
+    shouldBe("changeEventsFired", "7");
+    shouldBe("inputEventsFired", "7");
+
     beginTest("Up/Down arrow keys", "23:59");              // [11]:59 PM
     UIHelper.keyDown("upArrow");                           // -> [12]:59 PM
     shouldBeEqualToString("input.value", "12:59");

Modified: trunk/Source/WebCore/ChangeLog (267280 => 267281)


--- trunk/Source/WebCore/ChangeLog	2020-09-18 20:28:55 UTC (rev 267280)
+++ trunk/Source/WebCore/ChangeLog	2020-09-18 20:34:36 UTC (rev 267281)
@@ -1,3 +1,18 @@
+2020-09-18  Aditya Keerthi  <akeer...@apple.com>
+
+        [macOS] Date/time inputs should focus the next editable component when entering a separator key
+        https://bugs.webkit.org/show_bug.cgi?id=216661
+        <rdar://problem/69091856>
+
+        Reviewed by Wenson Hsieh.
+
+        NSDatePicker focuses the next editable field when entering a separator
+        key. We should match this behavior to be consistent with the rest of
+        the system.
+
+        * html/shadow/DateTimeFieldElement.cpp:
+        (WebCore::DateTimeFieldElement::defaultKeyboardEventHandler):
+
 2020-09-18  Said Abou-Hallawa  <sabouhall...@apple.com>
 
         REGRESSION(r267137): PaintFrequencyTracker needs to track all the painting

Modified: trunk/Source/WebCore/html/shadow/DateTimeFieldElement.cpp (267280 => 267281)


--- trunk/Source/WebCore/html/shadow/DateTimeFieldElement.cpp	2020-09-18 20:28:55 UTC (rev 267280)
+++ trunk/Source/WebCore/html/shadow/DateTimeFieldElement.cpp	2020-09-18 20:34:36 UTC (rev 267281)
@@ -85,6 +85,7 @@
         return;
 
     auto key = keyboardEvent.keyIdentifier();
+    auto code = keyboardEvent.code();
 
     if (key == "Left" && m_fieldOwner && m_fieldOwner->focusOnPreviousField(*this)) {
         keyboardEvent.setDefaultHandled();
@@ -91,7 +92,8 @@
         return;
     }
 
-    if (key == "Right" && m_fieldOwner && m_fieldOwner->focusOnNextField(*this)) {
+    if ((key == "Right" || code == "Comma" || code == "Minus" || code == "Period" || code == "Space" || code == "Slash" || code == "Semicolon")
+        && m_fieldOwner && m_fieldOwner->focusOnNextField(*this)) {
         keyboardEvent.setDefaultHandled();
         return;
     }

Modified: trunk/Tools/ChangeLog (267280 => 267281)


--- trunk/Tools/ChangeLog	2020-09-18 20:28:55 UTC (rev 267280)
+++ trunk/Tools/ChangeLog	2020-09-18 20:34:36 UTC (rev 267281)
@@ -1,3 +1,21 @@
+2020-09-18  Aditya Keerthi  <akeer...@apple.com>
+
+        [macOS] Date/time inputs should focus the next editable component when entering a separator key
+        https://bugs.webkit.org/show_bug.cgi?id=216661
+        <rdar://problem/69091856>
+
+        Reviewed by Wenson Hsieh.
+
+        * WebKitTestRunner/mac/EventSenderProxy.mm:
+        (WTR::EventSenderProxy::keyDown):
+
+        Add support for colon, semicolon, and comma keys. The keycode values are
+        taken from the virtual keycode values in HIToolbox/Events.h.
+
+        Note that the keycode for colon and semicolon is the same, as there is
+        no distinct value for colon. This is safe as it matches the _javascript_
+        behavior.
+
 2020-09-18  Alex Christensen  <achristen...@webkit.org>
 
         WKWebView._tryClose should return whether it succeeded or not

Modified: trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm (267280 => 267281)


--- trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm	2020-09-18 20:28:55 UTC (rev 267280)
+++ trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm	2020-09-18 20:34:36 UTC (rev 267281)
@@ -746,6 +746,12 @@
         keyCode = 0x0E;
     else if ([character isEqualToString:@"\x1b"])
         keyCode = 0x1B;
+    else if ([character isEqualToString:@":"])
+        keyCode = 0x29;
+    else if ([character isEqualToString:@";"])
+        keyCode = 0x29;
+    else if ([character isEqualToString:@","])
+        keyCode = 0x2B;
 
     KeyMappingEntry table[] = {
         {0x2F, 0x41, '.', nil},
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to