diff --git a/src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs b/src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs index c35ad24d03d..a13b711597f 100755 --- a/src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs +++ b/src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs @@ -330,6 +330,15 @@ internal static partial class WebView [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_GetPlainTextAsynchronously")] public static extern void GetPlainTextAsynchronously(global::System.Runtime.InteropServices.HandleRef webViewRef, global::System.Runtime.InteropServices.HandleRef callbackRef); + + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_WebAuthenticationCancel")] + public static extern void WebAuthenticationCancel(global::System.Runtime.InteropServices.HandleRef webViewRef); + + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterWebAuthDisplayQRCallback")] + public static extern void RegisterWebAuthDisplayQRCallback(global::System.Runtime.InteropServices.HandleRef webViewRef, global::System.Runtime.InteropServices.HandleRef callbackRef); + + [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterWebAuthResponseCallback")] + public static extern void RegisterWebAuthResponseCallback(global::System.Runtime.InteropServices.HandleRef webViewRef, global::System.Runtime.InteropServices.HandleRef callbackRef); } } } diff --git a/src/Tizen.NUI/src/internal/WebView/WebViewWebAuthDisplayQREventArgs.cs b/src/Tizen.NUI/src/internal/WebView/WebViewWebAuthDisplayQREventArgs.cs new file mode 100755 index 00000000000..4e7507b08ae --- /dev/null +++ b/src/Tizen.NUI/src/internal/WebView/WebViewWebAuthDisplayQREventArgs.cs @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2024 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +using System; +using System.ComponentModel; + +namespace Tizen.NUI +{ + /// + /// Event arguments that passed via the WebView.WebAuthDisplayQR. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public class WebViewWebAuthDisplayQREventArgs : EventArgs + { + internal WebViewWebAuthDisplayQREventArgs(string contents) + { + Contents = contents; + } + + /// + /// The string contents to make QR code image in user side. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public string Contents { get; } + } +} diff --git a/src/Tizen.NUI/src/public/WebView/WebView.cs b/src/Tizen.NUI/src/public/WebView/WebView.cs index ce0a3b6cc70..c5a979ad2ce 100755 --- a/src/Tizen.NUI/src/public/WebView/WebView.cs +++ b/src/Tizen.NUI/src/public/WebView/WebView.cs @@ -105,6 +105,12 @@ public partial class WebView : View private PlainTextReceivedCallback plainTextReceivedCallback; + private EventHandler webAuthDisplayQREventHandler; + private WebViewWebAuthDisplayQRCallback webAuthDisplayQRCallback; + + private EventHandler webAuthResponseEventHandler; + private WebViewWebAuthResponseCallback webAuthResponseCallback; + /// /// Creates a WebView. /// @@ -302,6 +308,12 @@ protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate void WebViewTextFoundCallback(uint count); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private delegate void WebViewWebAuthDisplayQRCallback(string contents); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private delegate void WebViewWebAuthResponseCallback(); + /// /// Event for the PageLoadStarted signal which can be used to subscribe or unsubscribe the event handler.
/// This signal is emitted when page loading has started.
@@ -890,6 +902,60 @@ public event EventHandler TextFound } } + /// + /// Event to informs user application to display QR code popup for passkey scenario. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public event EventHandler WebAuthDisplayQR + { + add + { + if (webAuthDisplayQREventHandler == null) + { + webAuthDisplayQRCallback = OnWebAuthDisplayQR; + IntPtr ip = Marshal.GetFunctionPointerForDelegate(webAuthDisplayQRCallback); + Interop.WebView.RegisterWebAuthDisplayQRCallback(SwigCPtr, new HandleRef(this, ip)); + } + webAuthDisplayQREventHandler += value; + } + remove + { + webAuthDisplayQREventHandler -= value; + if (webAuthDisplayQREventHandler == null) + { + IntPtr ip = IntPtr.Zero; + Interop.WebView.RegisterWebAuthDisplayQRCallback(SwigCPtr, new HandleRef(this, ip)); + } + } + } + + /// + /// Event to informs user application that the passkey registration and authentication has been successful. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public event EventHandler WebAuthResponse + { + add + { + if (webAuthResponseEventHandler == null) + { + webAuthResponseCallback = OnWebAuthResponse; + IntPtr ip = Marshal.GetFunctionPointerForDelegate(webAuthResponseCallback); + Interop.WebView.RegisterWebAuthResponseCallback(SwigCPtr, new HandleRef(this, ip)); + } + webAuthResponseEventHandler += value; + } + remove + { + webAuthResponseEventHandler -= value; + if (webAuthResponseEventHandler == null) + { + IntPtr ip = IntPtr.Zero; + Interop.WebView.RegisterWebAuthResponseCallback(SwigCPtr, new HandleRef(this, ip)); + } + } + } + /// /// Options for searching texts. /// @@ -2374,6 +2440,16 @@ public void GetPlainTextAsynchronously(PlainTextReceivedCallback callback) if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } + /// + /// cancel in progress web authentication that is passkey operation. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void WebAuthenticationCancel() + { + Interop.WebView.WebAuthenticationCancel(SwigCPtr); + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); + } + internal static WebView DownCast(BaseHandle handle) { WebView ret = new WebView(Interop.WebView.DownCast(BaseHandle.getCPtr(handle)), true); @@ -2534,5 +2610,16 @@ private void OnTextFound(uint count) { textFoundEventHandler?.Invoke(this, new WebViewTextFoundEventArgs(count)); } + + private void OnWebAuthDisplayQR(string contents) + { + webAuthDisplayQREventHandler?.Invoke(this, new WebViewWebAuthDisplayQREventArgs(contents)); + } + + private void OnWebAuthResponse() + { + webAuthResponseEventHandler?.Invoke(this, new EventArgs()); + } + } }