diff --git a/packages/webview_flutter/example/tizen/lib/arm/liblightweight-web-engine.mobile.so b/packages/webview_flutter/example/tizen/lib/arm/liblightweight-web-engine.mobile.so index 7208f7943..377fb56be 100755 Binary files a/packages/webview_flutter/example/tizen/lib/arm/liblightweight-web-engine.mobile.so and b/packages/webview_flutter/example/tizen/lib/arm/liblightweight-web-engine.mobile.so differ diff --git a/packages/webview_flutter/pubspec.yaml b/packages/webview_flutter/pubspec.yaml index 204c6472f..030f3b0c0 100644 --- a/packages/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/pubspec.yaml @@ -3,7 +3,7 @@ description: Tizen implementation of the webview plugin version: 0.0.1 environment: - sdk: ">=2.7.0 <3.0.0" + sdk: ">=2.2.2 <3.0.0" flutter: ">=1.20.0 <2.0.0" dependencies: diff --git a/packages/webview_flutter/tizen/inc/lwe/LWEWebView.h b/packages/webview_flutter/tizen/inc/lwe/LWEWebView.h index 5564311fc..4457870d5 100644 --- a/packages/webview_flutter/tizen/inc/lwe/LWEWebView.h +++ b/packages/webview_flutter/tizen/inc/lwe/LWEWebView.h @@ -53,6 +53,20 @@ class LWE_EXPORT LWE { enum class WebSecurityMode; +class LWE_EXPORT CookieManager { +public: + std::string GetCookie(std::string url); + bool HasCookies(); + void ClearCookies(); + + static CookieManager* GetInstance(); + static void Destroy(); + +private: + CookieManager(); + ~CookieManager(); +}; + class LWE_EXPORT Settings { public: Settings(const std::string& defaultUA, const std::string& ua); @@ -290,6 +304,8 @@ class LWE_EXPORT WebContainer { std::string GetTitle(); void ScrollTo(int x, int y); void ScrollBy(int x, int y); + int GetScrollX(); + int GetScrollY(); size_t Width(); size_t Height(); @@ -370,6 +386,8 @@ class LWE_EXPORT WebView { std::string GetTitle(); void ScrollTo(int x, int y); void ScrollBy(int x, int y); + int GetScrollX(); + int GetScrollY(); virtual void* Unwrap() { diff --git a/packages/webview_flutter/tizen/lib/liblightweight-web-engine.mobile.so b/packages/webview_flutter/tizen/lib/liblightweight-web-engine.mobile.so index 7208f7943..377fb56be 100755 Binary files a/packages/webview_flutter/tizen/lib/liblightweight-web-engine.mobile.so and b/packages/webview_flutter/tizen/lib/liblightweight-web-engine.mobile.so differ diff --git a/packages/webview_flutter/tizen/src/webview.cc b/packages/webview_flutter/tizen/src/webview.cc index 379ad0a99..f0a68fb68 100644 --- a/packages/webview_flutter/tizen/src/webview.cc +++ b/packages/webview_flutter/tizen/src/webview.cc @@ -172,6 +172,16 @@ WebView::WebView(flutter::PluginRegistrar* registrar, int viewId, webview->HandleMethodCall(call, std::move(result)); }); + auto cookieChannel = + std::make_unique>( + GetPluginRegistrar()->messenger(), + "plugins.flutter.io/cookie_manager", + &flutter::StandardMethodCodec::GetInstance()); + cookieChannel->SetMethodCallHandler( + [webview = this](const auto& call, auto result) { + webview->HandleCookieMethodCall(call, std::move(result)); + }); + std::string url; auto initialUrl = params[flutter::EncodableValue("initialUrl")]; if (std::holds_alternative(initialUrl)) { @@ -198,6 +208,16 @@ WebView::WebView(flutter::PluginRegistrar* registrar, int viewId, } } + // TODO: Not implemented + // auto media = params[flutter::EncodableValue("autoMediaPlaybackPolicy")]; + + auto userAgent = params[flutter::EncodableValue("userAgent")]; + if (std::holds_alternative(userAgent)) { + auto settings = webViewInstance_->GetSettings(); + settings.SetUserAgentString(std::get(userAgent)); + webViewInstance_->SetSettings(settings); + } + webViewInstance_->RegisterOnPageStartedHandler( [this](LWE::WebContainer* container, const std::string& url) { LOG_DEBUG("RegisterOnPageStartedHandler(url: %s)\n", url.c_str()); @@ -834,9 +854,31 @@ void WebView::HandleMethodCall( webViewInstance_->ScrollBy(x, y); result->Success(); } else if (methodName.compare("getScrollX") == 0) { - result->NotImplemented(); + result->Success(flutter::EncodableValue(webViewInstance_->GetScrollX())); } else if (methodName.compare("getScrollY") == 0) { + result->Success(flutter::EncodableValue(webViewInstance_->GetScrollY())); + } else { result->NotImplemented(); + } +} + +void WebView::HandleCookieMethodCall( + const flutter::MethodCall& method_call, + std::unique_ptr> result) { + if (webViewInstance_ == nullptr) { + result->Error("Not Webview created"); + return; + } + + const auto methodName = method_call.method_name(); + const auto& arguments = *method_call.arguments(); + + LOG_DEBUG("WebView::HandleMethodCall : %s \n ", methodName.c_str()); + + if (methodName.compare("clearCookies") == 0) { + LWE::CookieManager* cookie = LWE::CookieManager::GetInstance(); + cookie->ClearCookies(); + result->Success(flutter::EncodableValue(true)); } else { result->NotImplemented(); } diff --git a/packages/webview_flutter/tizen/src/webview.h b/packages/webview_flutter/tizen/src/webview.h index 3247c1a28..a22380988 100644 --- a/packages/webview_flutter/tizen/src/webview.h +++ b/packages/webview_flutter/tizen/src/webview.h @@ -43,6 +43,9 @@ class WebView : public PlatformView { void HandleMethodCall( const flutter::MethodCall& method_call, std::unique_ptr> result); + void HandleCookieMethodCall( + const flutter::MethodCall& method_call, + std::unique_ptr> result); std::string GetChannelName(); void InitWebView();