[NUI] Add APIs for javascript popup. (#2678)
authorhuayongxu <49056704+huayongxu@users.noreply.github.com>
Tue, 2 Mar 2021 05:54:03 +0000 (13:54 +0800)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Wed, 3 Mar 2021 07:56:53 +0000 (16:56 +0900)
Support callbacks for 'url,changed', 'load.progress', and javascript
alert/confirm/prompt.

Co-authored-by: Jiyun Yang <ji.yang@samsung.com>
14 files changed:
src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs
src/Tizen.NUI/src/internal/WebView/WebBackForwardList.cs
src/Tizen.NUI/src/internal/WebView/WebContext.cs
src/Tizen.NUI/src/internal/WebView/WebCookieManager.cs
src/Tizen.NUI/src/internal/WebView/WebSettings.cs
src/Tizen.NUI/src/internal/WebView/WebView.cs
src/Tizen.NUI/src/internal/WebView/WebViewPageLoadErrorEventArgs.cs
src/Tizen.NUI/src/internal/WebView/WebViewPageLoadErrorSignal.cs
src/Tizen.NUI/src/internal/WebView/WebViewPageLoadEventArgs.cs
src/Tizen.NUI/src/internal/WebView/WebViewPageLoadSignal.cs
src/Tizen.NUI/src/internal/WebView/WebViewScrollEdgeReachedEventArgs.cs
src/Tizen.NUI/src/internal/WebView/WebViewScrollEdgeReachedSignal.cs
src/Tizen.NUI/src/internal/WebView/WebViewUrlChangedEventArgs.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WebView/WebViewUrlChangedSignal.cs [new file with mode: 0755]

index 4531819..973bf6f 100755 (executable)
@@ -118,6 +118,24 @@ namespace Tizen.NUI
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_AddJavaScriptMessageHandler")]
             public static extern void AddJavaScriptMessageHandler(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2, global::System.Runtime.InteropServices.HandleRef jarg3);
 
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterJavaScriptAlertCallback")]
+            public static extern void RegisterJavaScriptAlertCallback(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_JavaScriptAlertReply")]
+            public static extern void JavaScriptAlertReply(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterJavaScriptConfirmCallback")]
+            public static extern void RegisterJavaScriptConfirmCallback(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_JavaScriptConfirmReply")]
+            public static extern void JavaScriptConfirmReply(global::System.Runtime.InteropServices.HandleRef jarg1, bool jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_RegisterJavaScriptPromptCallback")]
+            public static extern void RegisterJavaScriptPromptCallback(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_JavaScriptPromptReply")]
+            public static extern void JavaScriptPromptReply(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2);
+
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebView_ClearAllTilesResources")]
             public static extern void ClearAllTilesResources(global::System.Runtime.InteropServices.HandleRef jarg1);
 
@@ -130,6 +148,9 @@ namespace Tizen.NUI
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_new_WebViewPageLoadSignal_PageLoadStarted")]
             public static extern global::System.IntPtr NewWebViewPageLoadSignalPageLoadStarted(global::System.Runtime.InteropServices.HandleRef jarg1);
 
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_new_WebViewPageLoadSignal_PageLoadInProgress")]
+            public static extern global::System.IntPtr NewWebViewPageLoadSignalPageLoadInProgress(global::System.Runtime.InteropServices.HandleRef jarg1);
+
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_new_WebViewPageLoadSignal_PageLoadFinished")]
             public static extern global::System.IntPtr NewWebViewPageLoadSignalPageLoadFinished(global::System.Runtime.InteropServices.HandleRef jarg1);
 
@@ -165,6 +186,18 @@ namespace Tizen.NUI
 
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebViewScrollEdgeReachedSignal_Disconnect")]
             public static extern void WebViewScrollEdgeReachedSignalDisconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_new_WebViewUrlChangedSignal_UrlChanged")]
+            public static extern global::System.IntPtr NewWebViewUrlChangedSignalUrlChanged(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_delete_WebViewUrlChangedSignal")]
+            public static extern void DeleteWebViewUrlChangedSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebViewUrlChangedSignal_Connect")]
+            public static extern void WebViewUrlChangedSignalConnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebViewUrlChangedSignal_Disconnect")]
+            public static extern void WebViewUrlChangedSignalDisconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
         }
     }
 }
index ea05f96..9d768c7 100755 (executable)
@@ -26,6 +26,10 @@ namespace Tizen.NUI
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class WebBackForwardListItem : Disposable
     {
+        internal WebBackForwardListItem(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
+        {
+        }
+
         /// <summary>
         /// Get uri.
         /// </summary>
@@ -62,35 +66,10 @@ namespace Tizen.NUI
             }
         }
 
-        internal WebBackForwardListItem(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
-        {
-        }
-
         internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WebBackForwardListItem obj)
         {
             return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.SwigCPtr;
         }
-
-        /// <summary>
-        /// Dispose for IDisposable pattern
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override void Dispose(DisposeTypes type)
-        {
-            if (disposed)
-            {
-                return;
-            }
-
-            if (type == DisposeTypes.Explicit)
-            {
-                //Called by User
-                //Release your own managed resources here.
-                //You should release all of your own disposable objects here.
-            }
-
-            base.Dispose(type);
-        }
     }
 
     /// <summary>
@@ -99,6 +78,10 @@ namespace Tizen.NUI
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class WebBackForwardList : Disposable
     {
+        internal WebBackForwardList(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
+        {
+        }
+
         /// <summary>
         /// Get item count.
         /// </summary>
@@ -131,35 +114,10 @@ namespace Tizen.NUI
             return new WebBackForwardListItem(itemPtr, false);
         }
 
-        internal WebBackForwardList(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
-        {
-        }
-
         internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WebBackForwardList obj)
         {
             return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.SwigCPtr;
         }
-
-        /// <summary>
-        /// Dispose for IDisposable pattern
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override void Dispose(DisposeTypes type)
-        {
-            if (disposed)
-            {
-                return;
-            }
-
-            if (type == DisposeTypes.Explicit)
-            {
-                //Called by User
-                //Release your own managed resources here.
-                //You should release all of your own disposable objects here.
-            }
-
-            base.Dispose(type);
-        }
     }
 }
 
index 97d6708..fc74291 100755 (executable)
@@ -26,6 +26,14 @@ namespace Tizen.NUI
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class WebContext : Disposable
     {
+        private string proxyUri;
+        private string certificateFilePath;
+        private bool disableCache;
+
+        internal WebContext(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
+        {
+        }
+
         /// <summary>
         /// Cache model
         /// </summary>
@@ -171,39 +179,9 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        internal WebContext(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
-        {
-        }
-
         internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WebContext obj)
         {
             return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.SwigCPtr;
         }
-
-        /// <summary>
-        /// Dispose for IDisposable pattern
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override void Dispose(DisposeTypes type)
-        {
-            if (disposed)
-            {
-                return;
-            }
-
-            if (type == DisposeTypes.Explicit)
-            {
-                //Called by User
-                //Release your own managed resources here.
-                //You should release all of your own disposable objects here.
-            }
-
-            base.Dispose(type);
-        }
-
-        // private
-        private string proxyUri;
-        private string certificateFilePath;
-        private bool disableCache;
     }
 }
index 842363d..22276c9 100755 (executable)
@@ -25,6 +25,10 @@ namespace Tizen.NUI
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class WebCookieManager : Disposable
     {
+        internal WebCookieManager(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
+        {
+        }
+
         /// <summary>
         /// Cookie Accept Policy
         /// </summary>
@@ -105,34 +109,9 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        internal WebCookieManager(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
-        {
-        }
-
         internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WebCookieManager obj)
         {
             return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.SwigCPtr;
         }
-
-        /// <summary>
-        /// Dispose for IDisposable pattern
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override void Dispose(DisposeTypes type)
-        {
-            if (disposed)
-            {
-                return;
-            }
-
-            if (type == DisposeTypes.Explicit)
-            {
-                //Called by User
-                //Release your own managed resources here.
-                //You should release all of your own disposable objects here.
-            }
-
-            base.Dispose(type);
-        }
     }
 }
index 25360f3..5fc547f 100755 (executable)
@@ -25,6 +25,16 @@ namespace Tizen.NUI
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class WebSettings : Disposable
     {
+        private bool allowMixedContents;
+        private bool enableSpatialNavigation;
+        private bool enableWebSecurity;
+        private bool allowFileAccessFromExternalUrl;
+        private bool allowScriptsOpenWindows;
+
+        internal WebSettings(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
+        {
+        }
+
         /// <summary>
         /// Allow Mixed Contents
         /// </summary>
@@ -174,41 +184,9 @@ namespace Tizen.NUI
             }
         }
 
-        internal WebSettings(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
-        {
-        }
-
         internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WebSettings obj)
         {
             return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.SwigCPtr;
         }
-
-        /// <summary>
-        /// Dispose for IDisposable pattern
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override void Dispose(DisposeTypes type)
-        {
-            if (disposed)
-            {
-                return;
-            }
-
-            if (type == DisposeTypes.Explicit)
-            {
-                //Called by User
-                //Release your own managed resources here.
-                //You should release all of your own disposable objects here.
-            }
-
-            base.Dispose(type);
-        }
-
-        // private.
-        private bool allowMixedContents;
-        private bool enableSpatialNavigation;
-        private bool enableWebSecurity;
-        private bool allowFileAccessFromExternalUrl;
-        private bool allowScriptsOpenWindows;
     }
 }
index 3555f8b..ff0b755 100755 (executable)
@@ -30,19 +30,14 @@ namespace Tizen.NUI
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class WebView : View
     {
-        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
-        private delegate void WebViewPageLoadCallbackDelegate(IntPtr data, string pageUrl);
-
-        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
-        private delegate void WebViewPageLoadErrorCallbackDelegate(IntPtr data, string pageUrl, int errorCode);
-
-        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
-        private delegate void WebViewScrollEdgeReachedCallbackDelegate(IntPtr data, int edge);
-
         private readonly WebViewPageLoadSignal pageLoadStartedSignal;
         private EventHandler<WebViewPageLoadEventArgs> pageLoadStartedEventHandler;
         private WebViewPageLoadCallbackDelegate pageLoadStartedCallback;
 
+        private readonly WebViewPageLoadSignal pageLoadingSignal;
+        private EventHandler<WebViewPageLoadEventArgs> pageLoadingEventHandler;
+        private WebViewPageLoadCallbackDelegate pageLoadingCallback;
+
         private readonly WebViewPageLoadSignal pageLoadFinishedSignal;
         private EventHandler<WebViewPageLoadEventArgs> pageLoadFinishedEventHandler;
         private WebViewPageLoadCallbackDelegate pageLoadFinishedCallback;
@@ -55,36 +50,63 @@ namespace Tizen.NUI
         private EventHandler<WebViewScrollEdgeReachedEventArgs> scrollEdgeReachedEventHandler;
         private WebViewScrollEdgeReachedCallbackDelegate scrollEdgeReachedCallback;
 
-        internal WebView(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
-        {
-            pageLoadStartedSignal = new WebViewPageLoadSignal(Interop.WebView.NewWebViewPageLoadSignalPageLoadStarted(SwigCPtr));
-            pageLoadFinishedSignal = new WebViewPageLoadSignal(Interop.WebView.NewWebViewPageLoadSignalPageLoadFinished(SwigCPtr));
-            pageLoadErrorSignal = new WebViewPageLoadErrorSignal(Interop.WebView.NewWebViewPageLoadErrorSignalPageLoadError(SwigCPtr));
-            scrollEdgeReachedSignal = new WebViewScrollEdgeReachedSignal(Interop.WebView.NewWebViewScrollEdgeReachedSignalScrollEdgeReached(SwigCPtr));
+        private readonly WebViewUrlChangedSignal urlChangedSignal;
+        private EventHandler<WebViewUrlChangedEventArgs> urlChangedEventHandler;
+        private WebViewUrlChangedCallbackDelegate urlChangedCallback;
 
-            BackForwardList = new WebBackForwardList(Interop.WebView.GetWebBackForwardList(SwigCPtr), false);
-            Context = new WebContext(Interop.WebView.GetWebContext(SwigCPtr), false);
-            CookieManager = new WebCookieManager(Interop.WebView.GetWebCookieManager(SwigCPtr), false);
-            Settings = new WebSettings(Interop.WebView.GetWebSettings(SwigCPtr), false);
+        /// <summary>
+        /// Creates a WebView.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public WebView() : this(Interop.WebView.New(), true)
+        {
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WebView obj)
+        /// <summary>
+        /// Creates a WebView with local language and time zone.
+        /// <param name="locale">The locale language of Web</param>
+        /// <param name="timezoneId">The time zone Id of Web</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public WebView(string locale, string timezoneId) : this(Interop.WebView.New2(locale, timezoneId), true)
         {
-            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.SwigCPtr;
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        internal WebView Assign(WebView webView)
+        /// <summary>
+        /// Creates a WebView with an args list.
+        /// <param name="args">args array. The first value of array must be program's name.</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public WebView(string[] args) : this(Interop.WebView.New3(args?.Length ?? 0, args), true)
         {
-            WebView ret = new WebView(Interop.WebView.Assign(SwigCPtr, WebView.getCPtr(webView)), false);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-            return ret;
         }
 
-        internal static WebView DownCast(BaseHandle handle)
+        /// <summary>
+        /// Copy constructor.
+        /// <param name="webView">WebView to copy. The copied WebView will point at the same implementation</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public WebView(WebView webView) : this(Interop.WebView.NewWebView(WebView.getCPtr(webView)), true)
         {
-            WebView ret = new WebView(Interop.WebView.DownCast(BaseHandle.getCPtr(handle)), true);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-            return ret;
+        }
+
+        internal WebView(global::System.IntPtr cPtr, bool cMemoryOwn) : base(Interop.WebView.Upcast(cPtr), cMemoryOwn)
+        {
+            pageLoadStartedSignal = new WebViewPageLoadSignal(Interop.WebView.NewWebViewPageLoadSignalPageLoadStarted(SwigCPtr));
+            pageLoadingSignal = new WebViewPageLoadSignal(Interop.WebView.NewWebViewPageLoadSignalPageLoadInProgress(SwigCPtr));
+            pageLoadFinishedSignal = new WebViewPageLoadSignal(Interop.WebView.NewWebViewPageLoadSignalPageLoadFinished(SwigCPtr));
+            pageLoadErrorSignal = new WebViewPageLoadErrorSignal(Interop.WebView.NewWebViewPageLoadErrorSignalPageLoadError(SwigCPtr));
+            scrollEdgeReachedSignal = new WebViewScrollEdgeReachedSignal(Interop.WebView.NewWebViewScrollEdgeReachedSignalScrollEdgeReached(SwigCPtr));
+            urlChangedSignal = new WebViewUrlChangedSignal(Interop.WebView.NewWebViewUrlChangedSignalUrlChanged(SwigCPtr));
+
+            BackForwardList = new WebBackForwardList(Interop.WebView.GetWebBackForwardList(SwigCPtr), false);
+            Context = new WebContext(Interop.WebView.GetWebContext(SwigCPtr), false);
+            CookieManager = new WebCookieManager(Interop.WebView.GetWebCookieManager(SwigCPtr), false);
+            Settings = new WebSettings(Interop.WebView.GetWebSettings(SwigCPtr), false);
         }
 
         /// <summary>
@@ -104,8 +126,11 @@ namespace Tizen.NUI
                 //Release your own managed resources here.
                 //You should release all of your own disposable objects here.
                 pageLoadStartedSignal.Dispose();
+                pageLoadingSignal.Dispose();
                 pageLoadFinishedSignal.Dispose();
                 pageLoadErrorSignal.Dispose();
+                scrollEdgeReachedSignal.Dispose();
+                urlChangedSignal.Dispose();
 
                 BackForwardList.Dispose();
                 Context.Dispose();
@@ -116,188 +141,200 @@ namespace Tizen.NUI
             base.Dispose(type);
         }
 
-        /// This will not be public opened.
-        /// <param name="swigCPtr"></param>
+        /// <summary>
+        /// The callback function that is invoked when the message is received from the script.
+        /// </summary>
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
-        {
-            Interop.WebView.DeleteWebView(swigCPtr);
-        }
-
-        private void OnPageLoadStarted(IntPtr data, string pageUrl)
-        {
-            WebViewPageLoadEventArgs e = new WebViewPageLoadEventArgs();
-
-            e.WebView = Registry.GetManagedBaseHandleFromNativePtr(data) as WebView;
-            e.PageUrl = pageUrl;
-
-            pageLoadStartedEventHandler?.Invoke(this, e);
-        }
-
-        private void OnPageLoadFinished(IntPtr data, string pageUrl)
-        {
-            WebViewPageLoadEventArgs e = new WebViewPageLoadEventArgs();
+        public delegate void JavaScriptMessageHandler(string message);
 
-            e.WebView = Registry.GetManagedBaseHandleFromNativePtr(data) as WebView;
-            e.PageUrl = pageUrl;
+        /// <summary>
+        /// The callback function that is invoked when the message is received from the script.
+        /// </summary>
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public delegate void JavaScriptAlertCallback(string message);
 
-            pageLoadFinishedEventHandler?.Invoke(this, e);
-        }
+        /// <summary>
+        /// The callback function that is invoked when the message is received from the script.
+        /// </summary>
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public delegate void JavaScriptConfirmCallback(string message);
 
-        private void OnPageLoadError(IntPtr data, string pageUrl, int errorCode)
-        {
-            WebViewPageLoadErrorEventArgs e = new WebViewPageLoadErrorEventArgs();
+        /// <summary>
+        /// The callback function that is invoked when the message is received from the script.
+        /// </summary>
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public delegate void JavaScriptPromptCallback(string message1, string message2);
 
-            e.WebView = Registry.GetManagedBaseHandleFromNativePtr(data) as WebView;
-            e.PageUrl = pageUrl;
-            e.ErrorCode = (WebViewPageLoadErrorEventArgs.LoadErrorCode)errorCode;
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void WebViewPageLoadCallbackDelegate(IntPtr data, string pageUrl);
 
-            pageLoadErrorEventHandler?.Invoke(this, e);
-        }
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void WebViewPageLoadErrorCallbackDelegate(IntPtr data, string pageUrl, int errorCode);
 
-        private void OnScrollEdgeReached(IntPtr data, int edge)
-        {
-            WebViewScrollEdgeReachedEventArgs arg = new WebViewScrollEdgeReachedEventArgs((WebViewScrollEdgeReachedEventArgs.Edge)edge);
-            scrollEdgeReachedEventHandler?.Invoke(this, arg);
-        }
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void WebViewScrollEdgeReachedCallbackDelegate(IntPtr data, int edge);
 
-        internal static new class Property
-        {
-            internal static readonly int Url = Interop.WebView.UrlGet();
-            internal static readonly int UserAgent = Interop.WebView.UserAgentGet();
-            internal static readonly int ScrollPosition = Interop.WebView.ScrollPositionGet();
-            internal static readonly int ScrollSize = Interop.WebView.ScrollSizeGet();
-            internal static readonly int ContentSize = Interop.WebView.ContentSizeGet();
-            internal static readonly int Title = Interop.WebView.TitleGet();
-            internal static readonly int VideoHoleEnabled = Interop.WebView.VideoHoleEnabledGet();
-        }
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void WebViewUrlChangedCallbackDelegate(IntPtr data, string pageUrl);
 
-        private static readonly BindableProperty UrlProperty = BindableProperty.Create(nameof(Url), typeof(string), typeof(WebView), string.Empty, propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
+        /// <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 />
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public event EventHandler<WebViewPageLoadEventArgs> PageLoadStarted
         {
-            var webview = (WebView)bindable;
-            if (newValue != null)
+            add
             {
-                Tizen.NUI.Object.SetProperty(webview.SwigCPtr, WebView.Property.Url, new Tizen.NUI.PropertyValue((string)newValue));
+                if (pageLoadStartedEventHandler == null)
+                {
+                    pageLoadStartedCallback = (OnPageLoadStarted);
+                    pageLoadStartedSignal.Connect(pageLoadStartedCallback);
+                }
+                pageLoadStartedEventHandler += value;
             }
-        }),
-        defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
-        {
-            var webview = (WebView)bindable;
-            string temp;
-            Tizen.NUI.Object.GetProperty(webview.SwigCPtr, WebView.Property.Url).Get(out temp);
-            return temp;
-        }));
-
-        private static readonly BindableProperty UserAgentProperty = BindableProperty.Create(nameof(UserAgent), typeof(string), typeof(WebView), string.Empty, propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
-        {
-            var webview = (WebView)bindable;
-            if (newValue != null)
+            remove
             {
-                Tizen.NUI.Object.SetProperty((HandleRef)webview.SwigCPtr, WebView.Property.UserAgent, new Tizen.NUI.PropertyValue((string)newValue));
+                pageLoadStartedEventHandler -= value;
+                if (pageLoadStartedEventHandler == null && pageLoadStartedCallback != null)
+                {
+                    pageLoadStartedSignal.Disconnect(pageLoadStartedCallback);
+                }
             }
-        }),
-        defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
-        {
-            var webview = (WebView)bindable;
-            string temp;
-            Tizen.NUI.Object.GetProperty((HandleRef)webview.SwigCPtr, WebView.Property.UserAgent).Get(out temp);
-            return temp;
-        }));
+        }
 
-        private static readonly BindableProperty ScrollPositionProperty = BindableProperty.Create(nameof(ScrollPosition), typeof(Vector2), typeof(WebView), null, propertyChanged: (bindable, oldValue, newValue) =>
+        /// <summary>
+        /// Event for the PageLoading signal which can be used to subscribe or unsubscribe the event handler.<br />
+        /// This signal is emitted when page loading is in progress.<br />
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public event EventHandler<WebViewPageLoadEventArgs> PageLoading
         {
-            var webview = (WebView)bindable;
-            if (newValue != null)
+            add
             {
-                Tizen.NUI.Object.SetProperty(webview.SwigCPtr, WebView.Property.ScrollPosition, new Tizen.NUI.PropertyValue((Vector2)newValue));
+                if (pageLoadingEventHandler == null)
+                {
+                    pageLoadingCallback = OnPageLoading;
+                    pageLoadingSignal.Connect(pageLoadingCallback);
+                }
+                pageLoadingEventHandler += value;
             }
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var webview = (WebView)bindable;
-            Vector2 temp = new Vector2(0.0f, 0.0f);
-            Tizen.NUI.Object.GetProperty(webview.SwigCPtr, WebView.Property.ScrollPosition).Get(temp);
-            return temp;
-        });
-
-        private static readonly BindableProperty ScrollSizeProperty = BindableProperty.Create(nameof(ScrollSize), typeof(Vector2), typeof(WebView), null, defaultValueCreator: (bindable) =>
-        {
-            var webview = (WebView)bindable;
-            Vector2 temp = new Vector2(0.0f, 0.0f);
-            Tizen.NUI.Object.GetProperty(webview.SwigCPtr, WebView.Property.ScrollSize).Get(temp);
-            return temp;
-        });
-
-        private static readonly BindableProperty ContentSizeProperty = BindableProperty.Create(nameof(ContentSize), typeof(Vector2), typeof(WebView), null, defaultValueCreator: (bindable) =>
-        {
-            var webview = (WebView)bindable;
-            Vector2 temp = new Vector2(0.0f, 0.0f);
-            Tizen.NUI.Object.GetProperty(webview.SwigCPtr, WebView.Property.ContentSize).Get(temp);
-            return temp;
-        });
-
-        private static readonly BindableProperty TitleProperty = BindableProperty.Create(nameof(Title), typeof(string), typeof(WebView), null, defaultValueCreator: (bindable) =>
-        {
-            var webview = (WebView)bindable;
-            string title;
-            Tizen.NUI.Object.GetProperty(webview.SwigCPtr, WebView.Property.Title).Get(out title);
-            return title;
-        });
-
-        private static readonly BindableProperty VideoHoleEnabledProperty = BindableProperty.Create(nameof(VideoHoleEnabled), typeof(bool), typeof(WebView), true, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var webview = (WebView)bindable;
-            if (newValue != null)
+            remove
             {
-                Tizen.NUI.Object.SetProperty(webview.SwigCPtr, WebView.Property.VideoHoleEnabled, new Tizen.NUI.PropertyValue((bool)newValue));
+                pageLoadingEventHandler -= value;
+                if (pageLoadingEventHandler == null && pageLoadingCallback != null)
+                {
+                    pageLoadingSignal.Disconnect(pageLoadingCallback);
+                }
             }
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var webview = (WebView)bindable;
-            bool temp;
-            Tizen.NUI.Object.GetProperty(webview.SwigCPtr, WebView.Property.VideoHoleEnabled).Get(out temp);
-            return temp;
-        });
+        }
 
         /// <summary>
-        /// Creates a WebView.
+        /// Event for the PageLoadFinished signal which can be used to subscribe or unsubscribe the event handler.<br />
+        /// This signal is emitted when page loading has finished.<br />
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public WebView() : this(Interop.WebView.New(), true)
+        public event EventHandler<WebViewPageLoadEventArgs> PageLoadFinished
         {
-            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            add
+            {
+                if (pageLoadFinishedEventHandler == null)
+                {
+                    pageLoadFinishedCallback = (OnPageLoadFinished);
+                    pageLoadFinishedSignal.Connect(pageLoadFinishedCallback);
+                }
+                pageLoadFinishedEventHandler += value;
+            }
+            remove
+            {
+                pageLoadFinishedEventHandler -= value;
+                if (pageLoadFinishedEventHandler == null && pageLoadFinishedCallback != null)
+                {
+                    pageLoadFinishedSignal.Disconnect(pageLoadFinishedCallback);
+                }
+            }
         }
 
         /// <summary>
-        /// Creates a WebView with local language and time zone.
-        /// <param name="locale">The locale language of Web</param>
-        /// <param name="timezoneId">The time zone Id of Web</param>
+        /// Event for the PageLoadError signal which can be used to subscribe or unsubscribe the event handler.<br />
+        /// This signal is emitted when there's an error in page loading.<br />
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public WebView(string locale, string timezoneId) : this(Interop.WebView.New2(locale, timezoneId), true)
+        public event EventHandler<WebViewPageLoadErrorEventArgs> PageLoadError
         {
-            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            add
+            {
+                if (pageLoadErrorEventHandler == null)
+                {
+                    pageLoadErrorCallback = (OnPageLoadError);
+                    pageLoadErrorSignal.Connect(pageLoadErrorCallback);
+                }
+                pageLoadErrorEventHandler += value;
+            }
+            remove
+            {
+                pageLoadErrorEventHandler -= value;
+                if (pageLoadErrorEventHandler == null && pageLoadErrorCallback != null)
+                {
+                    pageLoadErrorSignal.Disconnect(pageLoadErrorCallback);
+                }
+            }
         }
 
         /// <summary>
-        /// Creates a WebView with an args list.
-        /// <param name="args">args array. The first value of array must be program's name.</param>
+        /// Event for the ScrollEdgeReached signal which can be used to subscribe or unsubscribe the event handler.<br />
+        /// This signal is emitted when web view is scrolled to edge.<br />
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public WebView(string[] args) : this(Interop.WebView.New3(args?.Length ?? 0, args), true)
+        public event EventHandler<WebViewScrollEdgeReachedEventArgs> ScrollEdgeReached
         {
-            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            add
+            {
+                if (scrollEdgeReachedEventHandler == null)
+                {
+                    scrollEdgeReachedCallback = OnScrollEdgeReached;
+                    scrollEdgeReachedSignal.Connect(scrollEdgeReachedCallback);
+                }
+                scrollEdgeReachedEventHandler += value;
+            }
+            remove
+            {
+                scrollEdgeReachedEventHandler -= value;
+                if (scrollEdgeReachedEventHandler == null && scrollEdgeReachedCallback != null)
+                {
+                    scrollEdgeReachedSignal.Disconnect(scrollEdgeReachedCallback);
+                }
+            }
         }
 
         /// <summary>
-        /// Copy constructor.
-        /// <param name="webView">WebView to copy. The copied WebView will point at the same implementation</param>
+        /// Event for the UrlChanged signal which can be used to subscribe or unsubscribe the event handler.<br />
+        /// This signal is emitted when url is changed.<br />
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public WebView(WebView webView) : this(Interop.WebView.NewWebView(WebView.getCPtr(webView)), true)
+        public event EventHandler<WebViewUrlChangedEventArgs> UrlChanged
         {
-            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            add
+            {
+                if (urlChangedEventHandler == null)
+                {
+                    urlChangedCallback = OnUrlChanged;
+                    urlChangedSignal.Connect(urlChangedCallback);
+                }
+                urlChangedEventHandler += value;
+            }
+            remove
+            {
+                urlChangedEventHandler -= value;
+                if (urlChangedEventHandler == null && urlChangedCallback != null)
+                {
+                    urlChangedSignal.Disconnect(urlChangedCallback);
+                }
+            }
         }
 
         /// <summary>
@@ -498,130 +535,26 @@ namespace Tizen.NUI
         public Size ContentSize
         {
             get
-            {
-                Vector2 sv = (Vector2)GetValue(ContentSizeProperty);
-                return new Size(sv.Width, sv.Height);
-            }
-        }
-
-        /// <summary>
-        /// Whether video hole is enabled or not.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public bool VideoHoleEnabled
-        {
-            get
-            {
-                return (bool)GetValue(VideoHoleEnabledProperty);
-            }
-            set
-            {
-                SetValue(VideoHoleEnabledProperty, value);
-                NotifyPropertyChanged();
-            }
-        }
-
-        /// <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 />
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public event EventHandler<WebViewPageLoadEventArgs> PageLoadStarted
-        {
-            add
-            {
-                if (pageLoadStartedEventHandler == null)
-                {
-                    pageLoadStartedCallback = (OnPageLoadStarted);
-                    pageLoadStartedSignal.Connect(pageLoadStartedCallback);
-                }
-                pageLoadStartedEventHandler += value;
-            }
-            remove
-            {
-                pageLoadStartedEventHandler -= value;
-                if (pageLoadStartedEventHandler == null && pageLoadStartedCallback != null)
-                {
-                    pageLoadStartedSignal.Disconnect(pageLoadStartedCallback);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Event for the PageLoadFinished signal which can be used to subscribe or unsubscribe the event handler.<br />
-        /// This signal is emitted when page loading has finished.<br />
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public event EventHandler<WebViewPageLoadEventArgs> PageLoadFinished
-        {
-            add
-            {
-                if (pageLoadFinishedEventHandler == null)
-                {
-                    pageLoadFinishedCallback = (OnPageLoadFinished);
-                    pageLoadFinishedSignal.Connect(pageLoadFinishedCallback);
-                }
-                pageLoadFinishedEventHandler += value;
-            }
-            remove
-            {
-                pageLoadFinishedEventHandler -= value;
-                if (pageLoadFinishedEventHandler == null && pageLoadFinishedCallback != null)
-                {
-                    pageLoadFinishedSignal.Disconnect(pageLoadFinishedCallback);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Event for the PageLoadError signal which can be used to subscribe or unsubscribe the event handler.<br />
-        /// This signal is emitted when there's an error in page loading.<br />
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public event EventHandler<WebViewPageLoadErrorEventArgs> PageLoadError
-        {
-            add
-            {
-                if (pageLoadErrorEventHandler == null)
-                {
-                    pageLoadErrorCallback = (OnPageLoadError);
-                    pageLoadErrorSignal.Connect(pageLoadErrorCallback);
-                }
-                pageLoadErrorEventHandler += value;
-            }
-            remove
-            {
-                pageLoadErrorEventHandler -= value;
-                if (pageLoadErrorEventHandler == null && pageLoadErrorCallback != null)
-                {
-                    pageLoadErrorSignal.Disconnect(pageLoadErrorCallback);
-                }
+            {
+                Vector2 sv = (Vector2)GetValue(ContentSizeProperty);
+                return new Size(sv.Width, sv.Height);
             }
         }
 
         /// <summary>
-        /// Event for the ScrollEdgeReached signal which can be used to subscribe or unsubscribe the event handler.<br />
-        /// This signal is emitted when web view is scrolled to edge.<br />
+        /// Whether video hole is enabled or not.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public event EventHandler<WebViewScrollEdgeReachedEventArgs> ScrollEdgeReached
+        public bool VideoHoleEnabled
         {
-            add
+            get
             {
-                if (scrollEdgeReachedEventHandler == null)
-                {
-                    scrollEdgeReachedCallback = OnScrollEdgeReached;
-                    scrollEdgeReachedSignal.Connect(scrollEdgeReachedCallback);
-                }
-                scrollEdgeReachedEventHandler += value;
+                return (bool)GetValue(VideoHoleEnabledProperty);
             }
-            remove
+            set
             {
-                scrollEdgeReachedEventHandler -= value;
-                if (scrollEdgeReachedEventHandler == null && scrollEdgeReachedCallback != null)
-                {
-                    scrollEdgeReachedSignal.Disconnect(scrollEdgeReachedCallback);
-                }
+                SetValue(VideoHoleEnabledProperty, value);
+                NotifyPropertyChanged();
             }
         }
 
@@ -652,6 +585,108 @@ namespace Tizen.NUI
             }
         }
 
+        internal static new class Property
+        {
+            internal static readonly int Url = Interop.WebView.UrlGet();
+            internal static readonly int UserAgent = Interop.WebView.UserAgentGet();
+            internal static readonly int ScrollPosition = Interop.WebView.ScrollPositionGet();
+            internal static readonly int ScrollSize = Interop.WebView.ScrollSizeGet();
+            internal static readonly int ContentSize = Interop.WebView.ContentSizeGet();
+            internal static readonly int Title = Interop.WebView.TitleGet();
+            internal static readonly int VideoHoleEnabled = Interop.WebView.VideoHoleEnabledGet();
+        }
+
+        private static readonly BindableProperty UrlProperty = BindableProperty.Create(nameof(Url), typeof(string), typeof(WebView), string.Empty, propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
+        {
+            var webview = (WebView)bindable;
+            if (newValue != null)
+            {
+                Tizen.NUI.Object.SetProperty(webview.SwigCPtr, WebView.Property.Url, new Tizen.NUI.PropertyValue((string)newValue));
+            }
+        }),
+        defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
+        {
+            var webview = (WebView)bindable;
+            string temp;
+            Tizen.NUI.Object.GetProperty(webview.SwigCPtr, WebView.Property.Url).Get(out temp);
+            return temp;
+        }));
+
+        private static readonly BindableProperty UserAgentProperty = BindableProperty.Create(nameof(UserAgent), typeof(string), typeof(WebView), string.Empty, propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
+        {
+            var webview = (WebView)bindable;
+            if (newValue != null)
+            {
+                Tizen.NUI.Object.SetProperty((HandleRef)webview.SwigCPtr, WebView.Property.UserAgent, new Tizen.NUI.PropertyValue((string)newValue));
+            }
+        }),
+        defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
+        {
+            var webview = (WebView)bindable;
+            string temp;
+            Tizen.NUI.Object.GetProperty((HandleRef)webview.SwigCPtr, WebView.Property.UserAgent).Get(out temp);
+            return temp;
+        }));
+
+        private static readonly BindableProperty ScrollPositionProperty = BindableProperty.Create(nameof(ScrollPosition), typeof(Vector2), typeof(WebView), null, propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var webview = (WebView)bindable;
+            if (newValue != null)
+            {
+                Tizen.NUI.Object.SetProperty(webview.SwigCPtr, WebView.Property.ScrollPosition, new Tizen.NUI.PropertyValue((Vector2)newValue));
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var webview = (WebView)bindable;
+            Vector2 temp = new Vector2(0.0f, 0.0f);
+            Tizen.NUI.Object.GetProperty(webview.SwigCPtr, WebView.Property.ScrollPosition).Get(temp);
+            return temp;
+        });
+
+        private static readonly BindableProperty ScrollSizeProperty = BindableProperty.Create(nameof(ScrollSize), typeof(Vector2), typeof(WebView), null, defaultValueCreator: (bindable) =>
+        {
+            var webview = (WebView)bindable;
+            Vector2 temp = new Vector2(0.0f, 0.0f);
+            Tizen.NUI.Object.GetProperty(webview.SwigCPtr, WebView.Property.ScrollSize).Get(temp);
+            return temp;
+        });
+
+        private static readonly BindableProperty ContentSizeProperty = BindableProperty.Create(nameof(ContentSize), typeof(Vector2), typeof(WebView), null, defaultValueCreator: (bindable) =>
+        {
+            var webview = (WebView)bindable;
+            Vector2 temp = new Vector2(0.0f, 0.0f);
+            Tizen.NUI.Object.GetProperty(webview.SwigCPtr, WebView.Property.ContentSize).Get(temp);
+            return temp;
+        });
+
+        private static readonly BindableProperty TitleProperty = BindableProperty.Create(nameof(Title), typeof(string), typeof(WebView), null, defaultValueCreator: (bindable) =>
+        {
+            var webview = (WebView)bindable;
+            string title;
+            Tizen.NUI.Object.GetProperty(webview.SwigCPtr, WebView.Property.Title).Get(out title);
+            return title;
+        });
+
+        private static readonly BindableProperty VideoHoleEnabledProperty = BindableProperty.Create(nameof(VideoHoleEnabled), typeof(bool), typeof(WebView), true, propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var webview = (WebView)bindable;
+            if (newValue != null)
+            {
+                Tizen.NUI.Object.SetProperty(webview.SwigCPtr, WebView.Property.VideoHoleEnabled, new Tizen.NUI.PropertyValue((bool)newValue));
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            var webview = (WebView)bindable;
+            bool temp;
+            Tizen.NUI.Object.GetProperty(webview.SwigCPtr, WebView.Property.VideoHoleEnabled).Get(out temp);
+            return temp;
+        });
+
+        // For rooting handlers
+        internal Dictionary<string, JavaScriptMessageHandler> handlerRootMap = new Dictionary<string, JavaScriptMessageHandler>();
+
         /// <summary>
         /// Loads a html.
         /// <param name="url">The path of Web</param>
@@ -782,13 +817,6 @@ namespace Tizen.NUI
         }
 
         /// <summary>
-        /// The callback function that is invoked when the message is received from the script.
-        /// </summary>
-        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public delegate void JavaScriptMessageHandler(string message);
-
-        /// <summary>
         /// Evaluates JavaScript code represented as a string.
         /// <param name="script">The JavaScript code</param>
         /// </summary>
@@ -799,9 +827,6 @@ namespace Tizen.NUI
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        // 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>
@@ -824,6 +849,77 @@ namespace Tizen.NUI
         }
 
         /// <summary>
+        /// Add a message handler into the WebView.
+        /// <param name="callback">The callback function</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void RegisterJavaScriptAlertCallback(JavaScriptAlertCallback callback)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(callback);
+            Interop.WebView.RegisterJavaScriptAlertCallback(SwigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Reply for alert popup.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void JavaScriptAlertReply()
+        {
+            Interop.WebView.JavaScriptAlertReply(SwigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Add a message handler into the WebView.
+        /// <param name="callback">The callback function</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void RegisterJavaScriptConfirmCallback(JavaScriptConfirmCallback callback)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(callback);
+            Interop.WebView.RegisterJavaScriptConfirmCallback(SwigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Reply for confirm popup.
+        /// <param name="confirmed">confirmed or not</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void JavaScriptConfirmReply(bool confirmed)
+        {
+            Interop.WebView.JavaScriptConfirmReply(SwigCPtr, confirmed);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Add a message handler into the WebView.
+        /// <param name="callback">The callback function</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void RegisterJavaScriptPromptCallback(JavaScriptPromptCallback callback)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(callback);
+            Interop.WebView.RegisterJavaScriptPromptCallback(SwigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Reply for promp popup.
+        /// <param name="result">text in prompt input field.</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void JavaScriptPromptReply(string result)
+        {
+            Interop.WebView.JavaScriptPromptReply(SwigCPtr, result);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
         /// Clears title resources of current WebView.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
@@ -860,5 +956,79 @@ namespace Tizen.NUI
         {
             CookieManager.ClearCookies();
         }
+
+        internal static WebView DownCast(BaseHandle handle)
+        {
+            WebView ret = new WebView(Interop.WebView.DownCast(BaseHandle.getCPtr(handle)), true);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WebView obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.SwigCPtr;
+        }
+
+        internal WebView Assign(WebView webView)
+        {
+            WebView ret = new WebView(Interop.WebView.Assign(SwigCPtr, WebView.getCPtr(webView)), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// This will not be public opened.
+        /// <param name="swigCPtr"></param>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
+        {
+            Interop.WebView.DeleteWebView(swigCPtr);
+        }
+
+        private void OnPageLoadStarted(IntPtr data, string pageUrl)
+        {
+            WebViewPageLoadEventArgs e = new WebViewPageLoadEventArgs();
+
+            e.WebView = Registry.GetManagedBaseHandleFromNativePtr(data) as WebView;
+            e.PageUrl = pageUrl;
+
+            pageLoadStartedEventHandler?.Invoke(this, e);
+        }
+
+        private void OnPageLoading(IntPtr data, string pageUrl)
+        {
+            pageLoadingEventHandler?.Invoke(this, new WebViewPageLoadEventArgs());
+        }
+
+        private void OnPageLoadFinished(IntPtr data, string pageUrl)
+        {
+            WebViewPageLoadEventArgs e = new WebViewPageLoadEventArgs();
+
+            e.WebView = Registry.GetManagedBaseHandleFromNativePtr(data) as WebView;
+            e.PageUrl = pageUrl;
+
+            pageLoadFinishedEventHandler?.Invoke(this, e);
+        }
+
+        private void OnPageLoadError(IntPtr data, string pageUrl, int errorCode)
+        {
+            WebViewPageLoadErrorEventArgs e = new WebViewPageLoadErrorEventArgs();
+
+            e.WebView = Registry.GetManagedBaseHandleFromNativePtr(data) as WebView;
+            e.PageUrl = pageUrl;
+            e.ErrorCode = (WebViewPageLoadErrorEventArgs.LoadErrorCode)errorCode;
+
+            pageLoadErrorEventHandler?.Invoke(this, e);
+        }
+
+        private void OnScrollEdgeReached(IntPtr data, int edge)
+        {
+            WebViewScrollEdgeReachedEventArgs arg = new WebViewScrollEdgeReachedEventArgs((WebViewScrollEdgeReachedEventArgs.Edge)edge);
+            scrollEdgeReachedEventHandler?.Invoke(this, arg);
+        }
+
+        private void OnUrlChanged(IntPtr data, string pageUrl)
+        {
+            urlChangedEventHandler?.Invoke(this, new WebViewUrlChangedEventArgs(pageUrl));
+        }
     }
 }
index f335d8b..b6099c7 100755 (executable)
@@ -26,6 +26,10 @@ namespace Tizen.NUI
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class WebViewPageLoadErrorEventArgs : EventArgs
     {
+        private WebView _webView;
+        private string _pageUrl;
+        private LoadErrorCode _errorCode;
+
         /// <summary>
         /// Enumeration for the load error code
         /// </summary>
@@ -94,7 +98,6 @@ namespace Tizen.NUI
             InternalServer,
         }
 
-        private WebView _webView;
         /// <summary>
         /// The view for displaying webpages.
         /// </summary>
@@ -111,7 +114,6 @@ namespace Tizen.NUI
             }
         }
 
-        private string _pageUrl;
         /// <summary>
         /// The url string of current webpage.
         /// </summary>
@@ -128,7 +130,6 @@ namespace Tizen.NUI
             }
         }
 
-        private LoadErrorCode _errorCode;
         /// <summary>
         /// The code for the current error.
         /// </summary>
index 36e6954..a6b3b29 100755 (executable)
@@ -19,7 +19,9 @@ namespace Tizen.NUI
 {
     internal class WebViewPageLoadErrorSignal : Disposable
     {
-
+        public WebViewPageLoadErrorSignal(global::System.IntPtr cPtr) : base(cPtr, true)
+        {
+        }
 
         protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
         {
@@ -49,9 +51,5 @@ namespace Tizen.NUI
                 }
             }
         }
-
-        public WebViewPageLoadErrorSignal(global::System.IntPtr cPtr) : base(cPtr, true)
-        {
-        }
     }
 }
index 0ebc7b2..933f589 100755 (executable)
@@ -26,8 +26,9 @@ namespace Tizen.NUI
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class WebViewPageLoadEventArgs : EventArgs
     {
-
         private WebView _webView;
+        private string _pageUrl;
+
         /// <summary>
         /// The view for displaying webpages.
         /// </summary>
@@ -44,7 +45,6 @@ namespace Tizen.NUI
             }
         }
 
-        private string _pageUrl;
         /// <summary>
         /// The url string of current webpage.
         /// </summary>
index af2f887..322e8cb 100755 (executable)
@@ -19,7 +19,9 @@ namespace Tizen.NUI
 {
     internal class WebViewPageLoadSignal : Disposable
     {
-
+        public WebViewPageLoadSignal(global::System.IntPtr cPtr) : base(cPtr, true)
+        {
+        }
 
         protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
         {
@@ -49,9 +51,5 @@ namespace Tizen.NUI
                 }
             }
         }
-
-        public WebViewPageLoadSignal(global::System.IntPtr cPtr) : base(cPtr, true)
-        {
-        }
     }
 }
index 8cf0464..6e74855 100755 (executable)
@@ -26,6 +26,11 @@ namespace Tizen.NUI
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class WebViewScrollEdgeReachedEventArgs : EventArgs
     {
+        internal WebViewScrollEdgeReachedEventArgs(Edge e)
+        {
+            ScrollEdge = e;
+        }
+
         /// <summary>
         /// The enumeration for edge.
         /// </summary>
@@ -50,10 +55,5 @@ namespace Tizen.NUI
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public Edge ScrollEdge { get; }
-
-        internal WebViewScrollEdgeReachedEventArgs(Edge e)
-        {
-            ScrollEdge = e;
-        }
     }
 }
index d04c921..cb0372a 100755 (executable)
@@ -23,6 +23,11 @@ namespace Tizen.NUI
         {
         }
 
+        protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
+        {
+            Interop.WebView.DeleteWebViewScrollEdgeReachedSignal(swigCPtr);
+        }
+
         public void Connect(System.Delegate func)
         {
             System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
@@ -46,10 +51,5 @@ namespace Tizen.NUI
                 }
             }
         }
-
-        protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
-        {
-            Interop.WebView.DeleteWebViewScrollEdgeReachedSignal(swigCPtr);
-        }
     }
 }
diff --git a/src/Tizen.NUI/src/internal/WebView/WebViewUrlChangedEventArgs.cs b/src/Tizen.NUI/src/internal/WebView/WebViewUrlChangedEventArgs.cs
new file mode 100755 (executable)
index 0000000..9ad964d
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2021 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.UrlChanged.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class WebViewUrlChangedEventArgs : EventArgs
+    {
+        internal WebViewUrlChangedEventArgs(string url)
+        {
+            NewPageUri = new Uri(url);
+        }
+
+        /// <summary>
+        /// The uri of new web page.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public Uri NewPageUri { get; }
+    }
+}
diff --git a/src/Tizen.NUI/src/internal/WebView/WebViewUrlChangedSignal.cs b/src/Tizen.NUI/src/internal/WebView/WebViewUrlChangedSignal.cs
new file mode 100755 (executable)
index 0000000..9899656
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright(c) 2021 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.
+ *
+ */
+
+namespace Tizen.NUI
+{
+    internal class WebViewUrlChangedSignal : Disposable
+    {
+        public WebViewUrlChangedSignal(global::System.IntPtr cPtr) : base(cPtr, true)
+        {
+        }
+
+        protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
+        {
+            Interop.WebView.DeleteWebViewUrlChangedSignal(swigCPtr);
+        }
+
+        public void Connect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                Interop.WebView.WebViewUrlChangedSignalConnect(SwigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending)
+                {
+                    throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+                }
+            }
+        }
+
+        public void Disconnect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate<System.Delegate>(func);
+            {
+                Interop.WebView.WebViewUrlChangedSignalDisconnect(SwigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending)
+                {
+                    throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+                }
+            }
+        }
+    }
+}