Do not forward shift key to prevent shift keydown event.
authorKarol Furmaniak <k.furmaniak@samsung.com>
Tue, 19 May 2015 07:24:32 +0000 (09:24 +0200)
committerYoungsoo Choi <kenshin.choi@samsung.com>
Tue, 10 Jul 2018 06:57:09 +0000 (06:57 +0000)
When upper case letter is entered there are two events
Shift + letter key. Do not forward shift key to
prevent shift keydown event.

WCS-TC_90

Test case:
Type "A" in text box.

Expected result:
keydown
keypress
compositionend
input
keyup

Actual result:
keydown
keydown
keypress
input
keyup
keyup

Bug: http://web.sec.samsung.net/bugzilla/show_bug.cgi?id=12739
Reviewed by: Antonio Gomes, Hyunhak Kim, Piotr Grad, Piotr Tworek

Change-Id: Ic5945947466c85a064d7603d5bfab8cc5c0162a9
Signed-off-by: Karol Furmaniak <k.furmaniak@samsung.com>
tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc

index 7bed206..8d65a8c 100644 (file)
 
 namespace content {
 
+bool IsShiftKey(const char * key) {
+  if (!key)
+    return false;
+  return !strcmp(key, "Shift_L") || !strcmp(key, "Shift_R");
+}
+
 void RenderWidgetHostViewBase::GetDefaultScreenInfo(
     blink::WebScreenInfo* results) {
   const gfx::Display display = gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
@@ -1188,22 +1194,42 @@ void RenderWidgetHostViewEfl::OnMultiTouchEvent(
 
 void RenderWidgetHostViewEfl::OnKeyDown(
     void* data, Evas* evas, Evas_Object* obj, void* event_info) {
+
+  if (!event_info)
+    return;
+
   RenderWidgetHostViewEfl* rwhv = static_cast<RenderWidgetHostViewEfl*>(data);
   if (rwhv->evas_event_handler_.get())
     if (rwhv->evas_event_handler_->HandleEvent_KeyDown(static_cast<Evas_Event_Key_Down*>(event_info)))
       return;
 
+  // When upper case letter is entered there are two events
+  // Shift + letter key
+  // Do not forward shift key to prevent shift keydown event.
+  if (IsShiftKey(static_cast<Evas_Event_Key_Down*>(event_info)->key))
+    return;
+
   rwhv->host_->ForwardKeyboardEvent(MakeWebKeyboardEvent(
       true, static_cast<Evas_Event_Key_Down*>(event_info)));
 }
 
 void RenderWidgetHostViewEfl::OnKeyUp(
     void* data, Evas* evas, Evas_Object* obj, void* event_info) {
+
+  if (!event_info)
+    return;
+
   RenderWidgetHostViewEfl* rwhv = static_cast<RenderWidgetHostViewEfl*>(data);
   if (rwhv->evas_event_handler_.get())
     if (rwhv->evas_event_handler_->HandleEvent_KeyUp(static_cast<Evas_Event_Key_Up*>(event_info)))
       return;
 
+  // When upper case letter is entered there are two events
+  // Shift + letter key
+  // Do not forward shift key to prevent shift keyup event.
+  if (IsShiftKey(static_cast<Evas_Event_Key_Up*>(event_info)->key))
+    return;
+
   rwhv->host_->ForwardKeyboardEvent(MakeWebKeyboardEvent(
       false, static_cast<Evas_Event_Key_Up*>(event_info)));
 }