JavaScriptMessageHandler delegate instances are collectable by GC,
so the concrete root for those instants are needed.
Signed-off-by: Jiyun Yang <ji.yang@samsung.com>
using System;
using System.ComponentModel;
using System;
using System.ComponentModel;
+using System.Collections.Generic;
using System.Runtime.InteropServices;
using Tizen.NUI.BaseComponents;
using System.Runtime.InteropServices;
using Tizen.NUI.BaseComponents;
[EditorBrowsable(EditorBrowsableState.Never)]
public delegate void JavaScriptMessageHandler(string message);
[EditorBrowsable(EditorBrowsableState.Never)]
public delegate void JavaScriptMessageHandler(string message);
+
+ // For rooting handlers
+ internal Dictionary<string, JavaScriptMessageHandler> handlerRootMap = new Dictionary<string, JavaScriptMessageHandler>();
+
/// <summary>
/// Add a message handler into the WebView.
/// <param name="objectName">The name of exposed object</param>
/// <summary>
/// Add a message handler into the WebView.
/// <param name="objectName">The name of exposed object</param>
[EditorBrowsable(EditorBrowsableState.Never)]
public void AddJavaScriptMessageHandler(string objectName, JavaScriptMessageHandler handler)
{
[EditorBrowsable(EditorBrowsableState.Never)]
public void AddJavaScriptMessageHandler(string objectName, JavaScriptMessageHandler handler)
{
+ if (handlerRootMap.ContainsKey(objectName))
+ {
+ return;
+ }
+
+ handlerRootMap.Add(objectName, handler);
+
System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(handler);
NDalicPINVOKE.WebView_AddJavaScriptMessageHandler(swigCPtr, objectName, new System.Runtime.InteropServices.HandleRef(this, ip));
System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(handler);
NDalicPINVOKE.WebView_AddJavaScriptMessageHandler(swigCPtr, objectName, new System.Runtime.InteropServices.HandleRef(this, ip));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}