[NUI] Implement context menu APIs of webview. (#2909)
authorhuayongxu <49056704+huayongxu@users.noreply.github.com>
Wed, 21 Apr 2021 11:21:32 +0000 (19:21 +0800)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Wed, 28 Apr 2021 03:36:30 +0000 (12:36 +0900)
This patch is to implement context menu APIs of webview.

20 files changed:
src/Tizen.NUI/src/internal/Interop/Interop.WebContextMenu.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/Interop/Interop.WebContextMenuItem.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/Interop/Interop.WebContextMenuItemList.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/Interop/Interop.WebPasswordData.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/Interop/Interop.WebPasswordDataList.cs
src/Tizen.NUI/src/internal/Interop/Interop.WebSecurityOrigin.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/Interop/Interop.WebSecurityOriginList.cs
src/Tizen.NUI/src/internal/Interop/Interop.WebView.cs
src/Tizen.NUI/src/internal/WebView/WebContextMenu.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WebView/WebContextMenuItem.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WebView/WebContextMenuItemList.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WebView/WebPasswordData.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WebView/WebPasswordDataList.cs
src/Tizen.NUI/src/internal/WebView/WebSecurityOrigin.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WebView/WebSecurityOriginList.cs
src/Tizen.NUI/src/internal/WebView/WebView.cs
src/Tizen.NUI/src/internal/WebView/WebViewContextMenuCustomizedEventArgs.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WebView/WebViewContextMenuCustomizedSignal.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WebView/WebViewContextMenuItemSelectedEventArgs.cs [new file with mode: 0755]
src/Tizen.NUI/src/internal/WebView/WebViewContextMenuItemSelectedSignal.cs [new file with mode: 0755]

diff --git a/src/Tizen.NUI/src/internal/Interop/Interop.WebContextMenu.cs b/src/Tizen.NUI/src/internal/Interop/Interop.WebContextMenu.cs
new file mode 100755 (executable)
index 0000000..daa44b2
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * 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 static partial class Interop
+    {
+        internal static partial class WebContextMenu
+        {
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_delete_WebContextMenu")]
+            public static extern void DeleteWebContextMenu(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenu_GetItemCount")]
+            public static extern uint GetItemCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenu_GetItemAt")]
+            public static extern System.IntPtr GetItemAt(global::System.Runtime.InteropServices.HandleRef jarg1, uint jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenu_GetItemList")]
+            public static extern System.IntPtr GetItemList(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenu_GetPosition")]
+            public static extern System.IntPtr GetPosition(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenu_RemoveItem")]
+            public static extern bool RemoveItem(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenu_AppendItemAsAction")]
+            public static extern bool AppendItemAsAction(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, string jarg3, bool jarg4);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenu_AppendItem")]
+            public static extern bool AppendItem(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, string jarg3, string jarg4, bool jarg5);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenu_SelectItem")]
+            public static extern bool SelectItem(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenu_Hide")]
+            public static extern bool Hide(global::System.Runtime.InteropServices.HandleRef jarg1);
+        }
+    }
+}
+
diff --git a/src/Tizen.NUI/src/internal/Interop/Interop.WebContextMenuItem.cs b/src/Tizen.NUI/src/internal/Interop/Interop.WebContextMenuItem.cs
new file mode 100755 (executable)
index 0000000..1105e7a
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * 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 static partial class Interop
+    {
+        internal static partial class WebContextMenuItem
+        {
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_delete_WebContextMenuItem")]
+            public static extern void DeleteWebContextMenuItem(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenuItem_GetTag")]
+            public static extern int GetTag(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenuItem_GetType")]
+            public static extern int GetType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenuItem_IsEnabled")]
+            public static extern bool IsEnabled(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenuItem_GetLinkUrl")]
+            public static extern string GetLinkUrl(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenuItem_GetImageUrl")]
+            public static extern string GetImageUrl(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenuItem_GetTitle")]
+            public static extern string GetTitle(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenuItem_GetParentMenu")]
+            public static extern System.IntPtr GetParentMenu(global::System.Runtime.InteropServices.HandleRef jarg1);
+        }
+    }
+}
+
diff --git a/src/Tizen.NUI/src/internal/Interop/Interop.WebContextMenuItemList.cs b/src/Tizen.NUI/src/internal/Interop/Interop.WebContextMenuItemList.cs
new file mode 100755 (executable)
index 0000000..15017d8
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * 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 static partial class Interop
+    {
+        internal static partial class WebContextMenuItemList
+        {
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_delete_WebContextMenu_ItemList")]
+            public static extern void DeleteWebContextMenuItemList(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenu_ItemList_GetItemCount")]
+            public static extern uint GetItemCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebContextMenu_ItemList_ValueOfIndex")]
+            public static extern System.IntPtr ValueOfIndex(global::System.Runtime.InteropServices.HandleRef jarg1, uint jarg2);
+        }
+    }
+}
+
diff --git a/src/Tizen.NUI/src/internal/Interop/Interop.WebPasswordData.cs b/src/Tizen.NUI/src/internal/Interop/Interop.WebPasswordData.cs
new file mode 100755 (executable)
index 0000000..3b3e2e5
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * 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 static partial class Interop
+    {
+        internal static partial class WebPasswordData
+        {
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebPasswordData_GetUrl")]
+            public static extern string GetUrl(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebPasswordData_GetUseFingerprint")]
+            public static extern bool GetUseFingerprint(global::System.Runtime.InteropServices.HandleRef jarg1);
+        }
+    }
+}
+
index 6ba5afd..c5c5b04 100755 (executable)
@@ -19,15 +19,6 @@ namespace Tizen.NUI
 {
     internal static partial class Interop
     {
-        internal static partial class WebPasswordData
-        {
-            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebPasswordData_GetUrl")]
-            public static extern string GetUrl(global::System.Runtime.InteropServices.HandleRef jarg1);
-
-            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebPasswordData_GetUseFingerprint")]
-            public static extern bool GetUseFingerprint(global::System.Runtime.InteropServices.HandleRef jarg1);
-        }
-
         internal static partial class WebPasswordDataList
         {
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_delete_WebPasswordDataList")]
diff --git a/src/Tizen.NUI/src/internal/Interop/Interop.WebSecurityOrigin.cs b/src/Tizen.NUI/src/internal/Interop/Interop.WebSecurityOrigin.cs
new file mode 100755 (executable)
index 0000000..66b6ae3
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * 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 static partial class Interop
+    {
+        internal static partial class WebSecurityOrigin
+        {
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebSecurityOrigin_GetHost")]
+            public static extern string GetHost(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebSecurityOrigin_GetProtocol")]
+            public static extern string GetProtocol(global::System.Runtime.InteropServices.HandleRef jarg1);
+        }
+    }
+}
+
index 2c910d9..e131520 100755 (executable)
@@ -19,15 +19,6 @@ namespace Tizen.NUI
 {
     internal static partial class Interop
     {
-        internal static partial class WebSecurityOrigin
-        {
-            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebSecurityOrigin_GetHost")]
-            public static extern string GetHost(global::System.Runtime.InteropServices.HandleRef jarg1);
-
-            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebSecurityOrigin_GetProtocol")]
-            public static extern string GetProtocol(global::System.Runtime.InteropServices.HandleRef jarg1);
-        }
-
         internal static partial class WebSecurityOriginList
         {
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_delete_WebSecurityOriginList")]
index 6352aba..8cd9b5f 100755 (executable)
@@ -368,6 +368,30 @@ namespace Tizen.NUI
 
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebViewConsoleMessageSignal_Disconnect")]
             public static extern void WebViewConsoleMessageSignalDisconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_new_WebViewContextMenuCustomizedSignal_ContextMenuCustomized")]
+            public static extern global::System.IntPtr NewWebViewContextMenuCustomizedSignalContextMenuCustomized(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_delete_WebViewContextMenuCustomizedSignal")]
+            public static extern void DeleteWebViewContextMenuCustomizedSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebViewContextMenuCustomizedSignal_Connect")]
+            public static extern void WebViewContextMenuCustomizedSignalConnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebViewContextMenuCustomizedSignal_Disconnect")]
+            public static extern void WebViewContextMenuCustomizedSignalDisconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_new_WebViewContextMenuItemSelectedSignal_ContextMenuItemSelected")]
+            public static extern global::System.IntPtr NewWebViewContextMenuItemSelectedSignalContextMenuItemSelected(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_delete_WebViewContextMenuItemSelectedSignal")]
+            public static extern void DeleteWebViewContextMenuItemSelectedSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebViewContextMenuItemSelectedSignal_Connect")]
+            public static extern void WebViewContextMenuItemSelectedSignalConnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_WebViewContextMenuItemSelectedSignal_Disconnect")]
+            public static extern void WebViewContextMenuItemSelectedSignalDisconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
         }
     }
 }
diff --git a/src/Tizen.NUI/src/internal/WebView/WebContextMenu.cs b/src/Tizen.NUI/src/internal/WebView/WebContextMenu.cs
new file mode 100755 (executable)
index 0000000..12ed6da
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+ * 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>
+    /// It is a class for context menu of web view.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class WebContextMenu : Disposable
+    {
+        internal WebContextMenu(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
+        {
+        }
+
+        /// This will not be public opened.
+        /// <param name="swigCPtr"></param>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
+        {
+            Interop.WebContextMenu.DeleteWebContextMenu(swigCPtr);
+        }
+
+        /// <summary>
+        /// Counts items of the context menu.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public uint ItemCount
+        {
+            get
+            {
+                return Interop.WebContextMenu.GetItemCount(SwigCPtr);
+            }
+        }
+
+        /// <summary>
+        /// Gets the list of items.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public WebContextMenuItemList ItemList
+        {
+            get
+            {
+                IntPtr result = Interop.WebContextMenu.GetItemList(SwigCPtr);
+                return new WebContextMenuItemList(result, true);
+            }
+        }
+
+        /// <summary>
+        /// Gets position of the context menu.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public Vector2 Position
+        {
+            get
+            {
+                IntPtr result = Interop.WebContextMenu.GetPosition(SwigCPtr);
+                return new Vector2(result, true);
+            }
+        }
+
+        /// <summary>
+        /// Returns the nth item in a context menu.
+        /// <param name="index">The position of the item</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public WebContextMenuItem GetItemAtIndex(uint index)
+        {
+            IntPtr result = Interop.WebContextMenu.GetItemAt(SwigCPtr, index);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return new WebContextMenuItem(result, true);
+        }
+
+        /// <summary>
+        /// Removes the item from the context menu.
+        /// <param name="item">The item to be removed</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool RemoveItem(WebContextMenuItem item)
+        {
+            bool result = Interop.WebContextMenu.RemoveItem(SwigCPtr, WebContextMenuItem.getCPtr(item));
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return result;
+        }
+
+        /// <summary>
+        /// Adds the item with a title to the context menu.
+        /// <param name="tag">The tag of context menu item</param>
+        /// <param name="title">The title of context menu item</param>
+        /// <param name="enabled">Whether context menu item is enabled or not</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool AppendItem(WebContextMenuItem.ItemTag tag, string title, bool enabled)
+        {
+            bool result = Interop.WebContextMenu.AppendItemAsAction(SwigCPtr, (int)tag, title, enabled);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return result;
+        }
+
+        /// <summary>
+        /// Adds the item with a title and an icon to the context menu.
+        /// <param name="tag">The tag of context menu item</param>
+        /// <param name="title">The title of context menu item</param>
+        /// <param name="iconFile">The path of icon to be set on context menu item</param>
+        /// <param name="enabled">Whether context menu item is enabled or not</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool AppendItem(WebContextMenuItem.ItemTag tag, string title, string iconFile, bool enabled)
+        {
+            bool result = Interop.WebContextMenu.AppendItem(SwigCPtr, (int)tag, title, iconFile, enabled);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return result;
+        }
+
+        /// <summary>
+        /// Selects the item from the context menu.
+        /// <param name="item">The item to be selected</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool SelectItem(WebContextMenuItem item)
+        {
+            bool result = Interop.WebContextMenu.SelectItem(SwigCPtr, WebContextMenuItem.getCPtr(item));
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return result;
+        }
+
+        /// <summary>
+        /// Hides the context menu.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool Hide()
+        {
+            bool result = Interop.WebContextMenu.Hide(SwigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return result;
+        }
+    }
+}
diff --git a/src/Tizen.NUI/src/internal/WebView/WebContextMenuItem.cs b/src/Tizen.NUI/src/internal/WebView/WebContextMenuItem.cs
new file mode 100755 (executable)
index 0000000..4b332c0
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+ * 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>
+    /// It is a class for context menu item of web view.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class WebContextMenuItem : Disposable
+    {
+        internal WebContextMenuItem(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
+        {
+        }
+
+        /// This will not be public opened.
+        /// <param name="swigCPtr"></param>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
+        {
+            Interop.WebContextMenuItem.DeleteWebContextMenuItem(swigCPtr);
+        }
+
+        /// <summary>
+        /// Enum that provides the tags of items for the context menu.
+        /// </summary>
+        public enum ItemTag
+        {
+            NoAction = 0,
+            OpenLinkInNewWindow,
+            DownloadLinkToDisk,
+            CopyLinkToClipboard,
+            OpenImageInNewWindow,
+            OpenImageInCurrentWindow,
+            DownloadImageToDisk,
+            CopyImageToClipboard,
+            OpenFrameInNewWindow,
+            Copy,
+            GoBack,
+            GoForward,
+            Stop,
+            Share,
+            Reload,
+            Cut,
+            Paste,
+            SpellingGuess,
+            NoGuessesFound,
+            IgnoreSpelling,
+            LearnSpelling,
+            Other,
+            SearchInSpotlight,
+            SearchWeb,
+            LookUpInDictionary,
+            OpenWithDefaultApplication,
+            PdfActualSize,
+            PdfZoomIn,
+            PdfZoomOut,
+            PdfAutoSize,
+            PdfSinglePage,
+            PdfPaging,
+            PdfContinuous,
+            PdfNextPage,
+            PdfPreviousPage,
+            OpenLink,
+            IgnoreGrammar,
+            SpellingMenu,
+            ShowSpellingPanel,
+            CheckSpelling,
+            CheckSpellingWhiteTyping,
+            CheckGrammarWithSpelling,
+            FontMenu,
+            ShowFonts,
+            Bold,
+            Italic,
+            Underline,
+            Outline,
+            Styles,
+            ShowColors,
+            SpeechMenu,
+            StartSpeaking,
+            StopSpeaking,
+            WritingDirectionMenu,
+            DefaultDirection,
+            LeftToRight,
+            RightToLeft,
+            PdfSinglePageScrolling,
+            PdfFacingPageScrolling,
+            InspectElement,
+            TextDirectionMenu,
+            TextDirectionDefault,
+            TextDirectionLeftToRight,
+            TextDirectionRightToLeft,
+            CorrectSpellingAutomatically,
+            SubstitutionMenu,
+            ShowSubstitutions,
+            SmartCopyPaste,
+            SmartQuotes,
+            SmartDashes,
+            SmartLinks,
+            TextReplacement,
+            TransformationMenu,
+            MakeUpperCase,
+            MakeLowerCase,
+            Capitalize,
+            ChangeBack,
+            OpenMediaInNewWindow,
+            CopyMediaLinkToClipboard,
+            ToggleMediaControls,
+            ToggleMediaLoop,
+            EnterVideoFullscreen,
+            MediaPlayPause,
+            MediaMute,
+            DictationAlternative,
+            SelectAll,
+            SelectWord,
+            TextSelectionMode,
+            Clipboard,
+            Drag,
+            Translate,
+            CopyLinkData,
+        }
+
+        /// <summary>
+        /// Enum that defines the types of the items for the context menu.
+        /// </summary>
+        public enum ItemType
+        {
+            Action,
+            CheckableAction,
+            Separator,
+            Submenu,
+        };
+
+        /// <summary>
+        /// Gets the tag of context menu item.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public ItemTag Tag
+        {
+            get
+            {
+                return (ItemTag)Interop.WebContextMenuItem.GetTag(SwigCPtr);
+            }
+        }
+
+        /// <summary>
+        /// Gets the type of context menu item.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public ItemType Type
+        {
+            get
+            {
+                return (ItemType)Interop.WebContextMenuItem.GetType(SwigCPtr);
+            }
+        }
+
+        /// <summary>
+        /// Checks if the item is enabled or not.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool IsEnabled
+        {
+            get
+            {
+                return Interop.WebContextMenuItem.IsEnabled(SwigCPtr);
+            }
+        }
+
+        /// <summary>
+        /// Gets the link url of context menu item.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public string LinkUrl
+        {
+            get
+            {
+                return Interop.WebContextMenuItem.GetLinkUrl(SwigCPtr);
+            }
+        }
+
+        /// <summary>
+        /// Gets the image url of context menu item.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public string ImageUrl
+        {
+            get
+            {
+                return Interop.WebContextMenuItem.GetImageUrl(SwigCPtr);
+            }
+        }
+
+        /// <summary>
+        /// Gets the title of the item.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public string Title
+        {
+            get
+            {
+                return Interop.WebContextMenuItem.GetTitle(SwigCPtr);
+            }
+        }
+
+        /// <summary>
+        /// Gets the parent menu for the item.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public WebContextMenu ParentMenu
+        {
+            get
+            {
+                IntPtr result = Interop.WebContextMenuItem.GetParentMenu(SwigCPtr);
+                return new WebContextMenu(result, true);
+            }
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WebContextMenuItem obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.SwigCPtr;
+        }
+    }
+}
diff --git a/src/Tizen.NUI/src/internal/WebView/WebContextMenuItemList.cs b/src/Tizen.NUI/src/internal/WebView/WebContextMenuItemList.cs
new file mode 100755 (executable)
index 0000000..bb673d4
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * 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>
+    /// It is a class for form repost policy decision maker of web view.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class WebContextMenuItemList : Disposable
+    {
+        internal WebContextMenuItemList(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
+        {
+        }
+
+        /// This will not be public opened.
+        /// <param name="swigCPtr"></param>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
+        {
+            Interop.WebContextMenuItemList.DeleteWebContextMenuItemList(swigCPtr);
+        }
+
+        /// <summary>
+        /// Gets item count
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public uint ItemCount
+        {
+            get
+            {
+                return Interop.WebContextMenuItemList.GetItemCount(SwigCPtr);
+            }
+        }
+
+        /// <summary>
+        /// Gets item at the index.
+        /// <param name="index">The index of item</param>
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public WebContextMenuItem GetItemAtIndex(uint index)
+        {
+            IntPtr result = Interop.WebContextMenuItemList.ValueOfIndex(SwigCPtr, index);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return new WebContextMenuItem(result, false);
+        }
+    }
+}
diff --git a/src/Tizen.NUI/src/internal/WebView/WebPasswordData.cs b/src/Tizen.NUI/src/internal/WebView/WebPasswordData.cs
new file mode 100755 (executable)
index 0000000..11aedd5
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * 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>
+    /// It is a class for password data of web view.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class WebPasswordData : Disposable
+    {
+        internal WebPasswordData(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
+        {
+        }
+
+        /// <summary>
+        /// Url which password is related to.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public string Url
+        {
+            get
+            {
+                return Interop.WebPasswordData.GetUrl(SwigCPtr);
+            }
+        }
+
+        /// <summary>
+        /// Whether fingerprint is used or not.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool FingerprintUsed
+        {
+            get
+            {
+                return Interop.WebPasswordData.GetUseFingerprint(SwigCPtr);
+            }
+        }
+    }
+}
index 4326104..e05cac1 100755 (executable)
@@ -21,45 +21,6 @@ using System.ComponentModel;
 namespace Tizen.NUI
 {
     /// <summary>
-    /// It is a class for password data of web view.
-    /// </summary>
-    [EditorBrowsable(EditorBrowsableState.Never)]
-    public class WebPasswordData : Disposable
-    {
-        internal WebPasswordData(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
-        {
-        }
-
-        /// <summary>
-        /// Url which password is related to.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public string Url
-        {
-            get
-            {
-                string result = Interop.WebPasswordData.GetUrl(SwigCPtr);
-                if (NDalicPINVOKE.SWIGPendingException.Pending) return null;
-                return result;
-            }
-        }
-
-        /// <summary>
-        /// Whether fingerprint is used or not.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public bool UseFingerprint
-        {
-            get
-            {
-                bool result = Interop.WebPasswordData.GetUseFingerprint(SwigCPtr);
-                if (NDalicPINVOKE.SWIGPendingException.Pending) return false;
-                return result;
-            }
-        }
-    }
-
-    /// <summary>
     /// It is a class for password data list of web view.
     /// </summary>
     [EditorBrowsable(EditorBrowsableState.Never)]
@@ -85,9 +46,7 @@ namespace Tizen.NUI
         {
             get
             {
-                uint result = Interop.WebPasswordDataList.GetItemCount(SwigCPtr);
-                if (NDalicPINVOKE.SWIGPendingException.Pending) return 0;
-                return result;
+                return Interop.WebPasswordDataList.GetItemCount(SwigCPtr);
             }
         }
 
diff --git a/src/Tizen.NUI/src/internal/WebView/WebSecurityOrigin.cs b/src/Tizen.NUI/src/internal/WebView/WebSecurityOrigin.cs
new file mode 100755 (executable)
index 0000000..dc6f4db
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * 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>
+    /// It is a class for security origin of web view.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class WebSecurityOrigin : Disposable
+    {
+        internal WebSecurityOrigin(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
+        {
+        }
+
+        /// <summary>
+        /// Host of security origin.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public string Host
+        {
+            get
+            {
+                return Interop.WebSecurityOrigin.GetHost(SwigCPtr);
+            }
+        }
+
+        /// <summary>
+        /// Protocol of security origin.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public string Protocol
+        {
+            get
+            {
+                return Interop.WebSecurityOrigin.GetProtocol(SwigCPtr);
+            }
+        }
+
+        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WebSecurityOrigin obj)
+        {
+            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.SwigCPtr;
+        }
+    }
+}
index 0d59657..6aacd67 100755 (executable)
@@ -21,50 +21,6 @@ using System.ComponentModel;
 namespace Tizen.NUI
 {
     /// <summary>
-    /// It is a class for security origin of web view.
-    /// </summary>
-    [EditorBrowsable(EditorBrowsableState.Never)]
-    public class WebSecurityOrigin : Disposable
-    {
-        internal WebSecurityOrigin(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
-        {
-        }
-
-        /// <summary>
-        /// Host of security origin.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public string Host
-        {
-            get
-            {
-                string result = Interop.WebSecurityOrigin.GetHost(SwigCPtr);
-                if (NDalicPINVOKE.SWIGPendingException.Pending) return null;
-                return result;
-            }
-        }
-
-        /// <summary>
-        /// Protocol of security origin.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public string Protocol
-        {
-            get
-            {
-                string result = Interop.WebSecurityOrigin.GetProtocol(SwigCPtr);
-                if (NDalicPINVOKE.SWIGPendingException.Pending) return null;
-                return result;
-            }
-        }
-
-        internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WebSecurityOrigin obj)
-        {
-            return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.SwigCPtr;
-        }
-    }
-
-    /// <summary>
     /// It is a class for security origin list of web view.
     /// </summary>
     [EditorBrowsable(EditorBrowsableState.Never)]
@@ -90,9 +46,7 @@ namespace Tizen.NUI
         {
             get
             {
-                uint result = Interop.WebSecurityOriginList.GetItemCount(SwigCPtr);
-                if (NDalicPINVOKE.SWIGPendingException.Pending) return 0;
-                return result;
+                return Interop.WebSecurityOriginList.GetItemCount(SwigCPtr);
             }
         }
 
index e93fb17..cc31b65 100755 (executable)
@@ -94,6 +94,14 @@ namespace Tizen.NUI
         private EventHandler<WebViewConsoleMessageReceivedEventArgs> consoleMessageReceivedEventHandler;
         private WebViewConsoleMessageReceivedCallbackDelegate consoleMessageReceivedCallback;
 
+        private readonly WebViewContextMenuCustomizedSignal contextMenuCustomizedSignal;
+        private EventHandler<WebViewContextMenuCustomizedEventArgs> contextMenuCustomizedEventHandler;
+        private WebViewContextMenuCustomizedCallbackDelegate contextMenuCustomizedCallback;
+
+        private readonly WebViewContextMenuItemSelectedSignal contextMenuItemSelectedSignal;
+        private EventHandler<WebViewContextMenuItemSelectedEventArgs> contextMenuItemSelectedEventHandler;
+        private WebViewContextMenuItemSelectedCallbackDelegate contextMenuItemSelectedCallback;
+
         /// <summary>
         /// Creates a WebView.
         /// </summary>
@@ -150,6 +158,8 @@ namespace Tizen.NUI
             httpAuthRequestedSignal = new WebViewHttpAuthRequestedSignal(Interop.WebView.NewWebViewHttpAuthHandlerSignalHttpAuthHandler(SwigCPtr));
             httpRequestInterceptedSignal = new WebViewHttpRequestInterceptedSignal(Interop.WebView.NewWebViewRequestInterceptorSignalRequestInterceptor(SwigCPtr));
             consoleMessageReceivedSignal = new WebViewConsoleMessageReceivedSignal(Interop.WebView.NewWebViewConsoleMessageSignalConsoleMessage(SwigCPtr));
+            contextMenuCustomizedSignal = new WebViewContextMenuCustomizedSignal(Interop.WebView.NewWebViewContextMenuCustomizedSignalContextMenuCustomized(SwigCPtr));
+            contextMenuItemSelectedSignal = new WebViewContextMenuItemSelectedSignal(Interop.WebView.NewWebViewContextMenuItemSelectedSignalContextMenuItemSelected(SwigCPtr));
 
             screenshotAcquiredProxyCallback = OnScreenshotAcquired;
 
@@ -189,6 +199,8 @@ namespace Tizen.NUI
                 httpAuthRequestedSignal.Dispose();
                 httpRequestInterceptedSignal.Dispose();
                 consoleMessageReceivedSignal.Dispose();
+                contextMenuCustomizedSignal.Dispose();
+                contextMenuItemSelectedSignal.Dispose();
 
                 BackForwardList.Dispose();
                 Context.Dispose();
@@ -199,6 +211,14 @@ namespace Tizen.NUI
             base.Dispose(type);
         }
 
+        /// 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);
+        }
+
         /// <summary>
         /// The callback function that is invoked when the message is received from the script.
         /// </summary>
@@ -284,6 +304,12 @@ namespace Tizen.NUI
         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
         private delegate void WebViewConsoleMessageReceivedCallbackDelegate(IntPtr data, IntPtr message);
 
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void WebViewContextMenuCustomizedCallbackDelegate(IntPtr data, IntPtr menu);
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void WebViewContextMenuItemSelectedCallbackDelegate(IntPtr data, IntPtr item);
+
         /// <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 />
@@ -649,6 +675,58 @@ namespace Tizen.NUI
         }
 
         /// <summary>
+        /// Event for the ContextMenuCustomized signal which can be used to subscribe or unsubscribe the event handler.<br />
+        /// This signal is emitted when context menu is customized.<br />
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public event EventHandler<WebViewContextMenuCustomizedEventArgs> ContextMenuCustomized
+        {
+            add
+            {
+                if (contextMenuCustomizedEventHandler == null)
+                {
+                    contextMenuCustomizedCallback = OnContextMenuCustomized;
+                    contextMenuCustomizedSignal.Connect(contextMenuCustomizedCallback);
+                }
+                contextMenuCustomizedEventHandler += value;
+            }
+            remove
+            {
+                contextMenuCustomizedEventHandler -= value;
+                if (contextMenuCustomizedEventHandler == null && contextMenuCustomizedCallback != null)
+                {
+                    contextMenuCustomizedSignal.Disconnect(contextMenuCustomizedCallback);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Event for the ContextMenuItemSelected signal which can be used to subscribe or unsubscribe the event handler.<br />
+        /// This signal is emitted when context menu item is selected.<br />
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public event EventHandler<WebViewContextMenuItemSelectedEventArgs> ContextMenuItemSelected
+        {
+            add
+            {
+                if (contextMenuItemSelectedEventHandler == null)
+                {
+                    contextMenuItemSelectedCallback = OnContextMenuItemSelected;
+                    contextMenuItemSelectedSignal.Connect(contextMenuItemSelectedCallback);
+                }
+                contextMenuItemSelectedEventHandler += value;
+            }
+            remove
+            {
+                contextMenuItemSelectedEventHandler -= value;
+                if (contextMenuItemSelectedEventHandler == null && contextMenuItemSelectedCallback != null)
+                {
+                    contextMenuItemSelectedSignal.Disconnect(contextMenuItemSelectedCallback);
+                }
+            }
+        }
+
+        /// <summary>
         /// Options for searching texts.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
@@ -1065,8 +1143,6 @@ namespace Tizen.NUI
             get
             {
                 global::System.IntPtr imageView = Interop.WebView.GetFavicon(SwigCPtr);
-                if (NDalicPINVOKE.SWIGPendingException.Pending)
-                    return null;
                 return new ImageView(imageView, false);
             }
         }
@@ -1895,14 +1971,6 @@ namespace Tizen.NUI
             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();
@@ -1935,8 +2003,7 @@ namespace Tizen.NUI
 
         private void OnScrollEdgeReached(IntPtr data, int edge)
         {
-            WebViewScrollEdgeReachedEventArgs arg = new WebViewScrollEdgeReachedEventArgs((WebViewScrollEdgeReachedEventArgs.Edge)edge);
-            scrollEdgeReachedEventHandler?.Invoke(this, arg);
+            scrollEdgeReachedEventHandler?.Invoke(this, new WebViewScrollEdgeReachedEventArgs((WebViewScrollEdgeReachedEventArgs.Edge)edge));
         }
 
         private void OnUrlChanged(IntPtr data, string pageUrl)
@@ -1946,9 +2013,7 @@ namespace Tizen.NUI
 
         private void OnFormRepostPolicyDecided(IntPtr data, IntPtr decision)
         {
-            WebFormRepostPolicyDecisionMaker repostDecision = new WebFormRepostPolicyDecisionMaker(decision, false);
-            formRepostPolicyDecidedEventHandler?.Invoke(this, new WebViewFormRepostPolicyDecidedEventArgs(repostDecision));
-            repostDecision.Dispose();
+            formRepostPolicyDecidedEventHandler?.Invoke(this, new WebViewFormRepostPolicyDecidedEventArgs(new WebFormRepostPolicyDecisionMaker(decision, false)));
         }
 
         private void OnFrameRendered(IntPtr data)
@@ -1992,5 +2057,15 @@ namespace Tizen.NUI
         {
             consoleMessageReceivedEventHandler?.Invoke(this, new WebViewConsoleMessageReceivedEventArgs(new WebConsoleMessage(message, false)));
         }
+
+        private void OnContextMenuCustomized(IntPtr data, IntPtr menu)
+        {
+            contextMenuCustomizedEventHandler?.Invoke(this, new WebViewContextMenuCustomizedEventArgs(new WebContextMenu(menu, false)));
+        }
+
+        private void OnContextMenuItemSelected(IntPtr data, IntPtr item)
+        {
+            contextMenuItemSelectedEventHandler?.Invoke(this, new WebViewContextMenuItemSelectedEventArgs(new WebContextMenuItem(item, false)));
+        }
     }
 }
diff --git a/src/Tizen.NUI/src/internal/WebView/WebViewContextMenuCustomizedEventArgs.cs b/src/Tizen.NUI/src/internal/WebView/WebViewContextMenuCustomizedEventArgs.cs
new file mode 100755 (executable)
index 0000000..70c97a0
--- /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.ContextMenuCustomized.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class WebViewContextMenuCustomizedEventArgs : EventArgs
+    {
+        internal WebViewContextMenuCustomizedEventArgs(WebContextMenu menu)
+        {
+            ContextMenu = menu;
+        }
+
+        /// <summary>
+        /// The context menu.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public WebContextMenu ContextMenu { get; }
+    }
+}
diff --git a/src/Tizen.NUI/src/internal/WebView/WebViewContextMenuCustomizedSignal.cs b/src/Tizen.NUI/src/internal/WebView/WebViewContextMenuCustomizedSignal.cs
new file mode 100755 (executable)
index 0000000..b19e0c2
--- /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 WebViewContextMenuCustomizedSignal : Disposable
+    {
+        public WebViewContextMenuCustomizedSignal(global::System.IntPtr cPtr) : base(cPtr, true)
+        {
+        }
+
+        protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
+        {
+            Interop.WebView.DeleteWebViewContextMenuCustomizedSignal(swigCPtr);
+        }
+
+        public void Connect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                Interop.WebView.WebViewContextMenuCustomizedSignalConnect(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.WebViewContextMenuCustomizedSignalDisconnect(SwigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending)
+                {
+                    throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+                }
+            }
+        }
+    }
+}
diff --git a/src/Tizen.NUI/src/internal/WebView/WebViewContextMenuItemSelectedEventArgs.cs b/src/Tizen.NUI/src/internal/WebView/WebViewContextMenuItemSelectedEventArgs.cs
new file mode 100755 (executable)
index 0000000..ac47e26
--- /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.ContextMenuItemSelected.
+    /// </summary>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class WebViewContextMenuItemSelectedEventArgs : EventArgs
+    {
+        internal WebViewContextMenuItemSelectedEventArgs(WebContextMenuItem item)
+        {
+            ContextMenuItem = item;
+        }
+
+        /// <summary>
+        /// The selected context menu item.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public WebContextMenuItem ContextMenuItem { get; }
+    }
+}
diff --git a/src/Tizen.NUI/src/internal/WebView/WebViewContextMenuItemSelectedSignal.cs b/src/Tizen.NUI/src/internal/WebView/WebViewContextMenuItemSelectedSignal.cs
new file mode 100755 (executable)
index 0000000..9800e83
--- /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 WebViewContextMenuItemSelectedSignal : Disposable
+    {
+        public WebViewContextMenuItemSelectedSignal(global::System.IntPtr cPtr) : base(cPtr, true)
+        {
+        }
+
+        protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
+        {
+            Interop.WebView.DeleteWebViewContextMenuItemSelectedSignal(swigCPtr);
+        }
+
+        public void Connect(System.Delegate func)
+        {
+            System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+            {
+                Interop.WebView.WebViewContextMenuItemSelectedSignalConnect(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.WebViewContextMenuItemSelectedSignalDisconnect(SwigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+                if (NDalicPINVOKE.SWIGPendingException.Pending)
+                {
+                    throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+                }
+            }
+        }
+    }
+}