REGRESSION(r228260):WebHTMLView beeps at every keydown for Chinese/Japanese/Korean...
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 2 Apr 2018 19:59:42 +0000 (19:59 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 2 Apr 2018 19:59:42 +0000 (19:59 +0000)
https://bugs.webkit.org/show_bug.cgi?id=184231

Reviewed by Alexey Proskuryakov.

The bug was caused by EventHandler::internalKeyEvent calling setDefaultHandled and expecting it to stay true
after dispatching the event even though m_defaultHandled is always cleared after r228260. This results in
EventHandler::internalKeyEvent returning false, and resulting in a beep.

Unfortunately, no new tests since there is no facility to detect this case in layout tests, and we can't
easily emulate or trigger a real input method in API tests.

* page/EventHandler.cpp:
(WebCore::EventHandler::internalKeyEvent):

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

Source/WebCore/ChangeLog
Source/WebCore/page/EventHandler.cpp

index 9d203ae..b5b7fcb 100644 (file)
@@ -1,3 +1,20 @@
+2018-04-02  Ryosuke Niwa  <rniwa@webkit.org>
+
+        REGRESSION(r228260):WebHTMLView beeps at every keydown for Chinese/Japanese/Korean Input Method
+        https://bugs.webkit.org/show_bug.cgi?id=184231
+
+        Reviewed by Alexey Proskuryakov.
+
+        The bug was caused by EventHandler::internalKeyEvent calling setDefaultHandled and expecting it to stay true
+        after dispatching the event even though m_defaultHandled is always cleared after r228260. This results in
+        EventHandler::internalKeyEvent returning false, and resulting in a beep.
+
+        Unfortunately, no new tests since there is no facility to detect this case in layout tests, and we can't
+        easily emulate or trigger a real input method in API tests.
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::internalKeyEvent):
+
 2018-04-02  Jer Noble  <jer.noble@apple.com>
 
         AudioBufferSourceNode start method causes OfflineAudioContext to start running
index 84a3ed8..44e8443 100644 (file)
@@ -3272,13 +3272,15 @@ bool EventHandler::internalKeyEvent(const PlatformKeyboardEvent& initialKeyEvent
         keydown->stopPropagation();
 
     element->dispatchEvent(keydown);
+    if (handledByInputMethod)
+        return true;
 
     // If frame changed as a result of keydown dispatch, then return early to avoid sending a subsequent keypress message to the new frame.
     bool changedFocusedFrame = m_frame.page() && &m_frame != &m_frame.page()->focusController().focusedOrMainFrame();
     bool keydownResult = keydown->defaultHandled() || keydown->defaultPrevented() || changedFocusedFrame;
-    if (handledByInputMethod || (keydownResult && !backwardCompatibilityMode))
+    if (keydownResult && !backwardCompatibilityMode)
         return keydownResult;
-    
+
     // Focus may have changed during keydown handling, so refetch element.
     // But if we are dispatching a fake backward compatibility keypress, then we pretend that the keypress happened on the original element.
     if (!keydownResult) {