Title: [235268] trunk
Revision
235268
Author
rn...@webkit.org
Date
2018-08-23 19:01:29 -0700 (Thu, 23 Aug 2018)

Log Message

initKeyboardEvent doesn't clear CapsLock state
https://bugs.webkit.org/show_bug.cgi?id=188909

Reviewed by Wenson Hsieh.

Source/WebCore:

Fixed the bug by not preserving CapsLock state in setModifierKeys variant which takes boolean
for altGraphKey, which is only called by KeyboardEvent::initKeyboardEvent.

Test: fast/events/init-event-clears-capslock.html

* dom/UIEventWithKeyState.h:
(WebCore::UIEventWithKeyState::setModifierKeys):

LayoutTests:

Added a regression test. Note that altGraph is only supported in WebKit
so Chrome and Firefox would fail to reset it via initKeyboardEvent.

* fast/events/init-event-clears-capslock-expected.txt: Added.
* fast/events/init-event-clears-capslock.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (235267 => 235268)


--- trunk/LayoutTests/ChangeLog	2018-08-24 01:33:49 UTC (rev 235267)
+++ trunk/LayoutTests/ChangeLog	2018-08-24 02:01:29 UTC (rev 235268)
@@ -1,5 +1,18 @@
 2018-08-23  Ryosuke Niwa  <rn...@webkit.org>
 
+        initKeyboardEvent doesn't clear CapsLock state
+        https://bugs.webkit.org/show_bug.cgi?id=188909
+
+        Reviewed by Wenson Hsieh.
+
+        Added a regression test. Note that altGraph is only supported in WebKit
+        so Chrome and Firefox would fail to reset it via initKeyboardEvent.
+
+        * fast/events/init-event-clears-capslock-expected.txt: Added.
+        * fast/events/init-event-clears-capslock.html: Added.
+
+2018-08-23  Ryosuke Niwa  <rn...@webkit.org>
+
         Store the timer we scheduled in the global object.
         The underlying bug is tracked by https://webkit.org/b/188911.
 

Added: trunk/LayoutTests/fast/events/init-event-clears-capslock-expected.txt (0 => 235268)


--- trunk/LayoutTests/fast/events/init-event-clears-capslock-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/init-event-clears-capslock-expected.txt	2018-08-24 02:01:29 UTC (rev 235268)
@@ -0,0 +1,43 @@
+This tests invoking initKeyboardEvent after setting CapsLock state to true via KeyboardEvent's constructor.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+keyEvent = new KeyboardEvent('keydown', { bubbles: true, cancelable: true, view: window, detail: 0, key: 'a', code: 'KeyA',
+    ctrlKey: true, altKey: true, shiftKey: true, metaKey: true, modifierAltGraph: true, modifierCapsLock: true });
+PASS keyEvent.ctrlKey is true
+PASS keyEvent.shiftKey is true
+PASS keyEvent.altKey is true
+PASS keyEvent.metaKey is true
+PASS keyEvent.getModifierState("Control") is true
+PASS keyEvent.getModifierState("Shift") is true
+PASS keyEvent.getModifierState("Alt") is true
+PASS keyEvent.getModifierState("Meta") is true
+PASS keyEvent.getModifierState("AltGraph") is true
+PASS keyEvent.getModifierState("CapsLock") is true
+keyEvent.initKeyboardEvent('keydown', false, false, window, 'U+0041', 0, /* ctrl */ false, /* alt */ false, /* shift */ false, /* meta */ false, /* altGraph */ false)
+PASS keyEvent.ctrlKey is false
+PASS keyEvent.shiftKey is false
+PASS keyEvent.altKey is false
+PASS keyEvent.metaKey is false
+PASS keyEvent.getModifierState("Control") is false
+PASS keyEvent.getModifierState("Shift") is false
+PASS keyEvent.getModifierState("Alt") is false
+PASS keyEvent.getModifierState("Meta") is false
+PASS keyEvent.getModifierState("AltGraph") is false
+PASS keyEvent.getModifierState("CapsLock") is false
+keyEvent.initKeyboardEvent('keydown', false, false, window, 'U+0041', 0, /* ctrl */ true, /* alt */ true, /* shift */ true, /* meta */ true, /* altGraph */ true)
+PASS keyEvent.ctrlKey is true
+PASS keyEvent.shiftKey is true
+PASS keyEvent.altKey is true
+PASS keyEvent.metaKey is true
+PASS keyEvent.getModifierState("Control") is true
+PASS keyEvent.getModifierState("Shift") is true
+PASS keyEvent.getModifierState("Alt") is true
+PASS keyEvent.getModifierState("Meta") is true
+PASS keyEvent.getModifierState("AltGraph") is true
+PASS keyEvent.getModifierState("CapsLock") is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/events/init-event-clears-capslock.html (0 => 235268)


--- trunk/LayoutTests/fast/events/init-event-clears-capslock.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/init-event-clears-capslock.html	2018-08-24 02:01:29 UTC (rev 235268)
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+
+description(`This tests invoking initKeyboardEvent after setting CapsLock state to true via KeyboardEvent's constructor.`);
+
+evalAndLog(`keyEvent = new KeyboardEvent('keydown', { bubbles: true, cancelable: true, view: window, detail: 0, key: 'a', code: 'KeyA',
+    ctrlKey: true, altKey: true, shiftKey: true, metaKey: true, modifierAltGraph: true, modifierCapsLock: true });`);
+shouldBeTrue('keyEvent.ctrlKey');
+shouldBeTrue('keyEvent.shiftKey');
+shouldBeTrue('keyEvent.altKey');
+shouldBeTrue('keyEvent.metaKey');
+shouldBeTrue('keyEvent.getModifierState("Control")');
+shouldBeTrue('keyEvent.getModifierState("Shift")');
+shouldBeTrue('keyEvent.getModifierState("Alt")');
+shouldBeTrue('keyEvent.getModifierState("Meta")');
+shouldBeTrue('keyEvent.getModifierState("AltGraph")');
+shouldBeTrue('keyEvent.getModifierState("CapsLock")');
+
+evalAndLog(`keyEvent.initKeyboardEvent('keydown', false, false, window, 'U+0041', 0, /* ctrl */ false, /* alt */ false, /* shift */ false, /* meta */ false, /* altGraph */ false)`);
+shouldBeFalse('keyEvent.ctrlKey');
+shouldBeFalse('keyEvent.shiftKey');
+shouldBeFalse('keyEvent.altKey');
+shouldBeFalse('keyEvent.metaKey');
+shouldBeFalse('keyEvent.getModifierState("Control")');
+shouldBeFalse('keyEvent.getModifierState("Shift")');
+shouldBeFalse('keyEvent.getModifierState("Alt")');
+shouldBeFalse('keyEvent.getModifierState("Meta")');
+shouldBeFalse('keyEvent.getModifierState("AltGraph")');
+shouldBeFalse('keyEvent.getModifierState("CapsLock")');
+
+evalAndLog(`keyEvent.initKeyboardEvent('keydown', false, false, window, 'U+0041', 0, /* ctrl */ true, /* alt */ true, /* shift */ true, /* meta */ true, /* altGraph */ true)`);
+shouldBeTrue('keyEvent.ctrlKey');
+shouldBeTrue('keyEvent.shiftKey');
+shouldBeTrue('keyEvent.altKey');
+shouldBeTrue('keyEvent.metaKey');
+shouldBeTrue('keyEvent.getModifierState("Control")');
+shouldBeTrue('keyEvent.getModifierState("Shift")');
+shouldBeTrue('keyEvent.getModifierState("Alt")');
+shouldBeTrue('keyEvent.getModifierState("Meta")');
+shouldBeTrue('keyEvent.getModifierState("AltGraph")');
+shouldBeFalse('keyEvent.getModifierState("CapsLock")');
+
+</script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (235267 => 235268)


--- trunk/Source/WebCore/ChangeLog	2018-08-24 01:33:49 UTC (rev 235267)
+++ trunk/Source/WebCore/ChangeLog	2018-08-24 02:01:29 UTC (rev 235268)
@@ -1,3 +1,18 @@
+2018-08-23  Ryosuke Niwa  <rn...@webkit.org>
+
+        initKeyboardEvent doesn't clear CapsLock state
+        https://bugs.webkit.org/show_bug.cgi?id=188909
+
+        Reviewed by Wenson Hsieh.
+
+        Fixed the bug by not preserving CapsLock state in setModifierKeys variant which takes boolean
+        for altGraphKey, which is only called by KeyboardEvent::initKeyboardEvent.
+
+        Test: fast/events/init-event-clears-capslock.html
+
+        * dom/UIEventWithKeyState.h:
+        (WebCore::UIEventWithKeyState::setModifierKeys):
+
 2018-08-23  Aditya Keerthi  <akeer...@apple.com>
 
         Unreviewed, fix the Windows build after r235245.

Modified: trunk/Source/WebCore/dom/UIEventWithKeyState.h (235267 => 235268)


--- trunk/Source/WebCore/dom/UIEventWithKeyState.h	2018-08-24 01:33:49 UTC (rev 235267)
+++ trunk/Source/WebCore/dom/UIEventWithKeyState.h	2018-08-24 02:01:29 UTC (rev 235268)
@@ -76,9 +76,6 @@
             result |= Modifier::MetaKey;
         if (altGraphKey)
             result |= Modifier::AltGraphKey;
-        //  FIXME: Chrome or Firefox don't preserve this state.
-        if (m_modifiers & Modifier::CapsLockKey)
-            result |= Modifier::CapsLockKey;
         m_modifiers = result;
     }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to