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);
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)
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 {
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);
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_;
}
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) {
}
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,
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
"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",
"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",
--- /dev/null
+// 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);
+}
--- /dev/null
+// 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);
+}