From f193d24ba0d2ffc4637b414f871ec9fff55e6ff0 Mon Sep 17 00:00:00 2001
From: JunsuChoi <jsuya.choi@samsung.com>
Date: Mon, 22 Jan 2024 17:26:15 +0900
Subject: [PATCH] [webview_flutter] Add ewk_set_version_policy() call (#655)

---
 packages/webview_flutter/CHANGELOG.md                  |  4 ++++
 .../tizen/src/ewk_internal_api_binding.cc              | 10 +++++++---
 .../tizen/src/ewk_internal_api_binding.h               |  2 ++
 packages/webview_flutter/tizen/src/webview.cc          |  4 ++++
 4 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/packages/webview_flutter/CHANGELOG.md b/packages/webview_flutter/CHANGELOG.md
index 929fad45a..859fa9135 100644
--- a/packages/webview_flutter/CHANGELOG.md
+++ b/packages/webview_flutter/CHANGELOG.md
@@ -1,3 +1,7 @@
+## NEXT
+
+* Add ewk_set_version_policy() call.
+
 ## 0.9.0
 
 * Update webivew_flutter to 4.4.2.
diff --git a/packages/webview_flutter/tizen/src/ewk_internal_api_binding.cc b/packages/webview_flutter/tizen/src/ewk_internal_api_binding.cc
index e09a5692d..4ac4a78ce 100644
--- a/packages/webview_flutter/tizen/src/ewk_internal_api_binding.cc
+++ b/packages/webview_flutter/tizen/src/ewk_internal_api_binding.cc
@@ -42,6 +42,9 @@ bool EwkInternalApiBinding::Initialize() {
   main.SetArguments = reinterpret_cast<EwkSetArgumentsFnPtr>(
       dlsym(handle_, "ewk_set_arguments"));
 
+  main.SetVersionPolicy = reinterpret_cast<EwkSetVersionPolicyFnPtr>(
+      dlsym(handle_, "ewk_set_version_policy"));
+
   // ewk_settings
   settings.ImePanelEnabledSet =
       reinterpret_cast<EwkSettingsImePanelEnabledSetFnPtr>(
@@ -60,7 +63,8 @@ bool EwkInternalApiBinding::Initialize() {
   return view.SetBackgroundColor && view.FeedTouchEvent && view.SendKeyEvent &&
          view.OffscreenRenderingEnabledSet && view.ImeWindowSet &&
          view.KeyEventsEnabledSet && view.SupportVideoHoleSet &&
-         main.SetArguments && settings.ImePanelEnabledSet &&
-         console_message.LevelGet && console_message.TextGet &&
-         console_message.LineGet && console_message.SourceGet;
+         main.SetArguments && main.SetVersionPolicy &&
+         settings.ImePanelEnabledSet && console_message.LevelGet &&
+         console_message.TextGet && console_message.LineGet &&
+         console_message.SourceGet;
 }
diff --git a/packages/webview_flutter/tizen/src/ewk_internal_api_binding.h b/packages/webview_flutter/tizen/src/ewk_internal_api_binding.h
index c259a9a0a..bc7caa60d 100644
--- a/packages/webview_flutter/tizen/src/ewk_internal_api_binding.h
+++ b/packages/webview_flutter/tizen/src/ewk_internal_api_binding.h
@@ -53,9 +53,11 @@ typedef struct {
 } 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;
diff --git a/packages/webview_flutter/tizen/src/webview.cc b/packages/webview_flutter/tizen/src/webview.cc
index 8fe79c97b..0de9a36c6 100644
--- a/packages/webview_flutter/tizen/src/webview.cc
+++ b/packages/webview_flutter/tizen/src/webview.cc
@@ -196,6 +196,8 @@ void WebView::Dispose() {
                                    &WebView::OnUrlChange);
     evas_object_del(webview_instance_);
   }
+
+  ewk_shutdown();
 }
 
 void WebView::Offset(double left, double top) {
@@ -286,6 +288,8 @@ void WebView::SetDirection(int direction) {
 }
 
 void WebView::InitWebView() {
+  EwkInternalApiBinding::GetInstance().main.SetVersionPolicy(1);
+
   char* chromium_argv[] = {
       const_cast<char*>("--disable-pinch"),
       const_cast<char*>("--js-flags=--expose-gc"),