From c1a52175512ca3b4fb8a46213f30741fd61fc4f1 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Fri, 18 Sep 2026 18:08:24 +0900 Subject: [PATCH] [webview_flutter] Use wrapper API --- packages/webview_flutter/CHANGELOG.md | 1 + .../tizen/inc/ftpw_webview_flutter.h | 287 ++++++++++++++ .../lib/aarch64/libftpw_webview_flutter.so | Bin 0 -> 45976 bytes .../lib/armel/libftpw_webview_flutter.so | Bin 0 -> 27440 bytes .../tizen/lib/i586/libftpw_webview_flutter.so | Bin 0 -> 39748 bytes .../lib/x86_64/libftpw_webview_flutter.so | Bin 0 -> 41968 bytes .../webview_flutter/tizen/project_def.prop | 4 + .../tizen/src/ewk_internal_api_binding.cc | 123 ------ .../tizen/src/ewk_internal_api_binding.h | 193 --------- .../tizen/src/ewk_webview_backend.cc | 97 +++-- .../tizen/src/ewk_webview_backend.h | 10 +- .../tizen/src/webview_backend_factory.cc | 14 - .../tizen/src/wv_internal_api_binding.cc | 219 ----------- .../tizen/src/wv_internal_api_binding.h | 356 ----------------- .../tizen/src/wv_webview_backend.cc | 371 +++++++++--------- .../tizen/src/wv_webview_backend.h | 35 +- 16 files changed, 538 insertions(+), 1172 deletions(-) create mode 100644 packages/webview_flutter/tizen/inc/ftpw_webview_flutter.h create mode 100755 packages/webview_flutter/tizen/lib/aarch64/libftpw_webview_flutter.so create mode 100755 packages/webview_flutter/tizen/lib/armel/libftpw_webview_flutter.so create mode 100755 packages/webview_flutter/tizen/lib/i586/libftpw_webview_flutter.so create mode 100755 packages/webview_flutter/tizen/lib/x86_64/libftpw_webview_flutter.so delete mode 100644 packages/webview_flutter/tizen/src/ewk_internal_api_binding.cc delete mode 100644 packages/webview_flutter/tizen/src/ewk_internal_api_binding.h delete mode 100644 packages/webview_flutter/tizen/src/wv_internal_api_binding.cc delete mode 100644 packages/webview_flutter/tizen/src/wv_internal_api_binding.h diff --git a/packages/webview_flutter/CHANGELOG.md b/packages/webview_flutter/CHANGELOG.md index d3720af7f..74b93b9f9 100644 --- a/packages/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/CHANGELOG.md @@ -2,6 +2,7 @@ * Omit obvious local variable types. * Reformat with a line length of 100. +* Use wrapper API. ## 0.11.0 diff --git a/packages/webview_flutter/tizen/inc/ftpw_webview_flutter.h b/packages/webview_flutter/tizen/inc/ftpw_webview_flutter.h new file mode 100644 index 000000000..5f5649149 --- /dev/null +++ b/packages/webview_flutter/tizen/inc/ftpw_webview_flutter.h @@ -0,0 +1,287 @@ +// Copyright 2026 Samsung Electronics Co., Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#ifndef FLUTTER_TIZEN_PLUGINS_WRAPPER_WEBVIEW_FLUTTER_H_ +#define FLUTTER_TIZEN_PLUGINS_WRAPPER_WEBVIEW_FLUTTER_H_ + +#include + +typedef enum { + EWK_TOUCH_START, + EWK_TOUCH_MOVE, + EWK_TOUCH_END, +} Ewk_Touch_Event_Type; + +typedef struct _Ewk_Touch_Point Ewk_Touch_Point; + +typedef enum { + EWK_MOUSE_BUTTON_LEFT = 1, + EWK_MOUSE_BUTTON_MIDDLE = 2, + EWK_MOUSE_BUTTON_RIGHT = 3 +} Ewk_Mouse_Button_Type; + +struct _Ewk_Touch_Point { + int id; + int x; + int y; + int state; +}; + +typedef unsigned char (*Ewk_View_JavaScript_Alert_Callback)( + void *o, const char *alert_text, void *user_data); +typedef unsigned char (*Ewk_View_JavaScript_Confirm_Callback)( + void *o, const char *message, void *user_data); +typedef unsigned char (*Ewk_View_JavaScript_Prompt_Callback)( + void *o, const char *message, const char *default_value, void *user_data); + +typedef enum { + EWK_CONSOLE_MESSAGE_LEVEL_NULL, + EWK_CONSOLE_MESSAGE_LEVEL_LOG, + EWK_CONSOLE_MESSAGE_LEVEL_WARNING, + EWK_CONSOLE_MESSAGE_LEVEL_ERROR, + EWK_CONSOLE_MESSAGE_LEVEL_DEBUG, + EWK_CONSOLE_MESSAGE_LEVEL_INFO, +} Ewk_Console_Message_Level; + +typedef enum { + WV_HTTP_METHOD_GET, + WV_HTTP_METHOD_POST = 2, +} wv_http_method_e; + +typedef enum { + WV_TOUCH_EVENT_START, + WV_TOUCH_EVENT_MOVE, + WV_TOUCH_EVENT_END, +} wv_touch_event_type_e; + +typedef enum { + WV_TOUCH_POINT_STATE_DOWN, + WV_TOUCH_POINT_STATE_UP, + WV_TOUCH_POINT_STATE_MOVE, +} wv_touch_point_state_e; + +typedef enum { + WV_MODIFIER_NONE = 0, + WV_MODIFIER_SHIFT = 1 << 0, + WV_MODIFIER_CONTROL = 1 << 1, + WV_MODIFIER_ALT = 1 << 2, + WV_MODIFIER_SUPER = 1 << 3, + WV_MODIFIER_HYPER = 1 << 4, + WV_MODIFIER_CAPS_LOCK = 1 << 5, + WV_MODIFIER_NUM_LOCK = 1 << 6 +} wv_modifier_e; + +typedef enum { + WV_MOUSE_BUTTON_LEFT = 1, + WV_MOUSE_BUTTON_MIDDLE = 2, + WV_MOUSE_BUTTON_RIGHT = 3 +} wv_mouse_button_type_e; + +typedef enum { + WV_CONSOLE_MESSAGE_LEVEL_NULL, + WV_CONSOLE_MESSAGE_LEVEL_LOG, + WV_CONSOLE_MESSAGE_LEVEL_WARNING, + WV_CONSOLE_MESSAGE_LEVEL_ERROR, + WV_CONSOLE_MESSAGE_LEVEL_DEBUG, + WV_CONSOLE_MESSAGE_LEVEL_INFO +} wv_console_message_level_e; + +typedef struct { + int id; + int x; + int y; + wv_touch_point_state_e state; +} wv_touch_point_s; + +typedef struct { + const char *key_name; + const char *key; + const char *string; + const char *compose; + unsigned int timestamp; + wv_modifier_e modifiers; + int event_flags; + unsigned int key_code; +} wv_key_event_s; + +typedef struct { + const char *name; + void *body; +} wv_script_message_s; + +typedef void (*wv_view_cb)(void *obj, void *event_info, void *user_data); +typedef void (*wv_view_script_execute_cb)(void *view, const char *result_value, + void *user_data); +typedef void (*wv_view_script_message_cb)(void *view, + wv_script_message_s message); +typedef bool (*wv_view_javascript_alert_cb)(void *view, const char *alert_text, + void *user_data); +typedef bool (*wv_view_javascript_confirm_cb)(void *view, const char *message, + void *user_data); +typedef bool (*wv_view_javascript_prompt_cb)(void *view, const char *message, + const char *default_value, + void *user_data); + +#ifdef __cplusplus +extern "C" { +#endif + +unsigned char ftpw_webview_flutter_ewk_view_bg_color_set(void *obj, int r, + int g, int b, int a); +unsigned char ftpw_webview_flutter_ewk_view_touch_events_enabled_set( + void *view, unsigned char enabled); +unsigned char ftpw_webview_flutter_ewk_view_feed_touch_event( + void *obj, Ewk_Touch_Event_Type type, const void *points, + const void *modifiers); +unsigned char ftpw_webview_flutter_ewk_view_mouse_events_enabled_set( + void *view, unsigned char enabled); +unsigned char ftpw_webview_flutter_ewk_view_feed_mouse_down( + void *obj, Ewk_Mouse_Button_Type button, int x, int y); +unsigned char ftpw_webview_flutter_ewk_view_feed_mouse_up( + void *obj, Ewk_Mouse_Button_Type button, int x, int y); +unsigned char ftpw_webview_flutter_ewk_view_feed_mouse_wheel( + void *obj, unsigned char y_direction, int step, int x, int y); +unsigned char ftpw_webview_flutter_ewk_view_send_key_event( + void *obj, void *key_event, unsigned char is_press); +void ftpw_webview_flutter_ewk_view_offscreen_rendering_enabled_set( + void *obj, unsigned char enabled); +void ftpw_webview_flutter_ewk_view_ime_window_set(void *obj, void *window); +unsigned char ftpw_webview_flutter_ewk_view_key_events_enabled_set( + void *obj, unsigned char enabled); +unsigned char ftpw_webview_flutter_ewk_view_set_support_video_hole( + void *obj, void *window, unsigned char enabled, unsigned char boo); +void ftpw_webview_flutter_ewk_view_javascript_alert_callback_set( + void *o, Ewk_View_JavaScript_Alert_Callback callback, void *user_data); +void ftpw_webview_flutter_ewk_view_javascript_confirm_callback_set( + void *o, Ewk_View_JavaScript_Confirm_Callback callback, void *user_data); +void ftpw_webview_flutter_ewk_view_javascript_prompt_callback_set( + void *o, Ewk_View_JavaScript_Prompt_Callback callback, void *user_data); +void ftpw_webview_flutter_ewk_view_javascript_alert_reply(void *o); +void ftpw_webview_flutter_ewk_view_javascript_confirm_reply( + void *o, unsigned char result); +void ftpw_webview_flutter_ewk_view_javascript_prompt_reply(void *o, + const char *result); +unsigned char ftpw_webview_flutter_ewk_view_main_frame_scrollbar_visible_set( + void *obj, unsigned char enabled); +void ftpw_webview_flutter_ewk_set_arguments(int argc, char **argv); +int ftpw_webview_flutter_ewk_set_version_policy(int preference); +void ftpw_webview_flutter_ewk_settings_ime_panel_enabled_set( + void *settings, unsigned char enabled); +void ftpw_webview_flutter_ewk_settings_force_zoom_set(void *settings, + unsigned char enable); +Ewk_Console_Message_Level ftpw_webview_flutter_ewk_console_message_level_get( + const void *message); +const char *ftpw_webview_flutter_ewk_console_message_text_get( + const void *message); +int ftpw_webview_flutter_wv_init(void); +int ftpw_webview_flutter_wv_shutdown(void); +int ftpw_webview_flutter_wv_set_arguments(int argc, const char **argv); +void *ftpw_webview_flutter_wv_view_create(void); +void ftpw_webview_flutter_wv_view_destroy(void *view); +void ftpw_webview_flutter_wv_view_resize(void *view, int w, int h); +bool ftpw_webview_flutter_wv_view_focus_set(void *view, int focused); +bool ftpw_webview_flutter_wv_view_url_set(void *view, const char *url); +const char *ftpw_webview_flutter_wv_view_url_get(void *view); +bool ftpw_webview_flutter_wv_view_url_request_set(void *view, const char *url, + wv_http_method_e method, + void *headers, + const char *body); +bool ftpw_webview_flutter_wv_view_html_string_load(void *view, const char *html, + const char *base_url, + const char *unreachable_url); +bool ftpw_webview_flutter_wv_view_back_possible(void *view); +bool ftpw_webview_flutter_wv_view_forward_possible(void *view); +bool ftpw_webview_flutter_wv_view_back(void *view); +bool ftpw_webview_flutter_wv_view_forward(void *view); +bool ftpw_webview_flutter_wv_view_reload(void *view); +bool ftpw_webview_flutter_wv_view_stop(void *view); +void ftpw_webview_flutter_wv_view_suspend(void *view); +void ftpw_webview_flutter_wv_view_resume(void *view); +const char *ftpw_webview_flutter_wv_view_title_get(void *view); +bool ftpw_webview_flutter_wv_view_user_agent_set(void *view, + const char *user_agent); +const char *ftpw_webview_flutter_wv_view_user_agent_get(void *view); +bool ftpw_webview_flutter_wv_view_scroll_set(void *view, int x, int y); +void ftpw_webview_flutter_wv_view_scroll_by(void *view, int dx, int dy); +bool ftpw_webview_flutter_wv_view_scroll_pos_get(void *view, int *x, int *y); +bool ftpw_webview_flutter_wv_view_script_execute( + void *view, const char *script, wv_view_script_execute_cb callback, + void *user_data); +bool ftpw_webview_flutter_wv_view_bg_color_set(void *view, int r, int g, int b, + int a); +void *ftpw_webview_flutter_wv_view_context_get(void *view); +void *ftpw_webview_flutter_wv_view_settings_get(void *view); +int ftpw_webview_flutter_wv_view_feed_touch_event( + void *view, wv_touch_event_type_e event_type, void *points, + wv_modifier_e modifiers); +int ftpw_webview_flutter_wv_view_feed_mouse_down(void *view, + wv_mouse_button_type_e button, + int x, int y); +int ftpw_webview_flutter_wv_view_feed_mouse_up(void *view, + wv_mouse_button_type_e button, + int x, int y); +int ftpw_webview_flutter_wv_view_feed_mouse_wheel(void *view, bool y_direction, + int step, int x, int y); +int ftpw_webview_flutter_wv_view_send_key_event(void *view, + const wv_key_event_s *key_event, + int is_press); +int ftpw_webview_flutter_wv_view_touch_events_enabled_set(void *view, + int enabled); +bool ftpw_webview_flutter_wv_view_mouse_events_enabled_set(void *view, + bool enabled); +bool ftpw_webview_flutter_wv_view_key_events_enabled_set(void *view, + bool enabled); +void ftpw_webview_flutter_wv_view_ime_window_set(void *view, void *window); +int ftpw_webview_flutter_wv_view_add_cb(void *view, const char *event, + wv_view_cb func, const void *user_data); +int ftpw_webview_flutter_wv_view_remove_full_cb(void *view, const char *event, + wv_view_cb func, + const void *user_data); +int ftpw_webview_flutter_wv_view_javascript_alert_callback_set( + void *view, wv_view_javascript_alert_cb callback, void *user_data); +int ftpw_webview_flutter_wv_view_javascript_confirm_callback_set( + void *view, wv_view_javascript_confirm_cb callback, void *user_data); +int ftpw_webview_flutter_wv_view_javascript_prompt_callback_set( + void *view, wv_view_javascript_prompt_cb callback, void *user_data); +void ftpw_webview_flutter_wv_view_javascript_alert_reply(void *view); +void ftpw_webview_flutter_wv_view_javascript_confirm_reply(void *view, + bool result); +void ftpw_webview_flutter_wv_view_javascript_prompt_reply(void *view, + const char *result); +bool ftpw_webview_flutter_wv_view_javascript_message_handler_add( + void *view, wv_view_script_message_cb callback, const char *name); +bool ftpw_webview_flutter_wv_view_set_support_video_hole(void *view, + void *window, + bool enable, + bool is_video_window); +bool ftpw_webview_flutter_wv_view_main_frame_scrollbar_visible_set( + void *view, bool visible); +void *ftpw_webview_flutter_wv_context_cookie_manager_get(void *context); +int ftpw_webview_flutter_wv_context_cache_model_set(void *context); +int ftpw_webview_flutter_wv_context_web_storage_delete_all(void *context); +int ftpw_webview_flutter_wv_context_cache_clear(void *context); +int ftpw_webview_flutter_wv_cookie_manager_accept_policy_set(void *manager); +int ftpw_webview_flutter_wv_cookie_manager_cookies_clear(void *manager); +bool ftpw_webview_flutter_wv_settings_javascript_enabled_set(void *settings, + bool enable); +void ftpw_webview_flutter_wv_settings_ime_panel_enabled_set(void *settings, + bool enable); +bool ftpw_webview_flutter_wv_settings_force_zoom_set(void *settings, + bool enable); +int ftpw_webview_flutter_wv_error_code_get(void *error); +const char *ftpw_webview_flutter_wv_error_description_get(void *error); +const char *ftpw_webview_flutter_wv_error_url_get(void *error); +int ftpw_webview_flutter_wv_policy_decision_use(void *policy_decision); +const char *ftpw_webview_flutter_wv_policy_decision_url_get( + void *policy_decision); +int ftpw_webview_flutter_wv_policy_decision_response_status_code_get( + void *policy_decision); +wv_console_message_level_e ftpw_webview_flutter_wv_console_message_level_get( + void *message); +const char *ftpw_webview_flutter_wv_console_message_text_get(void *message); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/packages/webview_flutter/tizen/lib/aarch64/libftpw_webview_flutter.so b/packages/webview_flutter/tizen/lib/aarch64/libftpw_webview_flutter.so new file mode 100755 index 0000000000000000000000000000000000000000..d034714a9c78a2a36a46edab2159b47ac1619420 GIT binary patch literal 45976 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 kFAsZ2Ub%Vy(Q-xh07@JGAI5fm=l}o! literal 0 HcmV?d00001 diff --git a/packages/webview_flutter/tizen/lib/i586/libftpw_webview_flutter.so b/packages/webview_flutter/tizen/lib/i586/libftpw_webview_flutter.so new file mode 100755 index 0000000000000000000000000000000000000000..333851e0d20d8ade71770fca16880aeb88f316a8 GIT binary patch literal 39748 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 literal 0 HcmV?d00001 diff --git a/packages/webview_flutter/tizen/lib/x86_64/libftpw_webview_flutter.so b/packages/webview_flutter/tizen/lib/x86_64/libftpw_webview_flutter.so new file mode 100755 index 0000000000000000000000000000000000000000..8f4fe2ec300cad17d2cb0b427335715f463b3001 GIT binary patch literal 41968 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 - -EwkInternalApiBinding::EwkInternalApiBinding() { - handle_ = dlopen("libchromium-ewk.so", RTLD_LAZY); -} - -EwkInternalApiBinding::~EwkInternalApiBinding() { - if (handle_) { - dlclose(handle_); - } -} - -bool EwkInternalApiBinding::Initialize() { - if (initialize_result_.has_value()) { - return *initialize_result_; - } - - if (!handle_) { - initialize_result_ = false; - return false; - } - - // ewk_view - view.BgColorSet = reinterpret_cast( - dlsym(handle_, "ewk_view_bg_color_set")); - view.TouchEventsEnabledSet = - reinterpret_cast( - dlsym(handle_, "ewk_view_touch_events_enabled_set")); - view.FeedTouchEvent = reinterpret_cast( - dlsym(handle_, "ewk_view_feed_touch_event")); - view.MouseEventsEnabledSet = - reinterpret_cast( - dlsym(handle_, "ewk_view_mouse_events_enabled_set")); - view.FeedMouseDown = reinterpret_cast( - dlsym(handle_, "ewk_view_feed_mouse_down")); - view.FeedMouseUp = reinterpret_cast( - dlsym(handle_, "ewk_view_feed_mouse_up")); - view.FeedMouseMove = reinterpret_cast( - dlsym(handle_, "ewk_view_feed_mouse_move")); - view.FeedMouseWheel = reinterpret_cast( - dlsym(handle_, "ewk_view_feed_mouse_wheel")); - view.SendKeyEvent = reinterpret_cast( - dlsym(handle_, "ewk_view_send_key_event")); - view.OffscreenRenderingEnabledSet = - reinterpret_cast( - dlsym(handle_, "ewk_view_offscreen_rendering_enabled_set")); - view.ImeWindowSet = reinterpret_cast( - dlsym(handle_, "ewk_view_ime_window_set")); - view.KeyEventsEnabledSet = reinterpret_cast( - dlsym(handle_, "ewk_view_key_events_enabled_set")); - view.SetSupportVideoHole = reinterpret_cast( - dlsym(handle_, "ewk_view_set_support_video_hole")); - - view.OnJavaScriptAlert = - reinterpret_cast( - dlsym(handle_, "ewk_view_javascript_alert_callback_set")); - view.OnJavaScriptConfirm = - reinterpret_cast( - dlsym(handle_, "ewk_view_javascript_confirm_callback_set")); - view.OnJavaScriptPrompt = - reinterpret_cast( - dlsym(handle_, "ewk_view_javascript_prompt_callback_set")); - - view.JavaScriptAlertReply = - reinterpret_cast( - dlsym(handle_, "ewk_view_javascript_alert_reply")); - view.JavaScriptConfirmReply = - reinterpret_cast( - dlsym(handle_, "ewk_view_javascript_confirm_reply")); - view.JavaScriptPromptReply = - reinterpret_cast( - dlsym(handle_, "ewk_view_javascript_prompt_reply")); - - view.MainFrameScrollbarVisibleSet = - reinterpret_cast( - dlsym(handle_, "ewk_view_main_frame_scrollbar_visible_set")); - - // ewk_main - main.SetArguments = reinterpret_cast( - dlsym(handle_, "ewk_set_arguments")); - - main.SetVersionPolicy = reinterpret_cast( - dlsym(handle_, "ewk_set_version_policy")); - - // ewk_settings - settings.ImePanelEnabledSet = - reinterpret_cast( - dlsym(handle_, "ewk_settings_ime_panel_enabled_set")); - settings.ForceZoomSet = reinterpret_cast( - dlsym(handle_, "ewk_settings_force_zoom_set")); - - // ewk_console_message - console_message.LevelGet = reinterpret_cast( - dlsym(handle_, "ewk_console_message_level_get")); - console_message.TextGet = reinterpret_cast( - dlsym(handle_, "ewk_console_message_text_get")); - console_message.LineGet = reinterpret_cast( - dlsym(handle_, "ewk_console_message_line_get")); - console_message.SourceGet = reinterpret_cast( - dlsym(handle_, "ewk_console_message_source_get")); - - initialize_result_ = - view.BgColorSet && view.TouchEventsEnabledSet && view.FeedTouchEvent && - view.MouseEventsEnabledSet && view.FeedMouseDown && view.FeedMouseUp && - view.FeedMouseMove && view.FeedMouseWheel && view.SendKeyEvent && - view.OffscreenRenderingEnabledSet && view.ImeWindowSet && - view.KeyEventsEnabledSet && view.SetSupportVideoHole && - view.OnJavaScriptAlert && view.OnJavaScriptConfirm && - view.OnJavaScriptPrompt && view.JavaScriptAlertReply && - view.JavaScriptConfirmReply && view.JavaScriptPromptReply && - view.MainFrameScrollbarVisibleSet && main.SetArguments && - main.SetVersionPolicy && settings.ImePanelEnabledSet && - settings.ForceZoomSet && console_message.LevelGet && - console_message.TextGet && console_message.LineGet && - console_message.SourceGet; - return *initialize_result_; -} diff --git a/packages/webview_flutter/tizen/src/ewk_internal_api_binding.h b/packages/webview_flutter/tizen/src/ewk_internal_api_binding.h deleted file mode 100644 index 37b02f15f..000000000 --- a/packages/webview_flutter/tizen/src/ewk_internal_api_binding.h +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2022 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_PLUGIN_EWK_INTERNAL_API_BINDING_H_ -#define FLUTTER_PLUGIN_EWK_INTERNAL_API_BINDING_H_ - -#include - -#include - -typedef enum { - EWK_TOUCH_START, - EWK_TOUCH_MOVE, - EWK_TOUCH_END, - EWK_TOUCH_CANCEL -} Ewk_Touch_Event_Type; - -typedef struct _Ewk_Touch_Point Ewk_Touch_Point; - -typedef enum { - EWK_MOUSE_BUTTON_LEFT = 1, - EWK_MOUSE_BUTTON_MIDDLE = 2, - EWK_MOUSE_BUTTON_RIGHT = 3 -} Ewk_Mouse_Button_Type; - -struct _Ewk_Touch_Point { - int id; - int x; - int y; - Evas_Touch_Point_State state; -}; - -typedef Eina_Bool (*Ewk_View_JavaScript_Alert_Callback)(Evas_Object* o, - const char* alert_text, - void* user_data); -typedef Eina_Bool (*Ewk_View_JavaScript_Confirm_Callback)(Evas_Object* o, - const char* message, - void* user_data); -typedef Eina_Bool (*Ewk_View_JavaScript_Prompt_Callback)( - Evas_Object* o, const char* message, const char* default_value, - void* user_data); -typedef void (*Ewk_View_Main_Frame_Scrollbar_Visible_Get_Callback)( - Evas_Object* o, Eina_Bool visible, void* user_data); - -typedef Eina_Bool (*EwkViewBgColorSetFnPtr)(Evas_Object* obj, int r, int g, - int b, int a); -typedef Eina_Bool (*EwkViewTouchEventsEnabledSetFnPtr)(Evas_Object* view, - Eina_Bool enabled); -typedef Eina_Bool (*EwkViewFeedTouchEventFnPtr)(Evas_Object* obj, - Ewk_Touch_Event_Type type, - const Eina_List* points, - const Evas_Modifier* modifiers); -typedef Eina_Bool (*EwkViewMouseEventsEnabledSetFnPtr)(Evas_Object* view, - Eina_Bool enabled); -typedef Eina_Bool (*EwkViewFeedMouseDownFnPtr)(Evas_Object* obj, - Ewk_Mouse_Button_Type button, - int x, int y); -typedef Eina_Bool (*EwkViewFeedMouseUpFnPtr)(Evas_Object* obj, - Ewk_Mouse_Button_Type button, - int x, int y); -typedef Eina_Bool (*EwkViewFeedMouseMoveFnPtr)(Evas_Object* obj, int x, int y); -typedef Eina_Bool (*EwkViewFeedMouseWheelFnPtr)(Evas_Object* obj, - Eina_Bool y_direction, int step, - int x, int y); -typedef Eina_Bool (*EwkViewSendKeyEventFnPtr)(Evas_Object* obj, void* key_event, - Eina_Bool is_press); -typedef void (*EwkViewOffscreenRenderingEnabledSetFnPtr)(Evas_Object* obj, - Eina_Bool enabled); -typedef void (*EwkViewImeWindowSetFnPtr)(Evas_Object* obj, void* window); -typedef Eina_Bool (*EwkViewKeyEventsEnabledSetFnPtr)(Evas_Object* obj, - Eina_Bool enabled); -typedef Eina_Bool (*EwkViewSetSupportVideoHoleFnPtr)(Evas_Object* obj, - void* window, - Eina_Bool enabled, - Eina_Bool boo); -typedef void (*EwkViewJavaScriptAlertCallbackSetFnPtr)( - Evas_Object* o, Ewk_View_JavaScript_Alert_Callback callback, - void* user_data); -typedef void (*EwkViewJavaScriptConfirmCallbackSetFnPtr)( - Evas_Object* o, Ewk_View_JavaScript_Confirm_Callback callback, - void* user_data); -typedef void (*EwkViewJavaScriptPromptCallbackSetFnPtr)( - Evas_Object* o, Ewk_View_JavaScript_Prompt_Callback callback, - void* user_data); -typedef void (*EwkViewJavaScriptAlertReplyFnPtr)(Evas_Object* o); -typedef void (*EwkViewJavaScriptConfirmReplyFnPtr)(Evas_Object* o, - Eina_Bool result); -typedef void (*EwkViewJavaScriptPromptReplyFnPtr)(Evas_Object* o, - const char* result); -typedef Eina_Bool (*EwkViewMainFrameScrollbarVisibleSetFnPtr)( - Evas_Object* obj, Eina_Bool enabled); - -typedef struct { - EwkViewBgColorSetFnPtr BgColorSet = nullptr; - EwkViewTouchEventsEnabledSetFnPtr TouchEventsEnabledSet = nullptr; - EwkViewFeedTouchEventFnPtr FeedTouchEvent = nullptr; - EwkViewMouseEventsEnabledSetFnPtr MouseEventsEnabledSet = nullptr; - EwkViewFeedMouseDownFnPtr FeedMouseDown = nullptr; - EwkViewFeedMouseUpFnPtr FeedMouseUp = nullptr; - EwkViewFeedMouseMoveFnPtr FeedMouseMove = nullptr; - EwkViewFeedMouseWheelFnPtr FeedMouseWheel = nullptr; - EwkViewSendKeyEventFnPtr SendKeyEvent = nullptr; - EwkViewOffscreenRenderingEnabledSetFnPtr OffscreenRenderingEnabledSet = - nullptr; - EwkViewImeWindowSetFnPtr ImeWindowSet = nullptr; - EwkViewKeyEventsEnabledSetFnPtr KeyEventsEnabledSet = nullptr; - EwkViewSetSupportVideoHoleFnPtr SetSupportVideoHole = nullptr; - EwkViewJavaScriptAlertCallbackSetFnPtr OnJavaScriptAlert = nullptr; - EwkViewJavaScriptConfirmCallbackSetFnPtr OnJavaScriptConfirm = nullptr; - EwkViewJavaScriptPromptCallbackSetFnPtr OnJavaScriptPrompt = nullptr; - EwkViewJavaScriptAlertReplyFnPtr JavaScriptAlertReply = nullptr; - EwkViewJavaScriptConfirmReplyFnPtr JavaScriptConfirmReply = nullptr; - EwkViewJavaScriptPromptReplyFnPtr JavaScriptPromptReply = nullptr; - EwkViewMainFrameScrollbarVisibleSetFnPtr MainFrameScrollbarVisibleSet = - nullptr; -} EwkViewProcTable; - -typedef void (*EwkSetArgumentsFnPtr)(int argc, char** argv); -typedef int (*EwkSetVersionPolicyFnPtr)(int preference); - -typedef struct { - EwkSetArgumentsFnPtr SetArguments = nullptr; - EwkSetVersionPolicyFnPtr SetVersionPolicy = nullptr; -} EwkMainProcTable; - -typedef struct Ewk_Settings Ewk_Settings; -typedef void (*EwkSettingsImePanelEnabledSetFnPtr)(Ewk_Settings* settings, - Eina_Bool enabled); -typedef void (*EwkSettingsForceZoomSetFnPtr)(Ewk_Settings* settings, - Eina_Bool enable); - -typedef struct { - EwkSettingsImePanelEnabledSetFnPtr ImePanelEnabledSet = nullptr; - EwkSettingsForceZoomSetFnPtr ForceZoomSet = nullptr; -} EwkSettingsProcTable; - -typedef struct _Ewk_Console_Message Ewk_Console_Message; - -typedef enum { - EWK_CONSOLE_MESSAGE_LEVEL_NULL, - EWK_CONSOLE_MESSAGE_LEVEL_LOG, - EWK_CONSOLE_MESSAGE_LEVEL_WARNING, - EWK_CONSOLE_MESSAGE_LEVEL_ERROR, - EWK_CONSOLE_MESSAGE_LEVEL_DEBUG, - EWK_CONSOLE_MESSAGE_LEVEL_INFO, -} Ewk_Console_Message_Level; - -typedef Ewk_Console_Message_Level (*EwkConsoleMessageLevelGetFnPtr)( - const Ewk_Console_Message* message); -typedef Eina_Stringshare* (*EwkConsoleMessageTextGetFnPtr)( - const Ewk_Console_Message* message); -typedef unsigned (*EwkConsoleMessageLineGetFnPtr)( - const Ewk_Console_Message* message); -typedef Eina_Stringshare* (*EwkConsoleMessageSourceGetFnPtr)( - const Ewk_Console_Message* message); - -typedef struct { - EwkConsoleMessageLevelGetFnPtr LevelGet = nullptr; - EwkConsoleMessageTextGetFnPtr TextGet = nullptr; - EwkConsoleMessageLineGetFnPtr LineGet = nullptr; - EwkConsoleMessageSourceGetFnPtr SourceGet = nullptr; -} EwkConsoleMessageProcTable; - -class EwkInternalApiBinding { - public: - static EwkInternalApiBinding& GetInstance() { - static EwkInternalApiBinding instance = EwkInternalApiBinding(); - return instance; - } - - ~EwkInternalApiBinding(); - - EwkInternalApiBinding(const EwkInternalApiBinding&) = delete; - EwkInternalApiBinding& operator=(const EwkInternalApiBinding&) = delete; - - // Resolves every symbol, and returns true only if all of them were found. - // Safe to call more than once — the first result is cached. - bool Initialize(); - - EwkViewProcTable view; - EwkMainProcTable main; - EwkSettingsProcTable settings; - EwkConsoleMessageProcTable console_message; - - private: - EwkInternalApiBinding(); - - void* handle_ = nullptr; - std::optional initialize_result_; -}; - -#endif // FLUTTER_PLUGIN_EWK_INTERNAL_API_BINDING_H_ diff --git a/packages/webview_flutter/tizen/src/ewk_webview_backend.cc b/packages/webview_flutter/tizen/src/ewk_webview_backend.cc index 95c825740..ce782641a 100644 --- a/packages/webview_flutter/tizen/src/ewk_webview_backend.cc +++ b/packages/webview_flutter/tizen/src/ewk_webview_backend.cc @@ -96,7 +96,7 @@ bool EwkWebViewBackend::Create(double width, double height, void* window, if (engine_policy) { LOG_INFO("Upgrade web engine used."); - EwkInternalApiBinding::GetInstance().main.SetVersionPolicy(1); + ftpw_webview_flutter_ewk_set_version_policy(1); } char* chromium_argv[] = { @@ -106,8 +106,7 @@ bool EwkWebViewBackend::Create(double width, double height, void* window, const_cast("--no-zygote"), }; int chromium_argc = sizeof(chromium_argv) / sizeof(chromium_argv[0]); - EwkInternalApiBinding::GetInstance().main.SetArguments(chromium_argc, - chromium_argv); + ftpw_webview_flutter_ewk_set_arguments(chromium_argc, chromium_argv); Ecore_Evas* evas = GetOffscreenHost(); if (!evas) { @@ -120,8 +119,7 @@ bool EwkWebViewBackend::Create(double width, double height, void* window, } ecore_evas_focus_set(evas, true); ewk_view_focus_set(view_, true); - EwkInternalApiBinding::GetInstance().view.OffscreenRenderingEnabledSet(view_, - true); + ftpw_webview_flutter_ewk_view_offscreen_rendering_enabled_set(view_, true); Ewk_Context* context = ewk_view_context_get(view_); Ewk_Cookie_Manager* cookie_manager = ewk_context_cookie_manager_get(context); @@ -131,30 +129,30 @@ bool EwkWebViewBackend::Create(double width, double height, void* window, } ewk_context_cache_model_set(context, EWK_CACHE_MODEL_PRIMARY_WEBBROWSER); - EwkInternalApiBinding::GetInstance().settings.ImePanelEnabledSet( + ftpw_webview_flutter_ewk_settings_ime_panel_enabled_set( ewk_view_settings_get(view_), true); - EwkInternalApiBinding::GetInstance().settings.ForceZoomSet( - ewk_view_settings_get(view_), true); - EwkInternalApiBinding::GetInstance().view.ImeWindowSet(view_, window_); - EwkInternalApiBinding::GetInstance().view.KeyEventsEnabledSet(view_, true); + ftpw_webview_flutter_ewk_settings_force_zoom_set(ewk_view_settings_get(view_), + true); + ftpw_webview_flutter_ewk_view_ime_window_set(view_, window_); + ftpw_webview_flutter_ewk_view_key_events_enabled_set(view_, true); #ifdef WEBVIEW_TIZEN_TOUCH_EVENTS_ENABLED - EwkInternalApiBinding::GetInstance().view.TouchEventsEnabledSet(view_, true); - EwkInternalApiBinding::GetInstance().view.MouseEventsEnabledSet(view_, false); + ftpw_webview_flutter_ewk_view_touch_events_enabled_set(view_, true); + ftpw_webview_flutter_ewk_view_mouse_events_enabled_set(view_, false); #else - EwkInternalApiBinding::GetInstance().view.TouchEventsEnabledSet(view_, false); - EwkInternalApiBinding::GetInstance().view.MouseEventsEnabledSet(view_, true); + ftpw_webview_flutter_ewk_view_touch_events_enabled_set(view_, false); + ftpw_webview_flutter_ewk_view_mouse_events_enabled_set(view_, true); #endif - EwkInternalApiBinding::GetInstance().view.OnJavaScriptAlert( + ftpw_webview_flutter_ewk_view_javascript_alert_callback_set( view_, &EwkWebViewBackend::OnJavaScriptAlertDialog, this); - EwkInternalApiBinding::GetInstance().view.OnJavaScriptConfirm( + ftpw_webview_flutter_ewk_view_javascript_confirm_callback_set( view_, &EwkWebViewBackend::OnJavaScriptConfirmDialog, this); - EwkInternalApiBinding::GetInstance().view.OnJavaScriptPrompt( + ftpw_webview_flutter_ewk_view_javascript_prompt_callback_set( view_, &EwkWebViewBackend::OnJavaScriptPromptDialog, this); #ifdef TV_PROFILE - EwkInternalApiBinding::GetInstance().view.SetSupportVideoHole(view_, window_, - true, false); + ftpw_webview_flutter_ewk_view_set_support_video_hole(view_, window_, true, + false); #endif evas_object_smart_callback_add(view_, "offscreen,frame,rendered", @@ -211,11 +209,11 @@ std::function EwkWebViewBackend::PrepareTeardown( evas_object_smart_callback_del(instance, "url,changed", &EwkWebViewBackend::OnUrlChange); - EwkInternalApiBinding::GetInstance().view.OnJavaScriptAlert( + ftpw_webview_flutter_ewk_view_javascript_alert_callback_set( instance, nullptr, nullptr); - EwkInternalApiBinding::GetInstance().view.OnJavaScriptConfirm( + ftpw_webview_flutter_ewk_view_javascript_confirm_callback_set( instance, nullptr, nullptr); - EwkInternalApiBinding::GetInstance().view.OnJavaScriptPrompt( + ftpw_webview_flutter_ewk_view_javascript_prompt_callback_set( instance, nullptr, nullptr); evas_object_data_del(instance, kEwkInstance); @@ -272,8 +270,8 @@ void EwkWebViewBackend::SendTouchEvent(int event_type, double x, double y) { point->state = state; points = eina_list_append(points, point); - EwkInternalApiBinding::GetInstance().view.FeedTouchEvent( - view_, mouse_event_type, points, 0); + ftpw_webview_flutter_ewk_view_feed_touch_event(view_, mouse_event_type, + points, 0); eina_list_free(points); } @@ -298,16 +296,16 @@ void EwkWebViewBackend::SendMouseEvent(int event_type, int button_type, if (event_type == 0) { mouse_button_type_ = mouse_button_type; - EwkInternalApiBinding::GetInstance().view.FeedMouseDown( - view_, mouse_button_type_, px, py); + ftpw_webview_flutter_ewk_view_feed_mouse_down(view_, mouse_button_type_, px, + py); } else if (event_type == 1) { if (dy != 0) { - EwkInternalApiBinding::GetInstance().view.FeedMouseWheel( - view_, true, dy > 0 ? 1 : -1, px, py); + ftpw_webview_flutter_ewk_view_feed_mouse_wheel(view_, true, + dy > 0 ? 1 : -1, px, py); } } else if (event_type == 2) { - EwkInternalApiBinding::GetInstance().view.FeedMouseUp( - view_, mouse_button_type_, px, py); + ftpw_webview_flutter_ewk_view_feed_mouse_up(view_, mouse_button_type_, px, + py); mouse_button_type_ = mouse_button_type; } else { LOG_WARN("Unknown mouse event type: %d", event_type); @@ -341,16 +339,14 @@ bool EwkWebViewBackend::SendKey(const char* key, const char* string, down_event.string = string; down_event.modifiers = evas_modifiers; down_event.locks = evas_locks; - EwkInternalApiBinding::GetInstance().view.SendKeyEvent(view_, &down_event, - is_down); + ftpw_webview_flutter_ewk_view_send_key_event(view_, &down_event, is_down); } else { Evas_Event_Key_Up up_event = {}; up_event.key = key; up_event.modifiers = evas_modifiers; up_event.locks = evas_locks; up_event.string = string; - EwkInternalApiBinding::GetInstance().view.SendKeyEvent(view_, &up_event, - is_down); + ftpw_webview_flutter_ewk_view_send_key_event(view_, &up_event, is_down); } return true; } @@ -480,7 +476,7 @@ void EwkWebViewBackend::GetScrollPosition(int32_t* x, int32_t* y) { } void EwkWebViewBackend::SetBackgroundColor(int r, int g, int b, int a) { - EwkInternalApiBinding::GetInstance().view.BgColorSet(view_, r, g, b, a); + ftpw_webview_flutter_ewk_view_bg_color_set(view_, r, g, b, a); } void EwkWebViewBackend::SetUserAgent(const std::string& user_agent) { @@ -492,27 +488,25 @@ std::string EwkWebViewBackend::GetUserAgent() { } void EwkWebViewBackend::EnableZoom(bool enabled) { - EwkInternalApiBinding::GetInstance().settings.ForceZoomSet( - ewk_view_settings_get(view_), enabled); + ftpw_webview_flutter_ewk_settings_force_zoom_set(ewk_view_settings_get(view_), + enabled); } void EwkWebViewBackend::JavaScriptAlertReply() { - EwkInternalApiBinding::GetInstance().view.JavaScriptAlertReply(view_); + ftpw_webview_flutter_ewk_view_javascript_alert_reply(view_); } void EwkWebViewBackend::JavaScriptConfirmReply(bool result) { - EwkInternalApiBinding::GetInstance().view.JavaScriptConfirmReply(view_, - result); + ftpw_webview_flutter_ewk_view_javascript_confirm_reply(view_, result); } void EwkWebViewBackend::JavaScriptPromptReply(const std::string& result) { - EwkInternalApiBinding::GetInstance().view.JavaScriptPromptReply( - view_, result.c_str()); + ftpw_webview_flutter_ewk_view_javascript_prompt_reply(view_, result.c_str()); } void EwkWebViewBackend::SetScrollbarVisible(bool visible) { scrollbar_enabled_ = visible; - EwkInternalApiBinding::GetInstance().view.MainFrameScrollbarVisibleSet( + ftpw_webview_flutter_ewk_view_main_frame_scrollbar_visible_set( view_, scrollbar_enabled_); } @@ -537,7 +531,7 @@ void EwkWebViewBackend::OnFrameRendered(void* data, Evas_Object* obj, void EwkWebViewBackend::OnLoadStarted(void* data, Evas_Object* obj, void* event_info) { EwkWebViewBackend* backend = static_cast(data); - EwkInternalApiBinding::GetInstance().view.MainFrameScrollbarVisibleSet( + ftpw_webview_flutter_ewk_view_main_frame_scrollbar_visible_set( backend->view_, backend->scrollbar_enabled_); backend->delegate_->OnLoadStarted( std::string(ewk_view_url_get(backend->view_))); @@ -570,13 +564,12 @@ void EwkWebViewBackend::OnLoadError(void* data, Evas_Object* obj, void EwkWebViewBackend::OnConsoleMessage(void* data, Evas_Object* obj, void* event_info) { EwkWebViewBackend* backend = static_cast(data); - Ewk_Console_Message* message = static_cast(event_info); Ewk_Console_Message_Level log_level = - EwkInternalApiBinding::GetInstance().console_message.LevelGet(message); - std::string text = - EwkInternalApiBinding::GetInstance().console_message.TextGet(message); + ftpw_webview_flutter_ewk_console_message_level_get(event_info); + const char* text = + ftpw_webview_flutter_ewk_console_message_text_get(event_info); backend->delegate_->OnConsoleMessage(ConvertLogLevelToString(log_level), - text); + text ? text : ""); } void EwkWebViewBackend::OnNavigationPolicy(void* data, Evas_Object* obj, @@ -639,7 +632,7 @@ void EwkWebViewBackend::OnJavaScriptMessage(Evas_Object* obj, } } -Eina_Bool EwkWebViewBackend::OnJavaScriptAlertDialog(Evas_Object* o, +Eina_Bool EwkWebViewBackend::OnJavaScriptAlertDialog(void* o, const char* message, void* data) { EwkWebViewBackend* backend = static_cast(data); @@ -648,7 +641,7 @@ Eina_Bool EwkWebViewBackend::OnJavaScriptAlertDialog(Evas_Object* o, return true; } -Eina_Bool EwkWebViewBackend::OnJavaScriptConfirmDialog(Evas_Object* o, +Eina_Bool EwkWebViewBackend::OnJavaScriptConfirmDialog(void* o, const char* message, void* data) { EwkWebViewBackend* backend = static_cast(data); @@ -657,7 +650,7 @@ Eina_Bool EwkWebViewBackend::OnJavaScriptConfirmDialog(Evas_Object* o, return true; } -Eina_Bool EwkWebViewBackend::OnJavaScriptPromptDialog(Evas_Object* o, +Eina_Bool EwkWebViewBackend::OnJavaScriptPromptDialog(void* o, const char* message, const char* default_text, void* data) { diff --git a/packages/webview_flutter/tizen/src/ewk_webview_backend.h b/packages/webview_flutter/tizen/src/ewk_webview_backend.h index 56b0dc644..8d141ffcf 100644 --- a/packages/webview_flutter/tizen/src/ewk_webview_backend.h +++ b/packages/webview_flutter/tizen/src/ewk_webview_backend.h @@ -15,7 +15,7 @@ #include #include -#include "ewk_internal_api_binding.h" +#include "ftpw_webview_flutter.h" #include "webview_backend.h" typedef struct _Ecore_Evas Ecore_Evas; @@ -96,11 +96,11 @@ class EwkWebViewBackend : public WebViewBackend { static void OnEvaluateJavaScript(Evas_Object* obj, const char* result_value, void* user_data); static void OnJavaScriptMessage(Evas_Object* obj, Ewk_Script_Message message); - static Eina_Bool OnJavaScriptAlertDialog(Evas_Object* o, const char* message, + static Eina_Bool OnJavaScriptAlertDialog(void* o, const char* message, void* data); - static Eina_Bool OnJavaScriptConfirmDialog(Evas_Object* o, - const char* message, void* data); - static Eina_Bool OnJavaScriptPromptDialog(Evas_Object* o, const char* message, + static Eina_Bool OnJavaScriptConfirmDialog(void* o, const char* message, + void* data); + static Eina_Bool OnJavaScriptPromptDialog(void* o, const char* message, const char* default_text, void* data); diff --git a/packages/webview_flutter/tizen/src/webview_backend_factory.cc b/packages/webview_flutter/tizen/src/webview_backend_factory.cc index 361d6579a..6db166967 100644 --- a/packages/webview_flutter/tizen/src/webview_backend_factory.cc +++ b/packages/webview_flutter/tizen/src/webview_backend_factory.cc @@ -7,10 +7,8 @@ #include #include -#include "ewk_internal_api_binding.h" #include "ewk_webview_backend.h" #include "log.h" -#include "wv_internal_api_binding.h" #include "wv_webview_backend.h" namespace { @@ -55,26 +53,14 @@ std::unique_ptr WebViewBackendFactory::Create( LOG_ERROR("WV engine is not initialized; cannot create WebView."); return nullptr; } - if (!WvInternalApiBinding::GetInstance().Initialize()) { - LOG_ERROR("Failed to initialize WV APIs."); - return nullptr; - } return std::make_unique(delegate); } - if (!EwkInternalApiBinding::GetInstance().Initialize()) { - LOG_ERROR("Failed to initialize EWK internal APIs."); - return nullptr; - } return std::make_unique(delegate); } void WebViewBackendFactory::InitializeEngine() { BackendKind kind = kSelectedBackend; if (kind != BackendKind::kEwk) { - if (!WvInternalApiBinding::GetInstance().Initialize()) { - LOG_ERROR("Failed to initialize WV APIs; engine not started."); - return; - } if (!WvWebViewBackend::GlobalInitialize(kind == BackendKind::kWvStandalone)) { LOG_ERROR("wv_init() failed; engine not started."); diff --git a/packages/webview_flutter/tizen/src/wv_internal_api_binding.cc b/packages/webview_flutter/tizen/src/wv_internal_api_binding.cc deleted file mode 100644 index ecaf5154e..000000000 --- a/packages/webview_flutter/tizen/src/wv_internal_api_binding.cc +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright 2026 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "wv_internal_api_binding.h" - -#include - -WvInternalApiBinding::WvInternalApiBinding() { - // The wv_* dispatcher lives in the same library as the ewk_* one. - handle_ = dlopen("libchromium-ewk.so", RTLD_LAZY); -} - -WvInternalApiBinding::~WvInternalApiBinding() { - if (handle_) { - dlclose(handle_); - } -} - -bool WvInternalApiBinding::Initialize() { - if (initialize_result_.has_value()) { - return *initialize_result_; - } - - if (!handle_) { - initialize_result_ = false; - return false; - } - - // wv_main - main.Init = reinterpret_cast(dlsym(handle_, "wv_init")); - main.Shutdown = - reinterpret_cast(dlsym(handle_, "wv_shutdown")); - main.SetArguments = - reinterpret_cast(dlsym(handle_, "wv_set_arguments")); - - // wv_view - view.Create = - reinterpret_cast(dlsym(handle_, "wv_view_create")); - view.Destroy = - reinterpret_cast(dlsym(handle_, "wv_view_destroy")); - view.Resize = - reinterpret_cast(dlsym(handle_, "wv_view_resize")); - view.FocusSet = reinterpret_cast( - dlsym(handle_, "wv_view_focus_set")); - view.UrlSet = - reinterpret_cast(dlsym(handle_, "wv_view_url_set")); - view.UrlGet = - reinterpret_cast(dlsym(handle_, "wv_view_url_get")); - view.UrlRequestSet = reinterpret_cast( - dlsym(handle_, "wv_view_url_request_set")); - view.HtmlStringLoad = reinterpret_cast( - dlsym(handle_, "wv_view_html_string_load")); - view.BackPossible = reinterpret_cast( - dlsym(handle_, "wv_view_back_possible")); - view.ForwardPossible = reinterpret_cast( - dlsym(handle_, "wv_view_forward_possible")); - view.Back = reinterpret_cast(dlsym(handle_, "wv_view_back")); - view.Forward = - reinterpret_cast(dlsym(handle_, "wv_view_forward")); - view.Reload = - reinterpret_cast(dlsym(handle_, "wv_view_reload")); - view.Stop = reinterpret_cast(dlsym(handle_, "wv_view_stop")); - view.Suspend = - reinterpret_cast(dlsym(handle_, "wv_view_suspend")); - view.Resume = - reinterpret_cast(dlsym(handle_, "wv_view_resume")); - view.TitleGet = reinterpret_cast( - dlsym(handle_, "wv_view_title_get")); - view.UserAgentSet = reinterpret_cast( - dlsym(handle_, "wv_view_user_agent_set")); - view.UserAgentGet = reinterpret_cast( - dlsym(handle_, "wv_view_user_agent_get")); - view.ScrollSet = reinterpret_cast( - dlsym(handle_, "wv_view_scroll_set")); - view.ScrollBy = reinterpret_cast( - dlsym(handle_, "wv_view_scroll_by")); - view.ScrollPosGet = reinterpret_cast( - dlsym(handle_, "wv_view_scroll_pos_get")); - view.ScriptExecute = reinterpret_cast( - dlsym(handle_, "wv_view_script_execute")); - view.BgColorSet = reinterpret_cast( - dlsym(handle_, "wv_view_bg_color_set")); - view.ContextGet = reinterpret_cast( - dlsym(handle_, "wv_view_context_get")); - view.SettingsGet = reinterpret_cast( - dlsym(handle_, "wv_view_settings_get")); - view.FeedTouchEvent = reinterpret_cast( - dlsym(handle_, "wv_view_feed_touch_event")); - view.FeedMouseDown = reinterpret_cast( - dlsym(handle_, "wv_view_feed_mouse_down")); - view.FeedMouseUp = reinterpret_cast( - dlsym(handle_, "wv_view_feed_mouse_up")); - view.FeedMouseMove = reinterpret_cast( - dlsym(handle_, "wv_view_feed_mouse_move")); - view.FeedMouseWheel = reinterpret_cast( - dlsym(handle_, "wv_view_feed_mouse_wheel")); - view.SendKeyEvent = reinterpret_cast( - dlsym(handle_, "wv_view_send_key_event")); - view.TouchEventsEnabledSet = - reinterpret_cast( - dlsym(handle_, "wv_view_touch_events_enabled_set")); - view.MouseEventsEnabledSet = - reinterpret_cast( - dlsym(handle_, "wv_view_mouse_events_enabled_set")); - view.KeyEventsEnabledSet = reinterpret_cast( - dlsym(handle_, "wv_view_key_events_enabled_set")); - view.ImeWindowSet = reinterpret_cast( - dlsym(handle_, "wv_view_ime_window_set")); - view.AddCallback = reinterpret_cast( - dlsym(handle_, "wv_view_add_cb")); - view.RemoveFullCallback = reinterpret_cast( - dlsym(handle_, "wv_view_remove_full_cb")); - view.OnJavaScriptAlert = - reinterpret_cast( - dlsym(handle_, "wv_view_javascript_alert_callback_set")); - view.OnJavaScriptConfirm = - reinterpret_cast( - dlsym(handle_, "wv_view_javascript_confirm_callback_set")); - view.OnJavaScriptPrompt = - reinterpret_cast( - dlsym(handle_, "wv_view_javascript_prompt_callback_set")); - view.JavaScriptAlertReply = reinterpret_cast( - dlsym(handle_, "wv_view_javascript_alert_reply")); - view.JavaScriptConfirmReply = - reinterpret_cast( - dlsym(handle_, "wv_view_javascript_confirm_reply")); - view.JavaScriptPromptReply = - reinterpret_cast( - dlsym(handle_, "wv_view_javascript_prompt_reply")); - view.JavaScriptMessageHandlerAdd = - reinterpret_cast( - dlsym(handle_, "wv_view_javascript_message_handler_add")); - view.SetSupportVideoHole = reinterpret_cast( - dlsym(handle_, "wv_view_set_support_video_hole")); - view.MainFrameScrollbarVisibleSet = - reinterpret_cast( - dlsym(handle_, "wv_view_main_frame_scrollbar_visible_set")); - - // wv_context - context.CookieManagerGet = reinterpret_cast( - dlsym(handle_, "wv_context_cookie_manager_get")); - context.CacheModelSet = reinterpret_cast( - dlsym(handle_, "wv_context_cache_model_set")); - context.WebStorageDeleteAll = - reinterpret_cast( - dlsym(handle_, "wv_context_web_storage_delete_all")); - context.CacheClear = reinterpret_cast( - dlsym(handle_, "wv_context_cache_clear")); - - // wv_cookie_manager - cookie_manager.AcceptPolicySet = - reinterpret_cast( - dlsym(handle_, "wv_cookie_manager_accept_policy_set")); - cookie_manager.CookiesClear = - reinterpret_cast( - dlsym(handle_, "wv_cookie_manager_cookies_clear")); - - // wv_settings - settings.JavaScriptEnabledSet = - reinterpret_cast( - dlsym(handle_, "wv_settings_javascript_enabled_set")); - settings.ImePanelEnabledSet = - reinterpret_cast( - dlsym(handle_, "wv_settings_ime_panel_enabled_set")); - settings.ForceZoomSet = reinterpret_cast( - dlsym(handle_, "wv_settings_force_zoom_set")); - - // wv_error - error.CodeGet = reinterpret_cast( - dlsym(handle_, "wv_error_code_get")); - error.DescriptionGet = reinterpret_cast( - dlsym(handle_, "wv_error_description_get")); - error.UrlGet = - reinterpret_cast(dlsym(handle_, "wv_error_url_get")); - - // wv_policy_decision - policy_decision.Use = reinterpret_cast( - dlsym(handle_, "wv_policy_decision_use")); - policy_decision.UrlGet = reinterpret_cast( - dlsym(handle_, "wv_policy_decision_url_get")); - policy_decision.ResponseStatusCodeGet = - reinterpret_cast( - dlsym(handle_, "wv_policy_decision_response_status_code_get")); - - // wv_console_message - console_message.LevelGet = reinterpret_cast( - dlsym(handle_, "wv_console_message_level_get")); - console_message.TextGet = reinterpret_cast( - dlsym(handle_, "wv_console_message_text_get")); - - initialize_result_ = - main.Init && main.Shutdown && main.SetArguments && view.Create && - view.Destroy && view.Resize && view.FocusSet && view.UrlSet && - view.UrlGet && view.UrlRequestSet && view.HtmlStringLoad && - view.BackPossible && view.ForwardPossible && view.Back && view.Forward && - view.Reload && view.Stop && view.Suspend && view.Resume && - view.TitleGet && view.UserAgentSet && view.UserAgentGet && - view.ScrollSet && view.ScrollBy && view.ScrollPosGet && - view.ScriptExecute && view.BgColorSet && view.ContextGet && - view.SettingsGet && view.FeedTouchEvent && view.FeedMouseDown && - view.FeedMouseUp && view.FeedMouseMove && view.FeedMouseWheel && - view.SendKeyEvent && view.TouchEventsEnabledSet && - view.MouseEventsEnabledSet && view.KeyEventsEnabledSet && - view.ImeWindowSet && view.AddCallback && view.RemoveFullCallback && - view.OnJavaScriptAlert && view.OnJavaScriptConfirm && - view.OnJavaScriptPrompt && view.JavaScriptAlertReply && - view.JavaScriptConfirmReply && view.JavaScriptPromptReply && - view.JavaScriptMessageHandlerAdd && view.SetSupportVideoHole && - view.MainFrameScrollbarVisibleSet && context.CookieManagerGet && - context.CacheModelSet && context.WebStorageDeleteAll && - context.CacheClear && cookie_manager.AcceptPolicySet && - cookie_manager.CookiesClear && settings.JavaScriptEnabledSet && - settings.ImePanelEnabledSet && settings.ForceZoomSet && error.CodeGet && - error.DescriptionGet && error.UrlGet && policy_decision.Use && - policy_decision.UrlGet && policy_decision.ResponseStatusCodeGet && - console_message.LevelGet && console_message.TextGet; - return *initialize_result_; -} diff --git a/packages/webview_flutter/tizen/src/wv_internal_api_binding.h b/packages/webview_flutter/tizen/src/wv_internal_api_binding.h deleted file mode 100644 index c358aec5f..000000000 --- a/packages/webview_flutter/tizen/src/wv_internal_api_binding.h +++ /dev/null @@ -1,356 +0,0 @@ -// Copyright 2026 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_PLUGIN_WV_INTERNAL_API_BINDING_H_ -#define FLUTTER_PLUGIN_WV_INTERNAL_API_BINDING_H_ - -#include - -#include - -typedef struct wv_view_s* wv_view_h; -typedef struct wv_context_s* wv_context_h; -typedef struct wv_settings_s* wv_settings_h; -typedef struct wv_cookie_manager_s* wv_cookie_manager_h; -typedef struct wv_error_s* wv_error_h; -typedef struct wv_policy_decision_s* wv_policy_decision_h; -typedef struct wv_console_message_s* wv_console_message_h; - -typedef enum { - WV_HTTP_METHOD_GET, - WV_HTTP_METHOD_HEAD, - WV_HTTP_METHOD_POST, - WV_HTTP_METHOD_PUT, - WV_HTTP_METHOD_DELETE, -} wv_http_method_e; - -typedef enum { - WV_CACHE_MODEL_DOCUMENT_VIEWER, - WV_CACHE_MODEL_DOCUMENT_BROWSER, - WV_CACHE_MODEL_PRIMARY_WEBBROWSER -} wv_cache_model_e; - -typedef enum { - WV_TOUCH_EVENT_START, - WV_TOUCH_EVENT_MOVE, - WV_TOUCH_EVENT_END, - WV_TOUCH_EVENT_CANCEL -} wv_touch_event_type_e; - -typedef enum { - WV_TOUCH_POINT_STATE_DOWN, - WV_TOUCH_POINT_STATE_UP, - WV_TOUCH_POINT_STATE_MOVE, - WV_TOUCH_POINT_STATE_STILL, - WV_TOUCH_POINT_STATE_CANCEL -} wv_touch_point_state_e; - -typedef enum { - WV_MODIFIER_NONE = 0, - WV_MODIFIER_SHIFT = 1 << 0, - WV_MODIFIER_CONTROL = 1 << 1, - WV_MODIFIER_ALT = 1 << 2, - WV_MODIFIER_SUPER = 1 << 3, - WV_MODIFIER_HYPER = 1 << 4, - WV_MODIFIER_CAPS_LOCK = 1 << 5, - WV_MODIFIER_NUM_LOCK = 1 << 6 -} wv_modifier_e; - -typedef enum { - WV_MOUSE_BUTTON_LEFT = 1, - WV_MOUSE_BUTTON_MIDDLE = 2, - WV_MOUSE_BUTTON_RIGHT = 3 -} wv_mouse_button_type_e; - -typedef enum { - WV_COOKIE_ACCEPT_POLICY_ALWAYS, - WV_COOKIE_ACCEPT_POLICY_NEVER, - WV_COOKIE_ACCEPT_POLICY_NO_THIRD_PARTY -} wv_cookie_accept_policy_e; - -typedef enum { - WV_CONSOLE_MESSAGE_LEVEL_NULL, - WV_CONSOLE_MESSAGE_LEVEL_LOG, - WV_CONSOLE_MESSAGE_LEVEL_WARNING, - WV_CONSOLE_MESSAGE_LEVEL_ERROR, - WV_CONSOLE_MESSAGE_LEVEL_DEBUG, - WV_CONSOLE_MESSAGE_LEVEL_INFO -} wv_console_message_level_e; - -typedef struct { - int id; - int x; - int y; - wv_touch_point_state_e state; -} wv_touch_point_s; - -typedef struct { - const char* key_name; - const char* key; - const char* string; - const char* compose; - unsigned int timestamp; - wv_modifier_e modifiers; - int event_flags; - unsigned int key_code; -} wv_key_event_s; - -typedef struct { - const char* name; - void* body; -} wv_script_message_s; - -typedef void (*wv_view_cb)(wv_view_h obj, void* event_info, void* user_data); -typedef void (*wv_view_script_execute_cb)(wv_view_h view, - const char* result_value, - void* user_data); -typedef void (*wv_view_script_message_cb)(wv_view_h view, - wv_script_message_s message); -typedef bool (*wv_view_javascript_alert_cb)(wv_view_h view, - const char* alert_text, - void* user_data); -typedef bool (*wv_view_javascript_confirm_cb)(wv_view_h view, - const char* message, - void* user_data); -typedef bool (*wv_view_javascript_prompt_cb)(wv_view_h view, - const char* message, - const char* default_value, - void* user_data); - -typedef int (*WvInitFnPtr)(void); -typedef int (*WvShutdownFnPtr)(void); -typedef int (*WvSetArgumentsFnPtr)(int argc, const char** argv); - -typedef struct { - WvInitFnPtr Init = nullptr; - WvShutdownFnPtr Shutdown = nullptr; - WvSetArgumentsFnPtr SetArguments = nullptr; -} WvMainProcTable; - -typedef wv_view_h (*WvViewCreateFnPtr)(void); -typedef void (*WvViewDestroyFnPtr)(wv_view_h view); -typedef void (*WvViewResizeFnPtr)(wv_view_h view, int w, int h); -typedef bool (*WvViewFocusSetFnPtr)(wv_view_h view, int focused); -typedef bool (*WvViewUrlSetFnPtr)(wv_view_h view, const char* url); -typedef const char* (*WvViewUrlGetFnPtr)(wv_view_h view); -typedef bool (*WvViewUrlRequestSetFnPtr)(wv_view_h view, const char* url, - wv_http_method_e method, void* headers, - const char* body); -typedef bool (*WvViewHtmlStringLoadFnPtr)(wv_view_h view, const char* html, - const char* base_url, - const char* unreachable_url); -typedef bool (*WvViewBackPossibleFnPtr)(wv_view_h view); -typedef bool (*WvViewForwardPossibleFnPtr)(wv_view_h view); -typedef bool (*WvViewBackFnPtr)(wv_view_h view); -typedef bool (*WvViewForwardFnPtr)(wv_view_h view); -typedef bool (*WvViewReloadFnPtr)(wv_view_h view); -typedef bool (*WvViewStopFnPtr)(wv_view_h view); -typedef void (*WvViewSuspendFnPtr)(wv_view_h view); -typedef void (*WvViewResumeFnPtr)(wv_view_h view); -typedef const char* (*WvViewTitleGetFnPtr)(wv_view_h view); -typedef bool (*WvViewUserAgentSetFnPtr)(wv_view_h view, const char* user_agent); -typedef const char* (*WvViewUserAgentGetFnPtr)(wv_view_h view); -typedef bool (*WvViewScrollSetFnPtr)(wv_view_h view, int x, int y); -typedef void (*WvViewScrollByFnPtr)(wv_view_h view, int dx, int dy); -typedef bool (*WvViewScrollPosGetFnPtr)(wv_view_h view, int* x, int* y); -typedef bool (*WvViewScriptExecuteFnPtr)(wv_view_h view, const char* script, - wv_view_script_execute_cb callback, - void* user_data); -typedef bool (*WvViewJavaScriptMessageHandlerAddFnPtr)( - wv_view_h view, wv_view_script_message_cb callback, const char* name); -typedef bool (*WvViewBgColorSetFnPtr)(wv_view_h view, int r, int g, int b, - int a); -typedef wv_context_h (*WvViewContextGetFnPtr)(wv_view_h view); -typedef wv_settings_h (*WvViewSettingsGetFnPtr)(wv_view_h view); -typedef int (*WvViewFeedTouchEventFnPtr)(wv_view_h view, - wv_touch_event_type_e event_type, - GList* points, - wv_modifier_e modifiers); -typedef int (*WvViewFeedMouseDownFnPtr)(wv_view_h view, - wv_mouse_button_type_e button, int x, - int y); -typedef int (*WvViewFeedMouseUpFnPtr)(wv_view_h view, - wv_mouse_button_type_e button, int x, - int y); -typedef int (*WvViewFeedMouseMoveFnPtr)(wv_view_h view, int x, int y); -typedef int (*WvViewFeedMouseWheelFnPtr)(wv_view_h view, bool y_direction, - int step, int x, int y); -typedef int (*WvViewSendKeyEventFnPtr)(wv_view_h view, - const wv_key_event_s* key_event, - int is_press); -typedef int (*WvViewTouchEventsEnabledSetFnPtr)(wv_view_h view, int enabled); -typedef bool (*WvViewMouseEventsEnabledSetFnPtr)(wv_view_h view, bool enabled); -typedef bool (*WvViewKeyEventsEnabledSetFnPtr)(wv_view_h view, bool enabled); -typedef void (*WvViewImeWindowSetFnPtr)(wv_view_h view, void* window); -typedef int (*WvViewAddCallbackFnPtr)(wv_view_h view, const char* event, - wv_view_cb func, const void* user_data); -typedef int (*WvViewRemoveFullCallbackFnPtr)(wv_view_h view, const char* event, - wv_view_cb func, - const void* user_data); -typedef int (*WvViewJavaScriptAlertCallbackSetFnPtr)( - wv_view_h view, wv_view_javascript_alert_cb callback, void* user_data); -typedef int (*WvViewJavaScriptConfirmCallbackSetFnPtr)( - wv_view_h view, wv_view_javascript_confirm_cb callback, void* user_data); -typedef int (*WvViewJavaScriptPromptCallbackSetFnPtr)( - wv_view_h view, wv_view_javascript_prompt_cb callback, void* user_data); -typedef void (*WvViewJavaScriptAlertReplyFnPtr)(wv_view_h view); -typedef void (*WvViewJavaScriptConfirmReplyFnPtr)(wv_view_h view, bool result); -typedef void (*WvViewJavaScriptPromptReplyFnPtr)(wv_view_h view, - const char* result); -typedef bool (*WvViewSetSupportVideoHoleFnPtr)(wv_view_h view, void* window, - bool enable, - bool is_video_window); -typedef bool (*WvViewMainFrameScrollbarVisibleSetFnPtr)(wv_view_h view, - bool visible); - -typedef struct { - WvViewCreateFnPtr Create = nullptr; - WvViewDestroyFnPtr Destroy = nullptr; - WvViewResizeFnPtr Resize = nullptr; - WvViewFocusSetFnPtr FocusSet = nullptr; - WvViewUrlSetFnPtr UrlSet = nullptr; - WvViewUrlGetFnPtr UrlGet = nullptr; - WvViewUrlRequestSetFnPtr UrlRequestSet = nullptr; - WvViewHtmlStringLoadFnPtr HtmlStringLoad = nullptr; - WvViewBackPossibleFnPtr BackPossible = nullptr; - WvViewForwardPossibleFnPtr ForwardPossible = nullptr; - WvViewBackFnPtr Back = nullptr; - WvViewForwardFnPtr Forward = nullptr; - WvViewReloadFnPtr Reload = nullptr; - WvViewStopFnPtr Stop = nullptr; - WvViewSuspendFnPtr Suspend = nullptr; - WvViewResumeFnPtr Resume = nullptr; - WvViewTitleGetFnPtr TitleGet = nullptr; - WvViewUserAgentSetFnPtr UserAgentSet = nullptr; - WvViewUserAgentGetFnPtr UserAgentGet = nullptr; - WvViewScrollSetFnPtr ScrollSet = nullptr; - WvViewScrollByFnPtr ScrollBy = nullptr; - WvViewScrollPosGetFnPtr ScrollPosGet = nullptr; - WvViewScriptExecuteFnPtr ScriptExecute = nullptr; - WvViewBgColorSetFnPtr BgColorSet = nullptr; - WvViewContextGetFnPtr ContextGet = nullptr; - WvViewSettingsGetFnPtr SettingsGet = nullptr; - WvViewFeedTouchEventFnPtr FeedTouchEvent = nullptr; - WvViewFeedMouseDownFnPtr FeedMouseDown = nullptr; - WvViewFeedMouseUpFnPtr FeedMouseUp = nullptr; - WvViewFeedMouseMoveFnPtr FeedMouseMove = nullptr; - WvViewFeedMouseWheelFnPtr FeedMouseWheel = nullptr; - WvViewSendKeyEventFnPtr SendKeyEvent = nullptr; - WvViewTouchEventsEnabledSetFnPtr TouchEventsEnabledSet = nullptr; - WvViewMouseEventsEnabledSetFnPtr MouseEventsEnabledSet = nullptr; - WvViewKeyEventsEnabledSetFnPtr KeyEventsEnabledSet = nullptr; - WvViewImeWindowSetFnPtr ImeWindowSet = nullptr; - WvViewAddCallbackFnPtr AddCallback = nullptr; - WvViewRemoveFullCallbackFnPtr RemoveFullCallback = nullptr; - WvViewJavaScriptAlertCallbackSetFnPtr OnJavaScriptAlert = nullptr; - WvViewJavaScriptConfirmCallbackSetFnPtr OnJavaScriptConfirm = nullptr; - WvViewJavaScriptPromptCallbackSetFnPtr OnJavaScriptPrompt = nullptr; - WvViewJavaScriptAlertReplyFnPtr JavaScriptAlertReply = nullptr; - WvViewJavaScriptConfirmReplyFnPtr JavaScriptConfirmReply = nullptr; - WvViewJavaScriptPromptReplyFnPtr JavaScriptPromptReply = nullptr; - WvViewJavaScriptMessageHandlerAddFnPtr JavaScriptMessageHandlerAdd = nullptr; - WvViewSetSupportVideoHoleFnPtr SetSupportVideoHole = nullptr; - WvViewMainFrameScrollbarVisibleSetFnPtr MainFrameScrollbarVisibleSet = - nullptr; -} WvViewProcTable; - -typedef wv_cookie_manager_h (*WvContextCookieManagerGetFnPtr)( - wv_context_h context); -typedef int (*WvContextCacheModelSetFnPtr)(wv_context_h context, - wv_cache_model_e model); -typedef int (*WvContextWebStorageDeleteAllFnPtr)(wv_context_h context); -typedef int (*WvContextCacheClearFnPtr)(wv_context_h context); - -typedef struct { - WvContextCookieManagerGetFnPtr CookieManagerGet = nullptr; - WvContextCacheModelSetFnPtr CacheModelSet = nullptr; - WvContextWebStorageDeleteAllFnPtr WebStorageDeleteAll = nullptr; - WvContextCacheClearFnPtr CacheClear = nullptr; -} WvContextProcTable; - -typedef int (*WvCookieManagerAcceptPolicySetFnPtr)( - wv_cookie_manager_h manager, wv_cookie_accept_policy_e policy); -typedef int (*WvCookieManagerCookiesClearFnPtr)(wv_cookie_manager_h manager); - -typedef struct { - WvCookieManagerAcceptPolicySetFnPtr AcceptPolicySet = nullptr; - WvCookieManagerCookiesClearFnPtr CookiesClear = nullptr; -} WvCookieManagerProcTable; - -typedef bool (*WvSettingsJavaScriptEnabledSetFnPtr)(wv_settings_h settings, - bool enable); -typedef void (*WvSettingsImePanelEnabledSetFnPtr)(wv_settings_h settings, - bool enable); -typedef bool (*WvSettingsForceZoomSetFnPtr)(wv_settings_h settings, - bool enable); - -typedef struct { - WvSettingsJavaScriptEnabledSetFnPtr JavaScriptEnabledSet = nullptr; - WvSettingsImePanelEnabledSetFnPtr ImePanelEnabledSet = nullptr; - WvSettingsForceZoomSetFnPtr ForceZoomSet = nullptr; -} WvSettingsProcTable; - -typedef int (*WvErrorCodeGetFnPtr)(wv_error_h error); -typedef const char* (*WvErrorDescriptionGetFnPtr)(wv_error_h error); -typedef const char* (*WvErrorUrlGetFnPtr)(wv_error_h error); - -typedef struct { - WvErrorCodeGetFnPtr CodeGet = nullptr; - WvErrorDescriptionGetFnPtr DescriptionGet = nullptr; - WvErrorUrlGetFnPtr UrlGet = nullptr; -} WvErrorProcTable; - -typedef int (*WvPolicyDecisionUseFnPtr)(wv_policy_decision_h policy_decision); -typedef const char* (*WvPolicyDecisionUrlGetFnPtr)( - wv_policy_decision_h policy_decision); -typedef int (*WvPolicyDecisionResponseStatusCodeGetFnPtr)( - wv_policy_decision_h policy_decision); - -typedef struct { - WvPolicyDecisionUseFnPtr Use = nullptr; - WvPolicyDecisionUrlGetFnPtr UrlGet = nullptr; - WvPolicyDecisionResponseStatusCodeGetFnPtr ResponseStatusCodeGet = nullptr; -} WvPolicyDecisionProcTable; - -typedef wv_console_message_level_e (*WvConsoleMessageLevelGetFnPtr)( - wv_console_message_h message); -typedef const char* (*WvConsoleMessageTextGetFnPtr)( - wv_console_message_h message); - -typedef struct { - WvConsoleMessageLevelGetFnPtr LevelGet = nullptr; - WvConsoleMessageTextGetFnPtr TextGet = nullptr; -} WvConsoleMessageProcTable; - -class WvInternalApiBinding { - public: - static WvInternalApiBinding& GetInstance() { - static WvInternalApiBinding instance = WvInternalApiBinding(); - return instance; - } - - ~WvInternalApiBinding(); - - WvInternalApiBinding(const WvInternalApiBinding&) = delete; - WvInternalApiBinding& operator=(const WvInternalApiBinding&) = delete; - - bool Initialize(); - - WvMainProcTable main; - WvViewProcTable view; - WvContextProcTable context; - WvCookieManagerProcTable cookie_manager; - WvSettingsProcTable settings; - WvErrorProcTable error; - WvPolicyDecisionProcTable policy_decision; - WvConsoleMessageProcTable console_message; - - private: - WvInternalApiBinding(); - - void* handle_ = nullptr; - std::optional initialize_result_; -}; - -#endif // FLUTTER_PLUGIN_WV_INTERNAL_API_BINDING_H_ diff --git a/packages/webview_flutter/tizen/src/wv_webview_backend.cc b/packages/webview_flutter/tizen/src/wv_webview_backend.cc index 7771b62b1..7102c6ed2 100644 --- a/packages/webview_flutter/tizen/src/wv_webview_backend.cc +++ b/packages/webview_flutter/tizen/src/wv_webview_backend.cc @@ -74,14 +74,13 @@ wv_modifier_e ConvertModifiers(unsigned int modifiers) { } std::mutex g_view_registry_mutex; -std::map g_view_registry; +std::map g_view_registry; } // namespace WvWebViewBackend::WvWebViewBackend(Delegate* delegate) : delegate_(delegate) {} bool WvWebViewBackend::GlobalInitialize(bool standalone) { - auto& wv = WvInternalApiBinding::GetInstance(); std::vector argv = { "--disable-pinch", "--js-flags=--expose-gc", @@ -91,12 +90,13 @@ bool WvWebViewBackend::GlobalInitialize(bool standalone) { if (standalone) { argv.push_back("--enable-wv-standalone"); } - int result = wv.main.SetArguments(static_cast(argv.size()), argv.data()); + int result = ftpw_webview_flutter_wv_set_arguments( + static_cast(argv.size()), argv.data()); if (result != 0) { LOG_ERROR("wv_set_arguments() returned %d.", result); return false; } - result = wv.main.Init(); + result = ftpw_webview_flutter_wv_init(); if (result <= 0) { LOG_ERROR("wv_init() returned %d.", result); return false; @@ -106,74 +106,76 @@ bool WvWebViewBackend::GlobalInitialize(bool standalone) { void WvWebViewBackend::GlobalShutdown() { FlushPendingTeardowns(); - WvInternalApiBinding::GetInstance().main.Shutdown(); + ftpw_webview_flutter_wv_shutdown(); } bool WvWebViewBackend::Create(double width, double height, void* window, bool /*engine_policy*/) { window_ = window; - auto& wv = WvInternalApiBinding::GetInstance(); - - view_ = wv.view.Create(); + view_ = ftpw_webview_flutter_wv_view_create(); if (!view_) { return false; } - wv.view.FocusSet(view_, 1); + ftpw_webview_flutter_wv_view_focus_set(view_, 1); - wv_context_h context = wv.view.ContextGet(view_); - wv_cookie_manager_h cookie_manager = wv.context.CookieManagerGet(context); + void* context = ftpw_webview_flutter_wv_view_context_get(view_); + void* cookie_manager = + ftpw_webview_flutter_wv_context_cookie_manager_get(context); if (cookie_manager) { - wv.cookie_manager.AcceptPolicySet(cookie_manager, - WV_COOKIE_ACCEPT_POLICY_NO_THIRD_PARTY); + ftpw_webview_flutter_wv_cookie_manager_accept_policy_set(cookie_manager); } - wv.context.CacheModelSet(context, WV_CACHE_MODEL_PRIMARY_WEBBROWSER); + ftpw_webview_flutter_wv_context_cache_model_set(context); - wv_settings_h settings = wv.view.SettingsGet(view_); - wv.settings.ImePanelEnabledSet(settings, true); - wv.settings.ForceZoomSet(settings, true); - wv.view.ImeWindowSet(view_, window_); - wv.view.KeyEventsEnabledSet(view_, true); + void* settings = ftpw_webview_flutter_wv_view_settings_get(view_); + ftpw_webview_flutter_wv_settings_ime_panel_enabled_set(settings, true); + ftpw_webview_flutter_wv_settings_force_zoom_set(settings, true); + ftpw_webview_flutter_wv_view_ime_window_set(view_, window_); + ftpw_webview_flutter_wv_view_key_events_enabled_set(view_, true); #ifdef WEBVIEW_TIZEN_TOUCH_EVENTS_ENABLED - wv.view.TouchEventsEnabledSet(view_, true); - wv.view.MouseEventsEnabledSet(view_, false); + ftpw_webview_flutter_wv_view_touch_events_enabled_set(view_, true); + ftpw_webview_flutter_wv_view_mouse_events_enabled_set(view_, false); #else - wv.view.TouchEventsEnabledSet(view_, false); - wv.view.MouseEventsEnabledSet(view_, true); + ftpw_webview_flutter_wv_view_touch_events_enabled_set(view_, false); + ftpw_webview_flutter_wv_view_mouse_events_enabled_set(view_, true); #endif - wv.view.OnJavaScriptAlert(view_, &WvWebViewBackend::OnJavaScriptAlertDialog, - this); - wv.view.OnJavaScriptConfirm( + ftpw_webview_flutter_wv_view_javascript_alert_callback_set( + view_, &WvWebViewBackend::OnJavaScriptAlertDialog, this); + ftpw_webview_flutter_wv_view_javascript_confirm_callback_set( view_, &WvWebViewBackend::OnJavaScriptConfirmDialog, this); - wv.view.OnJavaScriptPrompt(view_, &WvWebViewBackend::OnJavaScriptPromptDialog, - this); + ftpw_webview_flutter_wv_view_javascript_prompt_callback_set( + view_, &WvWebViewBackend::OnJavaScriptPromptDialog, this); #ifdef TV_PROFILE - wv.view.SetSupportVideoHole(view_, window_, true, false); + ftpw_webview_flutter_wv_view_set_support_video_hole(view_, window_, true, + false); #endif - wv.view.AddCallback(view_, "offscreen,frame,rendered", - &WvWebViewBackend::OnFrameRendered, this); - wv.view.AddCallback(view_, "load,started", &WvWebViewBackend::OnLoadStarted, - this); - wv.view.AddCallback(view_, "load,finished", &WvWebViewBackend::OnLoadFinished, - this); - wv.view.AddCallback(view_, "load,progress", &WvWebViewBackend::OnProgress, - this); - wv.view.AddCallback(view_, "load,error", &WvWebViewBackend::OnLoadError, - this); - wv.view.AddCallback(view_, "console,message", - &WvWebViewBackend::OnConsoleMessage, this); - wv.view.AddCallback(view_, "policy,navigation,decide", - &WvWebViewBackend::OnNavigationPolicy, this); - wv.view.AddCallback(view_, "policy,response,decide", - &WvWebViewBackend::OnResponsePolicy, this); - wv.view.AddCallback(view_, "url,changed", &WvWebViewBackend::OnUrlChange, - this); - - wv.view.Resize(view_, static_cast(std::round(width)), - static_cast(std::round(height))); + ftpw_webview_flutter_wv_view_add_cb(view_, "offscreen,frame,rendered", + &WvWebViewBackend::OnFrameRendered, this); + ftpw_webview_flutter_wv_view_add_cb(view_, "load,started", + &WvWebViewBackend::OnLoadStarted, this); + ftpw_webview_flutter_wv_view_add_cb(view_, "load,finished", + &WvWebViewBackend::OnLoadFinished, this); + ftpw_webview_flutter_wv_view_add_cb(view_, "load,progress", + &WvWebViewBackend::OnProgress, this); + ftpw_webview_flutter_wv_view_add_cb(view_, "load,error", + &WvWebViewBackend::OnLoadError, this); + ftpw_webview_flutter_wv_view_add_cb( + view_, "console,message", &WvWebViewBackend::OnConsoleMessage, this); + ftpw_webview_flutter_wv_view_add_cb(view_, "policy,navigation,decide", + &WvWebViewBackend::OnNavigationPolicy, + this); + ftpw_webview_flutter_wv_view_add_cb(view_, "policy,response,decide", + &WvWebViewBackend::OnResponsePolicy, + this); + ftpw_webview_flutter_wv_view_add_cb(view_, "url,changed", + &WvWebViewBackend::OnUrlChange, this); + + ftpw_webview_flutter_wv_view_resize(view_, + static_cast(std::round(width)), + static_cast(std::round(height))); { std::lock_guard lock(g_view_registry_mutex); @@ -185,46 +187,49 @@ bool WvWebViewBackend::Create(double width, double height, void* window, std::function WvWebViewBackend::PrepareTeardown( std::shared_ptr pool) { - wv_view_h instance = view_; + void* instance = view_; view_ = nullptr; std::function destroy; if (instance) { - auto& wv = WvInternalApiBinding::GetInstance(); - wv.view.RemoveFullCallback(instance, "offscreen,frame,rendered", - &WvWebViewBackend::OnFrameRendered, this); - wv.view.RemoveFullCallback(instance, "load,started", - &WvWebViewBackend::OnLoadStarted, this); - wv.view.RemoveFullCallback(instance, "load,finished", - &WvWebViewBackend::OnLoadFinished, this); - wv.view.RemoveFullCallback(instance, "load,progress", - &WvWebViewBackend::OnProgress, this); - wv.view.RemoveFullCallback(instance, "load,error", - &WvWebViewBackend::OnLoadError, this); - wv.view.RemoveFullCallback(instance, "console,message", - &WvWebViewBackend::OnConsoleMessage, this); - wv.view.RemoveFullCallback(instance, "policy,navigation,decide", - &WvWebViewBackend::OnNavigationPolicy, this); - wv.view.RemoveFullCallback(instance, "policy,response,decide", - &WvWebViewBackend::OnResponsePolicy, this); - wv.view.RemoveFullCallback(instance, "url,changed", - &WvWebViewBackend::OnUrlChange, this); - - wv.view.OnJavaScriptAlert(instance, nullptr, nullptr); - wv.view.OnJavaScriptConfirm(instance, nullptr, nullptr); - wv.view.OnJavaScriptPrompt(instance, nullptr, nullptr); + ftpw_webview_flutter_wv_view_remove_full_cb( + instance, "offscreen,frame,rendered", + &WvWebViewBackend::OnFrameRendered, this); + ftpw_webview_flutter_wv_view_remove_full_cb( + instance, "load,started", &WvWebViewBackend::OnLoadStarted, this); + ftpw_webview_flutter_wv_view_remove_full_cb( + instance, "load,finished", &WvWebViewBackend::OnLoadFinished, this); + ftpw_webview_flutter_wv_view_remove_full_cb( + instance, "load,progress", &WvWebViewBackend::OnProgress, this); + ftpw_webview_flutter_wv_view_remove_full_cb( + instance, "load,error", &WvWebViewBackend::OnLoadError, this); + ftpw_webview_flutter_wv_view_remove_full_cb( + instance, "console,message", &WvWebViewBackend::OnConsoleMessage, this); + ftpw_webview_flutter_wv_view_remove_full_cb( + instance, "policy,navigation,decide", + &WvWebViewBackend::OnNavigationPolicy, this); + ftpw_webview_flutter_wv_view_remove_full_cb( + instance, "policy,response,decide", &WvWebViewBackend::OnResponsePolicy, + this); + ftpw_webview_flutter_wv_view_remove_full_cb( + instance, "url,changed", &WvWebViewBackend::OnUrlChange, this); + + ftpw_webview_flutter_wv_view_javascript_alert_callback_set( + instance, nullptr, nullptr); + ftpw_webview_flutter_wv_view_javascript_confirm_callback_set( + instance, nullptr, nullptr); + ftpw_webview_flutter_wv_view_javascript_prompt_callback_set( + instance, nullptr, nullptr); { std::lock_guard lock(g_view_registry_mutex); g_view_registry.erase(instance); } - wv.view.Stop(instance); - wv.view.Suspend(instance); + ftpw_webview_flutter_wv_view_stop(instance); + ftpw_webview_flutter_wv_view_suspend(instance); - destroy = [instance]() { - WvInternalApiBinding::GetInstance().view.Destroy(instance); - }; + destroy = [instance]() { ftpw_webview_flutter_wv_view_destroy(instance); }; } return RegisterPendingTeardown(std::move(pool), std::move(destroy)); @@ -233,9 +238,9 @@ std::function WvWebViewBackend::PrepareTeardown( void WvWebViewBackend::Offset(double left, double top) {} void WvWebViewBackend::Resize(double width, double height) { - WvInternalApiBinding::GetInstance().view.Resize( - view_, static_cast(std::round(width)), - static_cast(std::round(height))); + ftpw_webview_flutter_wv_view_resize(view_, + static_cast(std::round(width)), + static_cast(std::round(height))); } void WvWebViewBackend::Touch(int event_type, int button_type, double x, @@ -270,8 +275,8 @@ void WvWebViewBackend::SendTouchEvent(int event_type, double x, double y) { point.state = state; GList* points = g_list_append(nullptr, &point); - WvInternalApiBinding::GetInstance().view.FeedTouchEvent( - view_, touch_event_type, points, WV_MODIFIER_NONE); + ftpw_webview_flutter_wv_view_feed_touch_event(view_, touch_event_type, points, + WV_MODIFIER_NONE); g_list_free(points); } @@ -294,16 +299,18 @@ void WvWebViewBackend::SendMouseEvent(int event_type, int button_type, double x, int px = static_cast(x); int py = static_cast(y); - auto& wv = WvInternalApiBinding::GetInstance(); if (event_type == 0) { mouse_button_type_ = mouse_button_type; - wv.view.FeedMouseDown(view_, mouse_button_type_, px, py); + ftpw_webview_flutter_wv_view_feed_mouse_down(view_, mouse_button_type_, px, + py); } else if (event_type == 1) { if (dy != 0) { - wv.view.FeedMouseWheel(view_, true, dy > 0 ? 1 : -1, px, py); + ftpw_webview_flutter_wv_view_feed_mouse_wheel(view_, true, + dy > 0 ? 1 : -1, px, py); } } else if (event_type == 2) { - wv.view.FeedMouseUp(view_, mouse_button_type_, px, py); + ftpw_webview_flutter_wv_view_feed_mouse_up(view_, mouse_button_type_, px, + py); mouse_button_type_ = mouse_button_type; } else { LOG_WARN("Unknown mouse event type: %d", event_type); @@ -317,10 +324,9 @@ bool WvWebViewBackend::SendKey(const char* key, const char* string, return false; } - auto& wv = WvInternalApiBinding::GetInstance(); if (strcmp(key, "XF86Back") == 0 && !is_down) { - if (wv.view.BackPossible(view_)) { - wv.view.Back(view_); + if (ftpw_webview_flutter_wv_view_back_possible(view_)) { + ftpw_webview_flutter_wv_view_back(view_); return true; } return false; @@ -333,25 +339,26 @@ bool WvWebViewBackend::SendKey(const char* key, const char* string, key_event.compose = compose; key_event.modifiers = ConvertModifiers(modifiers); key_event.key_code = scan_code; - wv.view.SendKeyEvent(view_, &key_event, is_down ? 1 : 0); + ftpw_webview_flutter_wv_view_send_key_event(view_, &key_event, + is_down ? 1 : 0); return true; } void WvWebViewBackend::Resume() { if (view_) { - WvInternalApiBinding::GetInstance().view.Resume(view_); + ftpw_webview_flutter_wv_view_resume(view_); } } void WvWebViewBackend::Stop() { if (view_) { - WvInternalApiBinding::GetInstance().view.Stop(view_); + ftpw_webview_flutter_wv_view_stop(view_); } } void WvWebViewBackend::SetJavaScriptEnabled(bool enabled) { - auto& wv = WvInternalApiBinding::GetInstance(); - wv.settings.JavaScriptEnabledSet(wv.view.SettingsGet(view_), enabled); + ftpw_webview_flutter_wv_settings_javascript_enabled_set( + ftpw_webview_flutter_wv_view_settings_get(view_), enabled); } void WvWebViewBackend::SetHasNavigationDelegate(bool has_navigation_delegate) { @@ -359,7 +366,7 @@ void WvWebViewBackend::SetHasNavigationDelegate(bool has_navigation_delegate) { } void WvWebViewBackend::LoadUrl(const std::string& url) { - WvInternalApiBinding::GetInstance().view.UrlSet(view_, url.c_str()); + ftpw_webview_flutter_wv_view_url_set(view_, url.c_str()); } bool WvWebViewBackend::LoadUrlRequest( @@ -386,7 +393,7 @@ bool WvWebViewBackend::LoadUrlRequest( strdup(header.second.c_str())); } - bool ret = WvInternalApiBinding::GetInstance().view.UrlRequestSet( + bool ret = ftpw_webview_flutter_wv_view_url_request_set( view_, url.c_str(), wv_method, wv_headers, reinterpret_cast(body.data())); eina_hash_free(wv_headers); @@ -395,32 +402,28 @@ bool WvWebViewBackend::LoadUrlRequest( void WvWebViewBackend::LoadHtmlString(const std::string& html, const std::string& base_url) { - WvInternalApiBinding::GetInstance().view.HtmlStringLoad( - view_, html.c_str(), base_url.c_str(), nullptr); + ftpw_webview_flutter_wv_view_html_string_load(view_, html.c_str(), + base_url.c_str(), nullptr); } bool WvWebViewBackend::CanGoBack() { - return WvInternalApiBinding::GetInstance().view.BackPossible(view_); + return ftpw_webview_flutter_wv_view_back_possible(view_); } bool WvWebViewBackend::CanGoForward() { - return WvInternalApiBinding::GetInstance().view.ForwardPossible(view_); + return ftpw_webview_flutter_wv_view_forward_possible(view_); } -void WvWebViewBackend::GoBack() { - WvInternalApiBinding::GetInstance().view.Back(view_); -} +void WvWebViewBackend::GoBack() { ftpw_webview_flutter_wv_view_back(view_); } void WvWebViewBackend::GoForward() { - WvInternalApiBinding::GetInstance().view.Forward(view_); + ftpw_webview_flutter_wv_view_forward(view_); } -void WvWebViewBackend::Reload() { - WvInternalApiBinding::GetInstance().view.Reload(view_); -} +void WvWebViewBackend::Reload() { ftpw_webview_flutter_wv_view_reload(view_); } std::string WvWebViewBackend::GetCurrentUrl() { - const char* url = WvInternalApiBinding::GetInstance().view.UrlGet(view_); + const char* url = ftpw_webview_flutter_wv_view_url_get(view_); return url ? url : ""; } @@ -429,7 +432,7 @@ void WvWebViewBackend::EvaluateJavaScript( std::function callback) { auto* callback_ptr = new std::function(std::move(callback)); - if (!WvInternalApiBinding::GetInstance().view.ScriptExecute( + if (!ftpw_webview_flutter_wv_view_script_execute( view_, javascript.c_str(), &WvWebViewBackend::OnEvaluateJavaScript, callback_ptr)) { LOG_WARN("wv_view_script_execute failed."); @@ -439,90 +442,84 @@ void WvWebViewBackend::EvaluateJavaScript( } void WvWebViewBackend::RegisterJavaScriptChannel(const std::string& name) { - auto& wv = WvInternalApiBinding::GetInstance(); - wv.view.JavaScriptMessageHandlerAdd( + ftpw_webview_flutter_wv_view_javascript_message_handler_add( view_, &WvWebViewBackend::OnJavaScriptMessage, name.c_str()); } void WvWebViewBackend::ClearCache() { - auto& wv = WvInternalApiBinding::GetInstance(); - wv.context.CacheClear(wv.view.ContextGet(view_)); + ftpw_webview_flutter_wv_context_cache_clear( + ftpw_webview_flutter_wv_view_context_get(view_)); } void WvWebViewBackend::ClearLocalStorage() { - auto& wv = WvInternalApiBinding::GetInstance(); - wv.context.WebStorageDeleteAll(wv.view.ContextGet(view_)); + ftpw_webview_flutter_wv_context_web_storage_delete_all( + ftpw_webview_flutter_wv_view_context_get(view_)); } std::string WvWebViewBackend::GetTitle() { - const char* title = WvInternalApiBinding::GetInstance().view.TitleGet(view_); + const char* title = ftpw_webview_flutter_wv_view_title_get(view_); return title ? title : ""; } void WvWebViewBackend::ScrollTo(int32_t x, int32_t y) { - WvInternalApiBinding::GetInstance().view.ScrollSet(view_, x, y); + ftpw_webview_flutter_wv_view_scroll_set(view_, x, y); } void WvWebViewBackend::ScrollBy(int32_t x, int32_t y) { - WvInternalApiBinding::GetInstance().view.ScrollBy(view_, x, y); + ftpw_webview_flutter_wv_view_scroll_by(view_, x, y); } void WvWebViewBackend::GetScrollPosition(int32_t* x, int32_t* y) { - WvInternalApiBinding::GetInstance().view.ScrollPosGet(view_, x, y); + ftpw_webview_flutter_wv_view_scroll_pos_get(view_, x, y); } void WvWebViewBackend::SetBackgroundColor(int r, int g, int b, int a) { - WvInternalApiBinding::GetInstance().view.BgColorSet(view_, r, g, b, a); + ftpw_webview_flutter_wv_view_bg_color_set(view_, r, g, b, a); } void WvWebViewBackend::SetUserAgent(const std::string& user_agent) { - WvInternalApiBinding::GetInstance().view.UserAgentSet(view_, - user_agent.c_str()); + ftpw_webview_flutter_wv_view_user_agent_set(view_, user_agent.c_str()); } std::string WvWebViewBackend::GetUserAgent() { - const char* user_agent = - WvInternalApiBinding::GetInstance().view.UserAgentGet(view_); + const char* user_agent = ftpw_webview_flutter_wv_view_user_agent_get(view_); return user_agent ? user_agent : ""; } void WvWebViewBackend::EnableZoom(bool enabled) { - auto& wv = WvInternalApiBinding::GetInstance(); - wv.settings.ForceZoomSet(wv.view.SettingsGet(view_), enabled); + ftpw_webview_flutter_wv_settings_force_zoom_set( + ftpw_webview_flutter_wv_view_settings_get(view_), enabled); } void WvWebViewBackend::JavaScriptAlertReply() { - WvInternalApiBinding::GetInstance().view.JavaScriptAlertReply(view_); + ftpw_webview_flutter_wv_view_javascript_alert_reply(view_); } void WvWebViewBackend::JavaScriptConfirmReply(bool result) { - WvInternalApiBinding::GetInstance().view.JavaScriptConfirmReply(view_, - result); + ftpw_webview_flutter_wv_view_javascript_confirm_reply(view_, result); } void WvWebViewBackend::JavaScriptPromptReply(const std::string& result) { - WvInternalApiBinding::GetInstance().view.JavaScriptPromptReply( - view_, result.c_str()); + ftpw_webview_flutter_wv_view_javascript_prompt_reply(view_, result.c_str()); } void WvWebViewBackend::SetScrollbarVisible(bool visible) { scrollbar_enabled_ = visible; - WvInternalApiBinding::GetInstance().view.MainFrameScrollbarVisibleSet( + ftpw_webview_flutter_wv_view_main_frame_scrollbar_visible_set( view_, scrollbar_enabled_); } bool WvWebViewBackend::ClearCookies() { - auto& wv = WvInternalApiBinding::GetInstance(); - wv_cookie_manager_h cookie_manager = - wv.context.CookieManagerGet(wv.view.ContextGet(view_)); + void* cookie_manager = ftpw_webview_flutter_wv_context_cookie_manager_get( + ftpw_webview_flutter_wv_view_context_get(view_)); if (cookie_manager) { - wv.cookie_manager.CookiesClear(cookie_manager); + ftpw_webview_flutter_wv_cookie_manager_cookies_clear(cookie_manager); return true; } return false; } -void WvWebViewBackend::OnFrameRendered(wv_view_h obj, void* event_info, +void WvWebViewBackend::OnFrameRendered(void* obj, void* event_info, void* user_data) { if (event_info) { static_cast(user_data)->delegate_->OnFrameRendered( @@ -530,25 +527,23 @@ void WvWebViewBackend::OnFrameRendered(wv_view_h obj, void* event_info, } } -void WvWebViewBackend::OnLoadStarted(wv_view_h obj, void* event_info, +void WvWebViewBackend::OnLoadStarted(void* obj, void* event_info, void* user_data) { WvWebViewBackend* backend = static_cast(user_data); - auto& wv = WvInternalApiBinding::GetInstance(); - wv.view.MainFrameScrollbarVisibleSet(backend->view_, - backend->scrollbar_enabled_); - const char* url = wv.view.UrlGet(backend->view_); + ftpw_webview_flutter_wv_view_main_frame_scrollbar_visible_set( + backend->view_, backend->scrollbar_enabled_); + const char* url = ftpw_webview_flutter_wv_view_url_get(backend->view_); backend->delegate_->OnLoadStarted(url ? url : ""); } -void WvWebViewBackend::OnLoadFinished(wv_view_h obj, void* event_info, +void WvWebViewBackend::OnLoadFinished(void* obj, void* event_info, void* user_data) { WvWebViewBackend* backend = static_cast(user_data); - const char* url = - WvInternalApiBinding::GetInstance().view.UrlGet(backend->view_); + const char* url = ftpw_webview_flutter_wv_view_url_get(backend->view_); backend->delegate_->OnLoadFinished(url ? url : ""); } -void WvWebViewBackend::OnProgress(wv_view_h obj, void* event_info, +void WvWebViewBackend::OnProgress(void* obj, void* event_info, void* user_data) { WvWebViewBackend* backend = static_cast(user_data); int32_t progress = @@ -556,53 +551,54 @@ void WvWebViewBackend::OnProgress(wv_view_h obj, void* event_info, backend->delegate_->OnProgress(progress); } -void WvWebViewBackend::OnLoadError(wv_view_h obj, void* event_info, +void WvWebViewBackend::OnLoadError(void* obj, void* event_info, void* user_data) { WvWebViewBackend* backend = static_cast(user_data); - wv_error_h error = static_cast(event_info); - auto& wv = WvInternalApiBinding::GetInstance(); - const char* description = wv.error.DescriptionGet(error); - const char* url = wv.error.UrlGet(error); - backend->delegate_->OnLoadError( - wv.error.CodeGet(error), description ? description : "", url ? url : ""); + void* error = event_info; + const char* description = + ftpw_webview_flutter_wv_error_description_get(error); + const char* url = ftpw_webview_flutter_wv_error_url_get(error); + backend->delegate_->OnLoadError(ftpw_webview_flutter_wv_error_code_get(error), + description ? description : "", + url ? url : ""); } -void WvWebViewBackend::OnConsoleMessage(wv_view_h obj, void* event_info, +void WvWebViewBackend::OnConsoleMessage(void* obj, void* event_info, void* user_data) { WvWebViewBackend* backend = static_cast(user_data); - wv_console_message_h message = static_cast(event_info); - auto& wv = WvInternalApiBinding::GetInstance(); - wv_console_message_level_e log_level = wv.console_message.LevelGet(message); - const char* text = wv.console_message.TextGet(message); + void* message = event_info; + wv_console_message_level_e log_level = + ftpw_webview_flutter_wv_console_message_level_get(message); + const char* text = ftpw_webview_flutter_wv_console_message_text_get(message); backend->delegate_->OnConsoleMessage(ConvertLogLevelToString(log_level), text ? text : ""); } -void WvWebViewBackend::OnNavigationPolicy(wv_view_h obj, void* event_info, +void WvWebViewBackend::OnNavigationPolicy(void* obj, void* event_info, void* user_data) { WvWebViewBackend* backend = static_cast(user_data); - wv_policy_decision_h policy_decision = - static_cast(event_info); - auto& wv = WvInternalApiBinding::GetInstance(); - wv.policy_decision.Use(policy_decision); + void* policy_decision = event_info; + ftpw_webview_flutter_wv_policy_decision_use(policy_decision); if (!backend->has_navigation_delegate_) { return; } - wv.view.Suspend(backend->view_); - const char* url = wv.policy_decision.UrlGet(policy_decision); + ftpw_webview_flutter_wv_view_suspend(backend->view_); + const char* url = + ftpw_webview_flutter_wv_policy_decision_url_get(policy_decision); backend->delegate_->OnNavigationPolicyDecide(url ? url : ""); } -void WvWebViewBackend::OnResponsePolicy(wv_view_h obj, void* event_info, +void WvWebViewBackend::OnResponsePolicy(void* obj, void* event_info, void* user_data) { WvWebViewBackend* backend = static_cast(user_data); - wv_policy_decision_h policy_decision = - static_cast(event_info); - auto& wv = WvInternalApiBinding::GetInstance(); - int status_code = wv.policy_decision.ResponseStatusCodeGet(policy_decision); - const char* url = wv.policy_decision.UrlGet(policy_decision); - wv.policy_decision.Use(policy_decision); + void* policy_decision = event_info; + int status_code = + ftpw_webview_flutter_wv_policy_decision_response_status_code_get( + policy_decision); + const char* url = + ftpw_webview_flutter_wv_policy_decision_url_get(policy_decision); + ftpw_webview_flutter_wv_policy_decision_use(policy_decision); if (!backend->has_navigation_delegate_ || status_code < 400) { return; @@ -610,16 +606,14 @@ void WvWebViewBackend::OnResponsePolicy(wv_view_h obj, void* event_info, backend->delegate_->OnResponsePolicyDecide(url ? url : "", status_code); } -void WvWebViewBackend::OnUrlChange(wv_view_h obj, void* event_info, +void WvWebViewBackend::OnUrlChange(void* obj, void* event_info, void* user_data) { WvWebViewBackend* backend = static_cast(user_data); - const char* url = - WvInternalApiBinding::GetInstance().view.UrlGet(backend->view_); + const char* url = ftpw_webview_flutter_wv_view_url_get(backend->view_); backend->delegate_->OnUrlChanged(url ? url : ""); } -void WvWebViewBackend::OnEvaluateJavaScript(wv_view_h obj, - const char* result_value, +void WvWebViewBackend::OnEvaluateJavaScript(void* obj, const char* result_value, void* user_data) { auto* callback = static_cast*>(user_data); @@ -627,7 +621,7 @@ void WvWebViewBackend::OnEvaluateJavaScript(wv_view_h obj, delete callback; } -void WvWebViewBackend::OnJavaScriptMessage(wv_view_h obj, +void WvWebViewBackend::OnJavaScriptMessage(void* obj, wv_script_message_s message) { WvWebViewBackend* backend = nullptr; { @@ -643,35 +637,30 @@ void WvWebViewBackend::OnJavaScriptMessage(wv_view_h obj, } } -bool WvWebViewBackend::OnJavaScriptAlertDialog(wv_view_h view, - const char* message, +bool WvWebViewBackend::OnJavaScriptAlertDialog(void* view, const char* message, void* data) { WvWebViewBackend* backend = static_cast(data); - const char* url = - WvInternalApiBinding::GetInstance().view.UrlGet(backend->view_); + const char* url = ftpw_webview_flutter_wv_view_url_get(backend->view_); backend->delegate_->OnJavaScriptAlertDialog(message ? message : "", url ? url : ""); return true; } -bool WvWebViewBackend::OnJavaScriptConfirmDialog(wv_view_h view, +bool WvWebViewBackend::OnJavaScriptConfirmDialog(void* view, const char* message, void* data) { WvWebViewBackend* backend = static_cast(data); - const char* url = - WvInternalApiBinding::GetInstance().view.UrlGet(backend->view_); + const char* url = ftpw_webview_flutter_wv_view_url_get(backend->view_); backend->delegate_->OnJavaScriptConfirmDialog(message ? message : "", url ? url : ""); return true; } -bool WvWebViewBackend::OnJavaScriptPromptDialog(wv_view_h view, - const char* message, +bool WvWebViewBackend::OnJavaScriptPromptDialog(void* view, const char* message, const char* default_text, void* data) { WvWebViewBackend* backend = static_cast(data); - const char* url = - WvInternalApiBinding::GetInstance().view.UrlGet(backend->view_); + const char* url = ftpw_webview_flutter_wv_view_url_get(backend->view_); backend->delegate_->OnJavaScriptPromptDialog( message ? message : "", default_text ? default_text : "", url ? url : ""); return true; diff --git a/packages/webview_flutter/tizen/src/wv_webview_backend.h b/packages/webview_flutter/tizen/src/wv_webview_backend.h index 47b6a7220..d68fec686 100644 --- a/packages/webview_flutter/tizen/src/wv_webview_backend.h +++ b/packages/webview_flutter/tizen/src/wv_webview_backend.h @@ -12,8 +12,8 @@ #include #include +#include "ftpw_webview_flutter.h" #include "webview_backend.h" -#include "wv_internal_api_binding.h" class WvWebViewBackend : public WebViewBackend { public: @@ -75,26 +75,23 @@ class WvWebViewBackend : public WebViewBackend { static void GlobalShutdown(); private: - static void OnFrameRendered(wv_view_h obj, void* event_info, void* user_data); - static void OnLoadStarted(wv_view_h obj, void* event_info, void* user_data); - static void OnLoadFinished(wv_view_h obj, void* event_info, void* user_data); - static void OnProgress(wv_view_h obj, void* event_info, void* user_data); - static void OnLoadError(wv_view_h obj, void* event_info, void* user_data); - static void OnConsoleMessage(wv_view_h obj, void* event_info, - void* user_data); - static void OnNavigationPolicy(wv_view_h obj, void* event_info, - void* user_data); - static void OnResponsePolicy(wv_view_h obj, void* event_info, - void* user_data); - static void OnUrlChange(wv_view_h obj, void* event_info, void* user_data); - static void OnEvaluateJavaScript(wv_view_h obj, const char* result_value, + static void OnFrameRendered(void* obj, void* event_info, void* user_data); + static void OnLoadStarted(void* obj, void* event_info, void* user_data); + static void OnLoadFinished(void* obj, void* event_info, void* user_data); + static void OnProgress(void* obj, void* event_info, void* user_data); + static void OnLoadError(void* obj, void* event_info, void* user_data); + static void OnConsoleMessage(void* obj, void* event_info, void* user_data); + static void OnNavigationPolicy(void* obj, void* event_info, void* user_data); + static void OnResponsePolicy(void* obj, void* event_info, void* user_data); + static void OnUrlChange(void* obj, void* event_info, void* user_data); + static void OnEvaluateJavaScript(void* obj, const char* result_value, void* user_data); - static void OnJavaScriptMessage(wv_view_h obj, wv_script_message_s message); - static bool OnJavaScriptAlertDialog(wv_view_h view, const char* message, + static void OnJavaScriptMessage(void* obj, wv_script_message_s message); + static bool OnJavaScriptAlertDialog(void* view, const char* message, void* data); - static bool OnJavaScriptConfirmDialog(wv_view_h view, const char* message, + static bool OnJavaScriptConfirmDialog(void* view, const char* message, void* data); - static bool OnJavaScriptPromptDialog(wv_view_h view, const char* message, + static bool OnJavaScriptPromptDialog(void* view, const char* message, const char* default_text, void* data); void SendTouchEvent(int type, double x, double y); @@ -103,7 +100,7 @@ class WvWebViewBackend : public WebViewBackend { Delegate* delegate_; bool scrollbar_enabled_ = true; - wv_view_h view_ = nullptr; + void* view_ = nullptr; void* window_ = nullptr; bool has_navigation_delegate_ = false; wv_mouse_button_type_e mouse_button_type_ =