Title: [268717] trunk
Revision
268717
Author
carlo...@webkit.org
Date
2020-10-20 02:14:35 -0700 (Tue, 20 Oct 2020)

Log Message

WebDriver: add support for right variations of virtual keys
https://bugs.webkit.org/show_bug.cgi?id=217819

Reviewed by Brian Burg.

Source/WebDriver:

The browser is currently receiving the virtual keys already normalized, but WebDriver expects the key code to be
the actual one, not the normalized one. We need to send the raw virtual keys to the browser and do the
normalization there, but use the raw one when synthesizing the events.

Fixes: imported/w3c/webdriver/tests/perform_actions/key_events.py::test_modifier_key_sends_correct_events[\ue009-CONTROL]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_modifier_key_sends_correct_events[\ue008-SHIFT]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_modifier_key_sends_correct_events[\ue052-R_ALT]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[CONTROL-expected5]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_ALT-expected48]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_ARROWDOWN-expected49]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_ARROWLEFT-expected50]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_ARROWRIGHT-expected51]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_ARROWUP-expected52]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_DELETE-expected54]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_END-expected55]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_HOME-expected56]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_INSERT-expected57]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_PAGEDOWN-expected59]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_PAGEUP-expected60]
       imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[SHIFT-expected64]

* Session.cpp:
(WebDriver::Session::virtualKeyForKey): Do not normalize the virtual keys.

Source/WebKit:

Instead of using a HashSet the pressed virtual keys are now stored in a HashMap where the key is the normalized
virtual key and the value is the raw virtual key.

* UIProcess/Automation/Automation.json:
* UIProcess/Automation/SimulatedInputDispatcher.cpp:
(WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
* UIProcess/Automation/SimulatedInputDispatcher.h:
* UIProcess/Automation/WebAutomationSession.cpp:
(WebKit::normalizedVirtualKey):
(WebKit::WebAutomationSession::performInteractionSequence):
* UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
(WebKit::keyCodeForVirtualKey):
(WebKit::modifiersForKeyCode):
* UIProcess/Automation/mac/WebAutomationSessionMac.mm:
(WebKit::keyCodeForVirtualKey):
* UIProcess/Automation/wpe/WebAutomationSessionWPE.cpp:
(WebKit::keyCodeForVirtualKey):
(WebKit::modifiersForKeyCode):

WebDriverTests:

Remove expectations for tests that are now passing.

* TestExpectations.json:

Modified Paths

Diff

Modified: trunk/Source/WebDriver/ChangeLog (268716 => 268717)


--- trunk/Source/WebDriver/ChangeLog	2020-10-20 08:00:55 UTC (rev 268716)
+++ trunk/Source/WebDriver/ChangeLog	2020-10-20 09:14:35 UTC (rev 268717)
@@ -1,3 +1,34 @@
+2020-10-20  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        WebDriver: add support for right variations of virtual keys
+        https://bugs.webkit.org/show_bug.cgi?id=217819
+
+        Reviewed by Brian Burg.
+
+        The browser is currently receiving the virtual keys already normalized, but WebDriver expects the key code to be
+        the actual one, not the normalized one. We need to send the raw virtual keys to the browser and do the
+        normalization there, but use the raw one when synthesizing the events.
+
+        Fixes: imported/w3c/webdriver/tests/perform_actions/key_events.py::test_modifier_key_sends_correct_events[\ue009-CONTROL]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_modifier_key_sends_correct_events[\ue008-SHIFT]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_modifier_key_sends_correct_events[\ue052-R_ALT]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[CONTROL-expected5]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_ALT-expected48]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_ARROWDOWN-expected49]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_ARROWLEFT-expected50]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_ARROWRIGHT-expected51]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_ARROWUP-expected52]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_DELETE-expected54]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_END-expected55]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_HOME-expected56]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_INSERT-expected57]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_PAGEDOWN-expected59]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[R_PAGEUP-expected60]
+               imported/w3c/webdriver/tests/perform_actions/key_events.py::test_special_key_sends_keydown[SHIFT-expected64]
+
+        * Session.cpp:
+        (WebDriver::Session::virtualKeyForKey): Do not normalize the virtual keys.
+
 2020-10-02  Carlos Garcia Campos  <cgar...@igalia.com>
 
         WebDriver: add support for same site cookies

Modified: trunk/Source/WebDriver/Session.cpp (268716 => 268717)


--- trunk/Source/WebDriver/Session.cpp	2020-10-20 08:00:55 UTC (rev 268716)
+++ trunk/Source/WebDriver/Session.cpp	2020-10-20 09:14:35 UTC (rev 268717)
@@ -1934,17 +1934,23 @@
     case 0xE007U:
         return "Enter"_s;
     case 0xE008U:
+        modifier = KeyModifier::Shift;
+        return "Shift"_s;
     case 0xE050U:
         modifier = KeyModifier::Shift;
-        return "Shift"_s;
+        return "ShiftRight"_s;
     case 0xE009U:
+        modifier = KeyModifier::Control;
+        return "Control"_s;
     case 0xE051U:
         modifier = KeyModifier::Control;
-        return "Control"_s;
+        return "ControlRight"_s;
     case 0xE00AU:
+        modifier = KeyModifier::Alternate;
+        return "Alternate"_s;
     case 0xE052U:
         modifier = KeyModifier::Alternate;
-        return "Alternate"_s;
+        return "AlternateRight"_s;
     case 0xE00BU:
         return "Pause"_s;
     case 0xE00CU:
@@ -1952,35 +1958,45 @@
     case 0xE00DU:
         return "Space"_s;
     case 0xE00EU:
+        return "PageUp"_s;
     case 0xE054U:
-        return "PageUp"_s;
+        return "PageUpRight"_s;
     case 0xE00FU:
+        return "PageDown"_s;
     case 0xE055U:
-        return "PageDown"_s;
+        return "PageDownRight"_s;
     case 0xE010U:
+        return "End"_s;
     case 0xE056U:
-        return "End"_s;
+        return "EndRight"_s;
     case 0xE011U:
+        return "Home"_s;
     case 0xE057U:
-        return "Home"_s;
+        return "HomeRight"_s;
     case 0xE012U:
+        return "LeftArrow"_s;
     case 0xE058U:
-        return "LeftArrow"_s;
+        return "LeftArrowRight"_s;
     case 0xE013U:
+        return "UpArrow"_s;
     case 0xE059U:
-        return "UpArrow"_s;
+        return "UpArrowRight"_s;
     case 0xE014U:
+        return "RightArrow"_s;
     case 0xE05AU:
-        return "RightArrow"_s;
+        return "RightArrowRight"_s;
     case 0xE015U:
+        return "DownArrow"_s;
     case 0xE05BU:
-        return "DownArrow"_s;
+        return "DownArrowRight"_s;
     case 0xE016U:
+        return "Insert"_s;
     case 0xE05CU:
-        return "Insert"_s;
+        return "InsertRight"_s;
     case 0xE017U:
+        return "Delete"_s;
     case 0xE05DU:
-        return "Delete"_s;
+        return "DeleteRight"_s;
     case 0xE018U:
         return "Semicolon"_s;
     case 0xE019U:
@@ -2042,9 +2058,11 @@
     case 0xE03CU:
         return "Function12"_s;
     case 0xE03DU:
+        modifier = KeyModifier::Meta;
+        return "Meta"_s;
     case 0xE053U:
         modifier = KeyModifier::Meta;
-        return "Meta"_s;
+        return "MetaRight"_s;
     default:
         break;
     }

Modified: trunk/Source/WebKit/ChangeLog (268716 => 268717)


--- trunk/Source/WebKit/ChangeLog	2020-10-20 08:00:55 UTC (rev 268716)
+++ trunk/Source/WebKit/ChangeLog	2020-10-20 09:14:35 UTC (rev 268717)
@@ -1,3 +1,29 @@
+2020-10-20  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        WebDriver: add support for right variations of virtual keys
+        https://bugs.webkit.org/show_bug.cgi?id=217819
+
+        Reviewed by Brian Burg.
+
+        Instead of using a HashSet the pressed virtual keys are now stored in a HashMap where the key is the normalized
+        virtual key and the value is the raw virtual key.
+
+        * UIProcess/Automation/Automation.json:
+        * UIProcess/Automation/SimulatedInputDispatcher.cpp:
+        (WebKit::SimulatedInputDispatcher::transitionInputSourceToState):
+        * UIProcess/Automation/SimulatedInputDispatcher.h:
+        * UIProcess/Automation/WebAutomationSession.cpp:
+        (WebKit::normalizedVirtualKey):
+        (WebKit::WebAutomationSession::performInteractionSequence):
+        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
+        (WebKit::keyCodeForVirtualKey):
+        (WebKit::modifiersForKeyCode):
+        * UIProcess/Automation/mac/WebAutomationSessionMac.mm:
+        (WebKit::keyCodeForVirtualKey):
+        * UIProcess/Automation/wpe/WebAutomationSessionWPE.cpp:
+        (WebKit::keyCodeForVirtualKey):
+        (WebKit::modifiersForKeyCode):
+
 2020-10-19  Peng Liu  <peng.l...@apple.com>
 
         Two feature flag names are incorrect

Modified: trunk/Source/WebKit/UIProcess/Automation/Automation.json (268716 => 268717)


--- trunk/Source/WebKit/UIProcess/Automation/Automation.json	2020-10-20 08:00:55 UTC (rev 268716)
+++ trunk/Source/WebKit/UIProcess/Automation/Automation.json	2020-10-20 09:14:35 UTC (rev 268717)
@@ -149,9 +149,13 @@
             "description": "Enumerates different platform-independent virtual keys on a physical keyboard whose input via keyboard may or may not produce characters.",
             "enum": [
                 "Shift",
+                "ShiftRight",
                 "Control",
+                "ControlRight",
                 "Alternate",
+                "AlternateRight",
                 "Meta",
+                "MetaRight",
                 "Command",
                 "Cancel",
                 "Help",
@@ -162,15 +166,25 @@
                 "Pause",
                 "Escape",
                 "PageUp",
+                "PageUpRight",
                 "PageDown",
+                "PageDownRight",
                 "End",
+                "EndRight",
                 "Home",
+                "HomeRight",
                 "LeftArrow",
+                "LeftArrowRight",
                 "UpArrow",
+                "UpArrowRight",
                 "RightArrow",
+                "RightArrowRight",
                 "DownArrow",
+                "DownArrowRight",
                 "Insert",
+                "InsertRight",
                 "Delete",
+                "DeleteRight",
                 "Space",
                 "Semicolon",
                 "Equals",

Modified: trunk/Source/WebKit/UIProcess/Automation/SimulatedInputDispatcher.cpp (268716 => 268717)


--- trunk/Source/WebKit/UIProcess/Automation/SimulatedInputDispatcher.cpp	2020-10-20 08:00:55 UTC (rev 268716)
+++ trunk/Source/WebKit/UIProcess/Automation/SimulatedInputDispatcher.cpp	2020-10-20 09:14:35 UTC (rev 268717)
@@ -349,31 +349,31 @@
             m_client.simulateKeyboardInteraction(m_page, KeyboardInteraction::KeyRelease, a.pressedCharKey.value(), WTFMove(eventDispatchFinished));
         } else if (a.pressedVirtualKeys != b.pressedVirtualKeys) {
             bool simulatedAnInteraction = false;
-            for (VirtualKey key : b.pressedVirtualKeys) {
-                if (!a.pressedVirtualKeys.contains(key)) {
+            for (const auto& iter : b.pressedVirtualKeys) {
+                if (!a.pressedVirtualKeys.contains(iter.key)) {
                     ASSERT_WITH_MESSAGE(!simulatedAnInteraction, "Only one VirtualKey may differ at a time between two input source states.");
                     if (simulatedAnInteraction)
                         continue;
                     simulatedAnInteraction = true;
 #if !LOG_DISABLED
-                    String virtualKeyName = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(key);
+                    String virtualKeyName = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(iter.value);
                     LOG(Automation, "SimulatedInputDispatcher[%p]: simulating KeyPress[key=%s] for transition to %d.%d", this, virtualKeyName.utf8().data(), m_keyframeIndex, m_inputSourceStateIndex);
 #endif
-                    m_client.simulateKeyboardInteraction(m_page, KeyboardInteraction::KeyPress, key, WTFMove(eventDispatchFinished));
+                    m_client.simulateKeyboardInteraction(m_page, KeyboardInteraction::KeyPress, iter.value, WTFMove(eventDispatchFinished));
                 }
             }
 
-            for (VirtualKey key : a.pressedVirtualKeys) {
-                if (!b.pressedVirtualKeys.contains(key)) {
+            for (const auto& iter : a.pressedVirtualKeys) {
+                if (!b.pressedVirtualKeys.contains(iter.key)) {
                     ASSERT_WITH_MESSAGE(!simulatedAnInteraction, "Only one VirtualKey may differ at a time between two input source states.");
                     if (simulatedAnInteraction)
                         continue;
                     simulatedAnInteraction = true;
 #if !LOG_DISABLED
-                    String virtualKeyName = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(key);
+                    String virtualKeyName = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(iter.value);
                     LOG(Automation, "SimulatedInputDispatcher[%p]: simulating KeyRelease[key=%s] for transition to %d.%d", this, virtualKeyName.utf8().data(), m_keyframeIndex, m_inputSourceStateIndex);
 #endif
-                    m_client.simulateKeyboardInteraction(m_page, KeyboardInteraction::KeyRelease, key, WTFMove(eventDispatchFinished));
+                    m_client.simulateKeyboardInteraction(m_page, KeyboardInteraction::KeyRelease, iter.value, WTFMove(eventDispatchFinished));
                 }
             }
         } else

Modified: trunk/Source/WebKit/UIProcess/Automation/SimulatedInputDispatcher.h (268716 => 268717)


--- trunk/Source/WebKit/UIProcess/Automation/SimulatedInputDispatcher.h	2020-10-20 08:00:55 UTC (rev 268716)
+++ trunk/Source/WebKit/UIProcess/Automation/SimulatedInputDispatcher.h	2020-10-20 09:14:35 UTC (rev 268717)
@@ -56,7 +56,7 @@
 
 using KeyboardInteraction = Inspector::Protocol::Automation::KeyboardInteractionType;
 using VirtualKey = Inspector::Protocol::Automation::VirtualKey;
-using VirtualKeySet = HashSet<VirtualKey, WTF::IntHash<VirtualKey>, WTF::StrongEnumHashTraits<VirtualKey>>;
+using VirtualKeyMap = HashMap<VirtualKey, VirtualKey, WTF::IntHash<VirtualKey>, WTF::StrongEnumHashTraits<VirtualKey>>;
 using CharKey = char; // For WebDriver, this only needs to support ASCII characters on 102-key keyboard.
 using MouseButton = Inspector::Protocol::Automation::MouseButton;
 using MouseInteraction = Inspector::Protocol::Automation::MouseInteraction;
@@ -77,7 +77,7 @@
 
 struct SimulatedInputSourceState {
     Optional<CharKey> pressedCharKey;
-    VirtualKeySet pressedVirtualKeys;
+    VirtualKeyMap pressedVirtualKeys;
     Optional<MouseButton> pressedMouseButton;
     Optional<MouseMoveOrigin> origin;
     Optional<String> nodeHandle;

Modified: trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp (268716 => 268717)


--- trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp	2020-10-20 08:00:55 UTC (rev 268716)
+++ trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp	2020-10-20 09:14:35 UTC (rev 268717)
@@ -1860,6 +1860,46 @@
 }
 #endif // ENABLE(WEBDRIVER_ACTIONS_API)
 
+#if ENABLE(WEBDRIVER_ACTIONS_API)
+// §15.4.2 Keyboard actions
+// https://w3c.github.io/webdriver/#dfn-normalised-key-value
+static VirtualKey normalizedVirtualKey(VirtualKey key)
+{
+    switch (key) {
+    case Inspector::Protocol::Automation::VirtualKey::ControlRight:
+        return Inspector::Protocol::Automation::VirtualKey::Control;
+    case Inspector::Protocol::Automation::VirtualKey::ShiftRight:
+        return Inspector::Protocol::Automation::VirtualKey::Shift;
+    case Inspector::Protocol::Automation::VirtualKey::AlternateRight:
+        return Inspector::Protocol::Automation::VirtualKey::Alternate;
+    case Inspector::Protocol::Automation::VirtualKey::MetaRight:
+        return Inspector::Protocol::Automation::VirtualKey::Meta;
+    case Inspector::Protocol::Automation::VirtualKey::DownArrowRight:
+        return Inspector::Protocol::Automation::VirtualKey::DownArrow;
+    case Inspector::Protocol::Automation::VirtualKey::UpArrowRight:
+        return Inspector::Protocol::Automation::VirtualKey::UpArrow;
+    case Inspector::Protocol::Automation::VirtualKey::LeftArrowRight:
+        return Inspector::Protocol::Automation::VirtualKey::LeftArrow;
+    case Inspector::Protocol::Automation::VirtualKey::RightArrowRight:
+        return Inspector::Protocol::Automation::VirtualKey::RightArrow;
+    case Inspector::Protocol::Automation::VirtualKey::PageUpRight:
+        return Inspector::Protocol::Automation::VirtualKey::PageUp;
+    case Inspector::Protocol::Automation::VirtualKey::PageDownRight:
+        return Inspector::Protocol::Automation::VirtualKey::PageDown;
+    case Inspector::Protocol::Automation::VirtualKey::EndRight:
+        return Inspector::Protocol::Automation::VirtualKey::End;
+    case Inspector::Protocol::Automation::VirtualKey::HomeRight:
+        return Inspector::Protocol::Automation::VirtualKey::Home;
+    case Inspector::Protocol::Automation::VirtualKey::DeleteRight:
+        return Inspector::Protocol::Automation::VirtualKey::Delete;
+    case Inspector::Protocol::Automation::VirtualKey::InsertRight:
+        return Inspector::Protocol::Automation::VirtualKey::Insert;
+    default:
+        return key;
+    }
+}
+#endif // ENABLE(WEBDRIVER_ACTIONS_API)
+
 void WebAutomationSession::performInteractionSequence(const Inspector::Protocol::Automation::BrowsingContextHandle& handle, const Inspector::Protocol::Automation::FrameHandle& frameHandle, Ref<JSON::Array>&& inputSources, Ref<JSON::Array>&& steps, Ref<WebAutomationSession::PerformInteractionSequenceCallback>&& callback)
 {
     // This command implements WebKit support for §17.5 Perform Actions.
@@ -1971,7 +2011,7 @@
                 sourceState.pressedCharKey = pressedCharKeyString.characterAt(0);
 
             if (auto pressedVirtualKeysArray = stateObject->getArray("pressedVirtualKeys"_s)) {
-                VirtualKeySet pressedVirtualKeys { };
+                VirtualKeyMap pressedVirtualKeys;
 
                 for (auto it = pressedVirtualKeysArray->begin(); it != pressedVirtualKeysArray->end(); ++it) {
                     auto pressedVirtualKeyString = (*it)->asString();
@@ -1982,7 +2022,7 @@
                     if (!parsedVirtualKey)
                         ASYNC_FAIL_WITH_PREDEFINED_ERROR_AND_DETAILS(InvalidParameter, "Encountered an unknown virtual key value.");
                     else
-                        pressedVirtualKeys.add(parsedVirtualKey.value());
+                        pressedVirtualKeys.add(normalizedVirtualKey(parsedVirtualKey.value()), parsedVirtualKey.value());
                 }
 
                 sourceState.pressedVirtualKeys = pressedVirtualKeys;

Modified: trunk/Source/WebKit/UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp (268716 => 268717)


--- trunk/Source/WebKit/UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp	2020-10-20 08:00:55 UTC (rev 268716)
+++ trunk/Source/WebKit/UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp	2020-10-20 09:14:35 UTC (rev 268717)
@@ -122,12 +122,20 @@
 {
     switch (key) {
     case Inspector::Protocol::Automation::VirtualKey::Shift:
+        return GDK_KEY_Shift_L;
+    case Inspector::Protocol::Automation::VirtualKey::ShiftRight:
         return GDK_KEY_Shift_R;
     case Inspector::Protocol::Automation::VirtualKey::Control:
+        return GDK_KEY_Control_L;
+    case Inspector::Protocol::Automation::VirtualKey::ControlRight:
         return GDK_KEY_Control_R;
     case Inspector::Protocol::Automation::VirtualKey::Alternate:
         return GDK_KEY_Alt_L;
+    case Inspector::Protocol::Automation::VirtualKey::AlternateRight:
+        return GDK_KEY_Alt_R;
     case Inspector::Protocol::Automation::VirtualKey::Meta:
+        return GDK_KEY_Meta_L;
+    case Inspector::Protocol::Automation::VirtualKey::MetaRight:
         return GDK_KEY_Meta_R;
     case Inspector::Protocol::Automation::VirtualKey::Command:
         return GDK_KEY_Execute;
@@ -149,24 +157,44 @@
         return GDK_KEY_Escape;
     case Inspector::Protocol::Automation::VirtualKey::PageUp:
         return GDK_KEY_Page_Up;
+    case Inspector::Protocol::Automation::VirtualKey::PageUpRight:
+        return GDK_KEY_KP_Page_Up;
     case Inspector::Protocol::Automation::VirtualKey::PageDown:
         return GDK_KEY_Page_Down;
+    case Inspector::Protocol::Automation::VirtualKey::PageDownRight:
+        return GDK_KEY_KP_Page_Down;
     case Inspector::Protocol::Automation::VirtualKey::End:
         return GDK_KEY_End;
+    case Inspector::Protocol::Automation::VirtualKey::EndRight:
+        return GDK_KEY_KP_End;
     case Inspector::Protocol::Automation::VirtualKey::Home:
         return GDK_KEY_Home;
+    case Inspector::Protocol::Automation::VirtualKey::HomeRight:
+        return GDK_KEY_KP_Home;
     case Inspector::Protocol::Automation::VirtualKey::LeftArrow:
         return GDK_KEY_Left;
+    case Inspector::Protocol::Automation::VirtualKey::LeftArrowRight:
+        return GDK_KEY_KP_Left;
     case Inspector::Protocol::Automation::VirtualKey::UpArrow:
         return GDK_KEY_Up;
+    case Inspector::Protocol::Automation::VirtualKey::UpArrowRight:
+        return GDK_KEY_KP_Up;
     case Inspector::Protocol::Automation::VirtualKey::RightArrow:
         return GDK_KEY_Right;
+    case Inspector::Protocol::Automation::VirtualKey::RightArrowRight:
+        return GDK_KEY_KP_Right;
     case Inspector::Protocol::Automation::VirtualKey::DownArrow:
         return GDK_KEY_Down;
+    case Inspector::Protocol::Automation::VirtualKey::DownArrowRight:
+        return GDK_KEY_KP_Down;
     case Inspector::Protocol::Automation::VirtualKey::Insert:
         return GDK_KEY_Insert;
+    case Inspector::Protocol::Automation::VirtualKey::InsertRight:
+        return GDK_KEY_KP_Insert;
     case Inspector::Protocol::Automation::VirtualKey::Delete:
         return GDK_KEY_Delete;
+    case Inspector::Protocol::Automation::VirtualKey::DeleteRight:
+        return GDK_KEY_KP_Delete;
     case Inspector::Protocol::Automation::VirtualKey::Space:
         return GDK_KEY_space;
     case Inspector::Protocol::Automation::VirtualKey::Semicolon:
@@ -240,12 +268,16 @@
 static unsigned modifiersForKeyCode(unsigned keyCode)
 {
     switch (keyCode) {
+    case GDK_KEY_Shift_L:
     case GDK_KEY_Shift_R:
         return GDK_SHIFT_MASK;
+    case GDK_KEY_Control_L:
     case GDK_KEY_Control_R:
         return GDK_CONTROL_MASK;
     case GDK_KEY_Alt_L:
+    case GDK_KEY_Alt_R:
         return GDK_MOD1_MASK;
+    case GDK_KEY_Meta_L:
     case GDK_KEY_Meta_R:
         return GDK_META_MASK;
     }

Modified: trunk/Source/WebKit/UIProcess/Automation/mac/WebAutomationSessionMac.mm (268716 => 268717)


--- trunk/Source/WebKit/UIProcess/Automation/mac/WebAutomationSessionMac.mm	2020-10-20 08:00:55 UTC (rev 268716)
+++ trunk/Source/WebKit/UIProcess/Automation/mac/WebAutomationSessionMac.mm	2020-10-20 09:14:35 UTC (rev 268717)
@@ -411,15 +411,23 @@
     switch (key) {
     case VirtualKey::Shift:
         return kVK_Shift;
+    case VirtualKey::ShiftRight:
+        return kVK_RightShift;
     case VirtualKey::Control:
         return kVK_Control;
+    case VirtualKey::ControlRight:
+        return kVK_RightControl;
     case VirtualKey::Alternate:
         return kVK_Option;
+    case VirtualKey::AlternateRight:
+        return kVK_RightOption;
     case VirtualKey::Meta:
         // The 'meta' key does not exist on Apple keyboards and is usually
         // mapped to the Command key when using third-party keyboards.
     case VirtualKey::Command:
         return kVK_Command;
+    case VirtualKey::MetaRight:
+        return kVK_RightCommand;
     case VirtualKey::Help:
         return kVK_Help;
     case VirtualKey::Backspace:
@@ -440,26 +448,36 @@
     case VirtualKey::Escape:
         return kVK_Escape;
     case VirtualKey::PageUp:
+    case VirtualKey::PageUpRight:
         return kVK_PageUp;
     case VirtualKey::PageDown:
+    case VirtualKey::PageDownRight:
         return kVK_PageDown;
     case VirtualKey::End:
+    case VirtualKey::EndRight:
         return kVK_End;
     case VirtualKey::Home:
+    case VirtualKey::HomeRight:
         return kVK_Home;
     case VirtualKey::LeftArrow:
+    case VirtualKey::LeftArrowRight:
         return kVK_LeftArrow;
     case VirtualKey::UpArrow:
+    case VirtualKey::UpArrowRight:
         return kVK_UpArrow;
     case VirtualKey::RightArrow:
+    case VirtualKey::RightArrowRight:
         return kVK_RightArrow;
     case VirtualKey::DownArrow:
+    case VirtualKey::DownArrowRight:
         return kVK_DownArrow;
     case VirtualKey::Insert:
+    case VirtualKey::InsertRight:
         // The 'insert' key does not exist on Apple keyboards and has no keyCode.
         // The semantics are unclear so just abort and do nothing.
         return 0;
     case VirtualKey::Delete:
+    case VirtualKey::DeleteRight:
         return kVK_ForwardDelete;
     case VirtualKey::Space:
         return kVK_Space;

Modified: trunk/Source/WebKit/UIProcess/Automation/wpe/WebAutomationSessionWPE.cpp (268716 => 268717)


--- trunk/Source/WebKit/UIProcess/Automation/wpe/WebAutomationSessionWPE.cpp	2020-10-20 08:00:55 UTC (rev 268716)
+++ trunk/Source/WebKit/UIProcess/Automation/wpe/WebAutomationSessionWPE.cpp	2020-10-20 09:14:35 UTC (rev 268717)
@@ -163,12 +163,20 @@
 {
     switch (key) {
     case Inspector::Protocol::Automation::VirtualKey::Shift:
+        return WPE_KEY_Shift_L;
+    case Inspector::Protocol::Automation::VirtualKey::ShiftRight:
         return WPE_KEY_Shift_R;
     case Inspector::Protocol::Automation::VirtualKey::Control:
+        return WPE_KEY_Control_L;
+    case Inspector::Protocol::Automation::VirtualKey::ControlRight:
         return WPE_KEY_Control_R;
     case Inspector::Protocol::Automation::VirtualKey::Alternate:
         return WPE_KEY_Alt_L;
+    case Inspector::Protocol::Automation::VirtualKey::AlternateRight:
+        return WPE_KEY_Alt_R;
     case Inspector::Protocol::Automation::VirtualKey::Meta:
+        return WPE_KEY_Meta_L;
+    case Inspector::Protocol::Automation::VirtualKey::MetaRight:
         return WPE_KEY_Meta_R;
     case Inspector::Protocol::Automation::VirtualKey::Command:
         return WPE_KEY_Execute;
@@ -190,24 +198,44 @@
         return WPE_KEY_Escape;
     case Inspector::Protocol::Automation::VirtualKey::PageUp:
         return WPE_KEY_Page_Up;
+    case Inspector::Protocol::Automation::VirtualKey::PageUpRight:
+        return WPE_KEY_KP_Page_Up;
     case Inspector::Protocol::Automation::VirtualKey::PageDown:
         return WPE_KEY_Page_Down;
+    case Inspector::Protocol::Automation::VirtualKey::PageDownRight:
+        return WPE_KEY_KP_Page_Down;
     case Inspector::Protocol::Automation::VirtualKey::End:
         return WPE_KEY_End;
+    case Inspector::Protocol::Automation::VirtualKey::EndRight:
+        return WPE_KEY_KP_End;
     case Inspector::Protocol::Automation::VirtualKey::Home:
         return WPE_KEY_Home;
+    case Inspector::Protocol::Automation::VirtualKey::HomeRight:
+        return WPE_KEY_KP_Home;
     case Inspector::Protocol::Automation::VirtualKey::LeftArrow:
         return WPE_KEY_Left;
+    case Inspector::Protocol::Automation::VirtualKey::LeftArrowRight:
+        return WPE_KEY_KP_Left;
     case Inspector::Protocol::Automation::VirtualKey::UpArrow:
         return WPE_KEY_Up;
+    case Inspector::Protocol::Automation::VirtualKey::UpArrowRight:
+        return WPE_KEY_KP_Up;
     case Inspector::Protocol::Automation::VirtualKey::RightArrow:
         return WPE_KEY_Right;
+    case Inspector::Protocol::Automation::VirtualKey::RightArrowRight:
+        return WPE_KEY_KP_Right;
     case Inspector::Protocol::Automation::VirtualKey::DownArrow:
         return WPE_KEY_Down;
+    case Inspector::Protocol::Automation::VirtualKey::DownArrowRight:
+        return WPE_KEY_KP_Down;
     case Inspector::Protocol::Automation::VirtualKey::Insert:
         return WPE_KEY_Insert;
+    case Inspector::Protocol::Automation::VirtualKey::InsertRight:
+        return WPE_KEY_KP_Insert;
     case Inspector::Protocol::Automation::VirtualKey::Delete:
         return WPE_KEY_Delete;
+    case Inspector::Protocol::Automation::VirtualKey::DeleteRight:
+        return WPE_KEY_KP_Delete;
     case Inspector::Protocol::Automation::VirtualKey::Space:
         return WPE_KEY_space;
     case Inspector::Protocol::Automation::VirtualKey::Semicolon:
@@ -281,12 +309,16 @@
 static uint32_t modifiersForKeyCode(unsigned keyCode)
 {
     switch (keyCode) {
+    case WPE_KEY_Shift_L:
     case WPE_KEY_Shift_R:
         return wpe_input_keyboard_modifier_shift;
+    case WPE_KEY_Control_L:
     case WPE_KEY_Control_R:
         return wpe_input_keyboard_modifier_control;
     case WPE_KEY_Alt_L:
+    case WPE_KEY_Alt_R:
         return wpe_input_keyboard_modifier_alt;
+    case WPE_KEY_Meta_L:
     case WPE_KEY_Meta_R:
         return wpe_input_keyboard_modifier_meta;
     }

Modified: trunk/WebDriverTests/ChangeLog (268716 => 268717)


--- trunk/WebDriverTests/ChangeLog	2020-10-20 08:00:55 UTC (rev 268716)
+++ trunk/WebDriverTests/ChangeLog	2020-10-20 09:14:35 UTC (rev 268717)
@@ -1,3 +1,14 @@
+2020-10-20  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        WebDriver: add support for right variations of virtual keys
+        https://bugs.webkit.org/show_bug.cgi?id=217819
+
+        Reviewed by Brian Burg.
+
+        Remove expectations for tests that are now passing.
+
+        * TestExpectations.json:
+
 2020-10-02  Carlos Garcia Campos  <cgar...@igalia.com>
 
         Unreviewed Gardening. Remove expectations for tests fixed in r267872

Modified: trunk/WebDriverTests/TestExpectations.json (268716 => 268717)


--- trunk/WebDriverTests/TestExpectations.json	2020-10-20 08:00:55 UTC (rev 268716)
+++ trunk/WebDriverTests/TestExpectations.json	2020-10-20 09:14:35 UTC (rev 268717)
@@ -246,18 +246,9 @@
 
     "imported/w3c/webdriver/tests/perform_actions/key_events.py": {
         "subtests": {
-            "test_modifier_key_sends_correct_events[\\ue009-CONTROL]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
             "test_modifier_key_sends_correct_events[\\ue03d-META]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
-            "test_modifier_key_sends_correct_events[\\ue008-SHIFT]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
-            "test_modifier_key_sends_correct_events[\\ue052-R_ALT]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
             "test_modifier_key_sends_correct_events[\\ue053-R_META]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
@@ -273,15 +264,6 @@
             "test_printable_key_sends_correct_events[\\uf6c2-]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
-            "test_special_key_sends_keydown[SHIFT-expected64]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
-            "test_special_key_sends_keydown[R_ARROWRIGHT-expected51]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
-            "test_special_key_sends_keydown[R_PAGEUP-expected60]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
             "test_special_key_sends_keydown[META-expected30]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
@@ -288,9 +270,6 @@
             "test_special_key_sends_keydown[NULL-expected32]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
-            "test_special_key_sends_keydown[CONTROL-expected5]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
             "test_special_key_sends_keydown[R_META-expected58]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
@@ -297,33 +276,15 @@
             "test_special_key_sends_keydown[SEMICOLON-expected62]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
-            "test_special_key_sends_keydown[R_ALT-expected48]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
-            "test_special_key_sends_keydown[R_DELETE-expected54]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
             "test_special_key_sends_keydown[PAUSE-expected45]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
-            "test_special_key_sends_keydown[R_ARROWUP-expected52]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
             "test_special_key_sends_keydown[CLEAR-expected4]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
-            "test_special_key_sends_keydown[R_ARROWLEFT-expected50]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
             "test_special_key_sends_keydown[EQUALS-expected12]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
-            "test_special_key_sends_keydown[R_PAGEDOWN-expected59]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
-            "test_special_key_sends_keydown[R_INSERT-expected57]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
             "test_special_key_sends_keydown[ENTER-expected11]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
@@ -330,12 +291,6 @@
             "test_special_key_sends_keydown[CANCEL-expected3]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
-            "test_special_key_sends_keydown[R_END-expected55]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
-            "test_special_key_sends_keydown[R_HOME-expected56]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
             "test_special_key_sends_keydown[ZENKAKUHANKAKU-expected69]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
@@ -342,9 +297,6 @@
             "test_special_key_sends_keydown[SEPARATOR-expected63]": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             },
-            "test_special_key_sends_keydown[R_ARROWDOWN-expected49]": {
-                "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
-            },
             "test_sequence_of_keydown_printable_keys_sends_events": {
                 "expected": {"all": {"status": ["FAIL"], "bug": "webkit.org/b/184967"}}
             }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to