REGRESSION (r241734): ⌥⌘↑ and ⌥⌘↓ no longer navigate to previous/next Reading List...
authortimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 11 Apr 2019 06:08:40 +0000 (06:08 +0000)
committertimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 11 Apr 2019 06:08:40 +0000 (06:08 +0000)
https://bugs.webkit.org/show_bug.cgi?id=196797
<rdar://problem/48484715>

Reviewed by Simon Fraser.

* UIProcess/ios/WKKeyboardScrollingAnimator.mm:
(-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):
Validate the set of modifier keys pressed when handling a key event for scrolling:
Ignore key events with multiple modifier keys pressed.
Ignore key events with an invalid modifier key pressed for a given primary key.

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

Source/WebKit/ChangeLog
Source/WebKit/UIProcess/ios/WKKeyboardScrollingAnimator.mm

index f0bba19..33749b2 100644 (file)
@@ -1,3 +1,17 @@
+2019-04-10  Tim Horton  <timothy_horton@apple.com>
+
+        REGRESSION (r241734): ⌥⌘↑ and ⌥⌘↓ no longer navigate to previous/next Reading List article
+        https://bugs.webkit.org/show_bug.cgi?id=196797
+        <rdar://problem/48484715>
+
+        Reviewed by Simon Fraser.
+
+        * UIProcess/ios/WKKeyboardScrollingAnimator.mm:
+        (-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):
+        Validate the set of modifier keys pressed when handling a key event for scrolling:
+        Ignore key events with multiple modifier keys pressed.
+        Ignore key events with an invalid modifier key pressed for a given primary key.
+
 2019-04-10  Said Abou-Hallawa  <sabouhallawa@apple.com>
 
         requestAnimationFrame should execute before the next frame
index b109112..2a42c71 100644 (file)
@@ -219,6 +219,33 @@ static WebCore::PhysicalBoxSide boxSide(WebKit::ScrollingDirection direction)
     BOOL altPressed = event.modifierFlags & WebEventFlagMaskOptionKey;
     BOOL cmdPressed = event.modifierFlags & WebEventFlagMaskCommandKey;
 
+    // No shortcuts include more than one modifier; we should not eat key events
+    // that contain more than one modifier because they might be used for other shortcuts.
+    if (shiftPressed + altPressed + cmdPressed > 1)
+        return WTF::nullopt;
+
+    auto allowedModifiers = ^ WebEventFlags {
+        switch (key) {
+        case Key::LeftArrow:
+        case Key::RightArrow:
+            return WebEventFlagMaskOptionKey;
+        case Key::UpArrow:
+        case Key::DownArrow:
+            return WebEventFlagMaskOptionKey | WebEventFlagMaskCommandKey;
+        case Key::PageUp:
+        case Key::PageDown:
+            return 0;
+        case Key::Space:
+            return WebEventFlagMaskShiftKey;
+        case Key::Other:
+            ASSERT_NOT_REACHED();
+            return 0;
+        };
+    }();
+
+    if (event.modifierFlags & ~allowedModifiers)
+        return WTF::nullopt;
+
     auto increment = ^{
         switch (key) {
         case Key::LeftArrow: