Skip to content

Commit

Permalink
[NUI] Add WebAuthDisplayQR and Response for QR code passkey in WebView
Browse files Browse the repository at this point in the history
  • Loading branch information
dongsug-song committed Oct 11, 2024
1 parent 9810927 commit 69fb40e
Show file tree
Hide file tree
Showing 3 changed files with 136 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}
Original file line number Diff line number Diff line change
@@ -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
{
/// <summary>
/// Event arguments that passed via the WebView.WebAuthDisplayQR.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public class WebViewWebAuthDisplayQREventArgs : EventArgs
{
internal WebViewWebAuthDisplayQREventArgs(string contents)
{
Contents = contents;
}

/// <summary>
/// The string contents to make QR code image in user side.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public string Contents { get; }
}
}
87 changes: 87 additions & 0 deletions src/Tizen.NUI/src/public/WebView/WebView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,12 @@ public partial class WebView : View

private PlainTextReceivedCallback plainTextReceivedCallback;

private EventHandler<WebViewWebAuthDisplayQREventArgs> webAuthDisplayQREventHandler;
private WebViewWebAuthDisplayQRCallback webAuthDisplayQRCallback;

private EventHandler webAuthResponseEventHandler;
private WebViewWebAuthResponseCallback webAuthResponseCallback;

/// <summary>
/// Creates a WebView.
/// </summary>
Expand Down Expand Up @@ -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();

/// <summary>
/// Event for the PageLoadStarted signal which can be used to subscribe or unsubscribe the event handler.<br />
/// This signal is emitted when page loading has started.<br />
Expand Down Expand Up @@ -890,6 +902,60 @@ public event EventHandler<WebViewTextFoundEventArgs> TextFound
}
}

/// <summary>
/// Event to informs user application to display QR code popup for passkey scenario.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public event EventHandler<WebViewWebAuthDisplayQREventArgs> 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));
}
}
}

/// <summary>
/// Event to informs user application that the passkey registration and authentication has been successful.
/// </summary>
[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));
}
}
}

/// <summary>
/// Options for searching texts.
/// </summary>
Expand Down Expand Up @@ -2374,6 +2440,16 @@ public void GetPlainTextAsynchronously(PlainTextReceivedCallback callback)
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}

/// <summary>
/// cancel in progress web authentication that is passkey operation.
/// </summary>
[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);
Expand Down Expand Up @@ -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());
}

}
}

0 comments on commit 69fb40e

Please sign in to comment.