[M120 Migration][VD] Support ewk apis of key event 80/306980/2
authorfang fengrong <fr.fang@samsung.com>
Fri, 1 Mar 2024 11:08:25 +0000 (19:08 +0800)
committerfang fengrong <fr.fang@samsung.com>
Mon, 4 Mar 2024 01:18:59 +0000 (09:18 +0800)
1.Support ewk apis of key event in case some other application will use
it.
Support ewk_view_send_key_event & ewk_view_key_events_enabled_set.
ewk_view_key_events_enabled_set:
EINA_FALSE---delete keydown and keyup callback in chromium
EINA_TRUE----add keydown and keyup callback in chromium
If callback is delete, WRT use ewk_view_send_key_event to send
keydown and keyup event to chromium.
Currently WRT dose not use ewk interface, but we keep this API in case
some other application will use it.

2.Add ewk_view_send_key_event to internal API header

refer:
https://review.tizen.org/gerrit/#/c/291454

Change-Id: I257fa7491efacb20b192fccfec1378d4630862cf
Signed-off-by: fang fengrong <fr.fang@samsung.com>
tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_common_helper_efl.cc
tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_common_helper_efl.h
tizen_src/ewk/efl_integration/eweb_view.cc
tizen_src/ewk/efl_integration/eweb_view.h
tizen_src/ewk/efl_integration/public/ewk_view.cc
tizen_src/ewk/efl_integration/public/ewk_view_internal.h
tizen_src/ewk/unittest/BUILD.gn
tizen_src/ewk/unittest/utc_blink_ewk_view_key_events_enabled_set_func.cpp [new file with mode: 0644]
tizen_src/ewk/unittest/utc_blink_ewk_view_send_key_event_func.cpp [new file with mode: 0644]

index 65adfd4..1f3a744 100644 (file)
@@ -481,6 +481,18 @@ void RWHVAuraCommonHelperEfl::BackgroundColorReceived(
   web_contents_->GetDelegate()->BackgroundColorReceived(callback_id, bg_color);
 }
 
+void RWHVAuraCommonHelperEfl::SetKeyEventsEnabled(bool enabled) {
+  if (auto* event_handler = GetEventHandler())
+    event_handler->SetKeyEventsEnabled(enabled);
+}
+
+void RWHVAuraCommonHelperEfl::SendKeyEvent(Evas_Object* ewk_view,
+                                           void* key_event,
+                                           bool is_press) {
+  if (auto* event_handler = GetEventHandler())
+    event_handler->SendKeyEvent(ewk_view, key_event, is_press);
+}
+
 void RWHVAuraCommonHelperEfl::SetTouchEventsEnabled(bool enabled) {
   if (auto* event_handler = GetEventHandler())
     event_handler->SetTouchEventsEnabled(enabled);
index 2576983..48bf752 100644 (file)
@@ -120,6 +120,9 @@ class CONTENT_EXPORT RWHVAuraCommonHelperEfl {
   bool TouchEventsEnabled();
   bool IsFocusedNodeContentEditable() const { return is_content_editable_; }
 
+  void SetKeyEventsEnabled(bool enabled);
+  void SendKeyEvent(Evas_Object* ewk_view, void* key_event, bool is_press);
+
   void OnMouseOrTouchEvent(ui::Event* event);
   void FocusedNodeChanged(bool editable,
 #if BUILDFLAG(IS_TIZEN_TV)
index 6c39a8d..0b8b2a0 100644 (file)
@@ -991,6 +991,31 @@ void EWebView::SetMouseEventsEnabled(bool enabled) {
   rwhva()->offscreen_helper()->SetTouchEventsEnabled(!enabled);
 }
 
+bool EWebView::SetKeyEventsEnabled(bool enabled) {
+  if (!rwhva() || !rwhva()->aura_efl_helper()) {
+    LOG(WARNING) << "RWHV is not created yet!";
+    return false;
+  }
+
+  if (key_events_enabled_ == enabled)
+    return true;
+
+  key_events_enabled_ = enabled;
+  rwhva()->aura_efl_helper()->SetKeyEventsEnabled(enabled);
+  return true;
+}
+
+void EWebView::SendKeyEvent(Evas_Object* ewk_view,
+                            void* key_event,
+                            bool is_press) {
+  if (!rwhva() || !rwhva()->aura_efl_helper()) {
+    LOG(WARNING) << "RWHV is not created yet!";
+    return;
+  }
+
+  rwhva()->aura_efl_helper()->SendKeyEvent(ewk_view, key_event, is_press);
+}
+
 namespace {
 
 class JavaScriptCallbackDetails {
index 87c9d0e..9900db5 100644 (file)
@@ -362,6 +362,8 @@ class EWebView {
   void SetTouchEventsEnabled(bool enabled);
   bool MouseEventsEnabled() const;
   void SetMouseEventsEnabled(bool enabled);
+  void SendKeyEvent(Evas_Object* ewk_view, void* key_event, bool is_press);
+  bool SetKeyEventsEnabled(bool enabled);
   void HandleTouchEvents(Ewk_Touch_Event_Type type,
                          const Eina_List* points,
                          const Evas_Modifier* modifiers);
@@ -829,6 +831,7 @@ class EWebView {
   std::unique_ptr<_Ewk_Policy_Decision> window_policy_;
   Evas_Object* ewk_view_;
   Evas_Object* efl_main_layout_;
+  bool key_events_enabled_ = true;
   bool mouse_events_enabled_;
   double text_zoom_factor_;
   mutable std::string user_agent_;
index 5d0c309..10b1b1a 100644 (file)
@@ -1448,8 +1448,13 @@ void ewk_view_force_layout(const Evas_Object* o)
 }
 
 Eina_Bool ewk_view_send_key_event(Evas_Object* ewk_view, void* key_event, Eina_Bool is_press) {
-  LOG_EWK_API_MOCKUP();
-  return false;
+  EWK_VIEW_IMPL_GET_OR_RETURN(ewk_view, impl, EINA_FALSE);
+  EINA_SAFETY_ON_NULL_RETURN_VAL(key_event, EINA_FALSE);
+#if BUILDFLAG(IS_TIZEN_TV)
+  LOG(INFO) << "view: " << ewk_view << ", is_press :" << (bool)is_press;
+#endif
+  impl->SendKeyEvent(ewk_view, key_event, !!is_press);
+  return EINA_TRUE;
 }
 
 Eina_Bool ewk_view_tts_mode_set(Evas_Object* view, ewk_tts_mode tts_mode) {
@@ -1546,8 +1551,15 @@ Eina_Bool ewk_view_bg_color_set(Evas_Object* o, int r, int g, int b, int a) {
 }
 
 Eina_Bool ewk_view_key_events_enabled_set(Evas_Object* o, Eina_Bool enabled) {
-  LOG_EWK_API_MOCKUP();
-  return false;
+#if BUILDFLAG(IS_TIZEN_TV)
+  EWK_VIEW_IMPL_GET_OR_RETURN(o, impl, EINA_FALSE);
+  LOG(INFO)<< "ewk_view_key_events_enabled_set, enabled: " << (bool)enabled;
+  return impl->SetKeyEventsEnabled(!!enabled);
+#else
+  LOG_EWK_API_MOCKUP("This API is only available in Tizen TV product.");
+  return EINA_FALSE;
+#endif
+
 }
 
 Eina_Bool ewk_view_bg_color_get(Evas_Object* view,
index a7ba801..d57cc5a 100644 (file)
@@ -1505,6 +1505,20 @@ EXPORT_API void ewk_view_feed_mouse_wheel(Evas_Object* o,
                                           int x,
                                           int y);
 
+/**
+ * @brief Sends key event.
+ *
+ * @since_tizen 2.4
+ *
+ * @param[in] o The view object
+ * @param[in] key_event Evas_Event_Key_Down struct or Evas_Event_Key_Up struct
+ * @param[in] is_press EINA_TRUE: keydown, EINA_FALSE: keyup
+ * @return @c EINA_TRUE on success, otherwise @c EINA_FALSE
+ */
+EXPORT_API Eina_Bool ewk_view_send_key_event(Evas_Object* o,
+                                             void* key_event,
+                                             Eina_Bool is_press);
+
 EXPORT_API void ewk_view_media_device_list_get(Evas_Object* o, Ewk_Media_Device_List_Get_Callback callback, void* user_data);
 
 #ifdef __cplusplus
index e4fd33b..4eb6573 100644 (file)
@@ -333,6 +333,7 @@ test("ewk_unittests") {
     "utc_blink_ewk_view_html_string_load_func.cpp",
     "utc_blink_ewk_view_inspector_server_stop_func.cpp",
     "utc_blink_ewk_view_javascript_confirm_reply_func.cpp",
+    "utc_blink_ewk_view_key_events_enabled_set_func.cpp",
     "utc_blink_ewk_view_load_progress_get_func.cpp",
     "utc_blink_ewk_view_main_frame_get_func.cpp",
     "utc_blink_ewk_view_main_frame_scrollbar_visible_set_func.cpp",
@@ -355,6 +356,7 @@ test("ewk_unittests") {
     "utc_blink_ewk_view_scroll_pos_get_func.cpp",
     "utc_blink_ewk_view_scroll_set_func.cpp",
     "utc_blink_ewk_view_scroll_size_get_func.cpp",
+    "utc_blink_ewk_view_send_key_event_func.cpp",
     "utc_blink_ewk_view_session_data_get_func.cpp",
     "utc_blink_ewk_view_settings_get_func.cpp",
     "utc_blink_ewk_view_stop_func.cpp",
diff --git a/tizen_src/ewk/unittest/utc_blink_ewk_view_key_events_enabled_set_func.cpp b/tizen_src/ewk/unittest/utc_blink_ewk_view_key_events_enabled_set_func.cpp
new file mode 100644 (file)
index 0000000..f22c2e3
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2024 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "utc_blink_ewk_base.h"
+
+class utc_blink_ewk_view_key_events_enabled_set : public utc_blink_ewk_base {};
+
+/**
+ * @brief Check if enable keydown & keyup callback is succeeds with
+ * correct webview
+ */
+TEST_F(utc_blink_ewk_view_key_events_enabled_set, POS_KEY_EVENTS_ENABLE) {
+  Eina_Bool result =
+      ewk_view_key_events_enabled_set(GetEwkWebView(), EINA_TRUE);
+  EXPECT_EQ(EINA_TRUE, result);
+}
+
+/**
+ * @brief Check if disable keydown & keyup callback is succeeds with
+ * correct webview
+ */
+TEST_F(utc_blink_ewk_view_key_events_enabled_set, POS_KEY_EVENTS_DISABLE) {
+  Eina_Bool result =
+      ewk_view_key_events_enabled_set(GetEwkWebView(), EINA_FALSE);
+  EXPECT_EQ(EINA_TRUE, result);
+}
+
+/**
+ * @brief Check if enable keydown & keyup callback is fails with
+ * null webview
+ */
+TEST_F(utc_blink_ewk_view_key_events_enabled_set, NEG_KEY_EVENTS_ENABLE) {
+  Eina_Bool result = ewk_view_key_events_enabled_set(NULL, EINA_TRUE);
+  EXPECT_EQ(EINA_FALSE, result);
+}
+
+/**
+ * @brief Check if disable keydown & keyup callback is fails with
+ * null webview
+ */
+TEST_F(utc_blink_ewk_view_key_events_enabled_set, NEG_KEY_EVENTS_DISABLE) {
+  Eina_Bool result = ewk_view_key_events_enabled_set(NULL, EINA_FALSE);
+  EXPECT_EQ(EINA_FALSE, result);
+}
diff --git a/tizen_src/ewk/unittest/utc_blink_ewk_view_send_key_event_func.cpp b/tizen_src/ewk/unittest/utc_blink_ewk_view_send_key_event_func.cpp
new file mode 100644 (file)
index 0000000..13ca44f
--- /dev/null
@@ -0,0 +1,96 @@
+// Copyright 2024 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "utc_blink_ewk_base.h"
+
+class utc_blink_ewk_view_send_key_event : public utc_blink_ewk_base {
+ protected:
+  utc_blink_ewk_view_send_key_event()
+      : utc_blink_ewk_base(), space_str("space") {}
+
+  // get Evas_Event_Key_Down
+  Evas_Event_Key_Down GetKeyDown() {
+    Evas_Event_Key_Down down_event;
+    memset(&down_event, 0, sizeof(Evas_Event_Key_Down));
+    down_event.key = space_str.c_str();
+    down_event.string = space_str.c_str();
+    return down_event;
+  }
+
+  // get Evas_Event_Key_Up
+  Evas_Event_Key_Up GetKeyUp() {
+    Evas_Event_Key_Up up_event;
+    memset(&up_event, 0, sizeof(Evas_Event_Key_Up));
+    up_event.key = space_str.c_str();
+    up_event.string = space_str.c_str();
+    return up_event;
+  }
+
+ protected:
+  std::string space_str;
+};
+
+/**
+ * @brief Check if send key down event is succeeds with
+ * correct webview.
+ */
+TEST_F(utc_blink_ewk_view_send_key_event, POS_SEND_KEY_DOWN_EVENT) {
+  Evas_Event_Key_Down down_event = GetKeyDown();
+  void* key_event = static_cast<void*>(&down_event);
+  Eina_Bool result =
+      ewk_view_send_key_event(GetEwkWebView(), key_event, EINA_TRUE);
+  EXPECT_EQ(EINA_TRUE, result);
+}
+
+/**
+ * @brief Check if send key up event is succeeds with
+ * correct webview.
+ */
+TEST_F(utc_blink_ewk_view_send_key_event, POS_SEND_KEY_UP_EVENT) {
+  Evas_Event_Key_Up up_event = GetKeyUp();
+  void* key_event = static_cast<void*>(&up_event);
+  Eina_Bool result =
+      ewk_view_send_key_event(GetEwkWebView(), key_event, EINA_FALSE);
+  EXPECT_EQ(EINA_TRUE, result);
+}
+
+/**
+ * @brief Check if send key up event is fails with
+ * null webview.
+ */
+TEST_F(utc_blink_ewk_view_send_key_event, NEG_SEND_KEY_UP_EVENT) {
+  Evas_Event_Key_Up up_event = GetKeyUp();
+  void* key_event = static_cast<void*>(&up_event);
+  Eina_Bool result = ewk_view_send_key_event(NULL, key_event, EINA_FALSE);
+  EXPECT_EQ(EINA_FALSE, result);
+}
+
+/**
+ * @brief Check if send key down event is fails with
+ * null webview.
+ */
+TEST_F(utc_blink_ewk_view_send_key_event, NEG_SEND_KEY_DOWN_EVENT) {
+  Evas_Event_Key_Down down_event = GetKeyDown();
+  void* key_event = static_cast<void*>(&down_event);
+  Eina_Bool result = ewk_view_send_key_event(NULL, key_event, EINA_TRUE);
+  EXPECT_EQ(EINA_FALSE, result);
+}
+
+/**
+ * @brief Check if send null key up event is fails with
+ * null webview.
+ */
+TEST_F(utc_blink_ewk_view_send_key_event, NEG_SEND_KEY_UP_EVENT_WITH_NULL) {
+  Eina_Bool result = ewk_view_send_key_event(NULL, NULL, EINA_FALSE);
+  EXPECT_EQ(EINA_FALSE, result);
+}
+
+/**
+ * @brief Check if send null key up event is fails with
+ * correct webview.
+ */
+TEST_F(utc_blink_ewk_view_send_key_event, NEG_SEND_KEY_DOWN_EVENT_WITH_NULL) {
+  Eina_Bool result = ewk_view_send_key_event(GetEwkWebView(), NULL, EINA_FALSE);
+  EXPECT_EQ(EINA_FALSE, result);
+}