Add callbacks for form repost decision and frame rendering. 79/254179/9
authorhuayong.xu <huayong.xu@samsung.com>
Wed, 24 Feb 2021 09:45:47 +0000 (17:45 +0800)
committerhuayong.xu <huayong.xu@samsung.com>
Mon, 29 Mar 2021 02:51:49 +0000 (10:51 +0800)
This patch is to add callbacks for form repost decision and frame
rendering in csharp binder.

Change-Id: If8b1cadc942b81e0989258baa2b20ab708e43edf

dali-csharp-binder/src/web-view-signal-converter.h
dali-csharp-binder/src/web-view.cpp

index d223586..1aa2324 100755 (executable)
@@ -237,6 +237,59 @@ private:
   ProxySignalType   mProxySignal;
 };
 
+// Proxy class of WebViewFormRepostDecisionSignal.
+// WebViewFormRepostDecisionSignal has an argument of std::shared_ptr type which is not supported at C# side.
+// The purpose of this class is to convert signal argument of std::shared_ptr type safely.
+class WebViewFormRepostDecisionSignal : public Dali::ConnectionTracker
+{
+public:
+  using NativeSignalType = Dali::Signal<void(Dali::Toolkit::WebView, std::shared_ptr<Dali::Toolkit::WebFormRepostDecision>)>;
+  using ProxySignalType = Dali::Signal<void(Dali::Toolkit::WebView, Dali::Toolkit::WebFormRepostDecision*)>;
+  using CallbackType = void (*)(Dali::Toolkit::WebView, Dali::Toolkit::WebFormRepostDecision*);
+
+  WebViewFormRepostDecisionSignal(NativeSignalType* signal)
+    : mNativeSignalPtr(signal)
+  {
+  }
+
+  ~WebViewFormRepostDecisionSignal()
+  {
+    if (!mProxySignal.Empty())
+    {
+      mNativeSignalPtr->Disconnect(this, &SignalConverter::WebViewFormRepostDecisionSignal::OnEmit);
+    }
+  }
+
+  void Connect(CallbackType csharpCallback)
+  {
+    if (mNativeSignalPtr->Empty())
+    {
+      mNativeSignalPtr->Connect(this, &SignalConverter::WebViewFormRepostDecisionSignal::OnEmit);
+    }
+    mProxySignal.Connect(csharpCallback);
+  }
+
+  void Disconnect(CallbackType csharpCallback)
+  {
+    mProxySignal.Disconnect(csharpCallback);
+    if (mProxySignal.Empty())
+    {
+      mNativeSignalPtr->Disconnect(this, &SignalConverter::WebViewFormRepostDecisionSignal::OnEmit);
+    }
+  }
+
+  void OnEmit(Dali::Toolkit::WebView webview, std::shared_ptr<Dali::Toolkit::WebFormRepostDecision> decision)
+  {
+    mFormRepostDecision = std::move(decision);
+    mProxySignal.Emit(webview, mFormRepostDecision.get());
+  }
+
+private:
+  NativeSignalType* mNativeSignalPtr;
+  ProxySignalType   mProxySignal;
+  std::shared_ptr<Dali::Toolkit::WebFormRepostDecision> mFormRepostDecision;
+};
+
 } // namespace SignalConverter
 
 #endif // __DALI_CSHARP_BINDER_WEB_VIEW_SIGNAL_CONVERTER_H__
index 17bea67..67c47d4 100755 (executable)
@@ -27,6 +27,7 @@
 #include <dali-toolkit/devel-api/controls/web-view/web-back-forward-list.h>
 #include <dali-toolkit/devel-api/controls/web-view/web-context.h>
 #include <dali-toolkit/devel-api/controls/web-view/web-cookie-manager.h>
+#include <dali-toolkit/devel-api/controls/web-view/web-form-repost-decision.h>
 #include <dali-toolkit/devel-api/controls/web-view/web-settings.h>
 #include <dali-toolkit/devel-api/controls/web-view/web-view.h>
 #include <dali/public-api/common/dali-common.h>
@@ -811,7 +812,7 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewScrollEdgeReachedSignal_Disconnec
 
 SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_WebViewUrlChangedSignal_UrlChanged(void *jarg1) {
   Dali::Toolkit::WebView* webview = (Dali::Toolkit::WebView*)jarg1;
-  SignalConverter::WebViewUrlChangedSignal *result = 0;
+  SignalConverter::WebViewUrlChangedSignalresult = 0;
   {
     try {
       result = new SignalConverter::WebViewUrlChangedSignal(&webview->UrlChangedSignal());
@@ -849,6 +850,77 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewUrlChangedSignal_Disconnect(void
   }
 }
 
+SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_new_WebViewFormRepostDecisionSignal_FormRepostDecision(void* jarg1) {
+  Dali::Toolkit::WebView* webview = (Dali::Toolkit::WebView*)jarg1;
+  SignalConverter::WebViewFormRepostDecisionSignal* result = 0;
+  {
+    try {
+      result = new SignalConverter::WebViewFormRepostDecisionSignal(&webview->FormRepostDecisionSignal());
+    } CALL_CATCH_EXCEPTION(0);
+  }
+  return (void*)result;
+}
+
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_WebViewFormRepostDecisionSignal(void* jarg1) {
+  SignalConverter::WebViewFormRepostDecisionSignal* object = (SignalConverter::WebViewFormRepostDecisionSignal*)jarg1;
+  {
+    try {
+      delete object;
+    } CALL_CATCH_EXCEPTION();
+  }
+}
+
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewFormRepostDecisionSignal_Connect(void* jarg1, void* jarg2) {
+  SignalConverter::WebViewFormRepostDecisionSignal* proxy = (SignalConverter::WebViewFormRepostDecisionSignal*)jarg1;
+  SignalConverter::WebViewFormRepostDecisionSignal::CallbackType callback = (SignalConverter::WebViewFormRepostDecisionSignal::CallbackType)jarg2;
+  {
+    try {
+      proxy->Connect(callback);
+    } CALL_CATCH_EXCEPTION();
+  }
+}
+
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewFormRepostDecisionSignal_Disconnect(void* jarg1, void* jarg2) {
+  SignalConverter::WebViewFormRepostDecisionSignal* proxy = (SignalConverter::WebViewFormRepostDecisionSignal*)jarg1;
+  SignalConverter::WebViewFormRepostDecisionSignal::CallbackType callback = (SignalConverter::WebViewFormRepostDecisionSignal::CallbackType)jarg2;
+  {
+    try {
+      proxy->Disconnect(callback);
+    } CALL_CATCH_EXCEPTION();
+  }
+}
+
+SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_WebViewFrameRenderedSignal_FrameRendered(void* jarg1) {
+  Dali::Toolkit::WebView* webview = (Dali::Toolkit::WebView*)jarg1;
+  Dali::Toolkit::WebView::WebViewFrameRenderedSignalType* result = 0;
+  {
+    try {
+      result = (Dali::Toolkit::WebView::WebViewFrameRenderedSignalType*)(&(webview->FrameRenderedSignal()));
+    } CALL_CATCH_EXCEPTION(0);
+  }
+  return (void *)result;
+}
+
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewFrameRenderedSignal_Connect(void* jarg1, void* jarg2) {
+  Dali::Toolkit::WebView::WebViewFrameRenderedSignalType* proxy = (Dali::Toolkit::WebView::WebViewFrameRenderedSignalType*)jarg1;
+  void (*callback)(Dali::Toolkit::WebView) = (void (*)(Dali::Toolkit::WebView))jarg2;
+  {
+    try {
+      proxy->Connect(callback);
+    } CALL_CATCH_EXCEPTION();
+  }
+}
+
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebViewFrameRenderedSignal_Disconnect(void* jarg1, void* jarg2) {
+  Dali::Toolkit::WebView::WebViewFrameRenderedSignalType* proxy = (Dali::Toolkit::WebView::WebViewFrameRenderedSignalType*)jarg1;
+  void (*callback)(Dali::Toolkit::WebView) = (void (*)(Dali::Toolkit::WebView))jarg2;
+  {
+    try {
+      proxy->Disconnect(callback);
+    } CALL_CATCH_EXCEPTION();
+  }
+}
+
 //----------------------------------WebBackForwardList-----------------------------------------------------
 SWIGEXPORT const char * SWIGSTDCALL CSharp_Dali_WebBackForwardListItem_GetUrl(void *jarg1) {
   Dali::Toolkit::WebBackForwardListItem *arg1 = (Dali::Toolkit::WebBackForwardListItem *)0;
@@ -1091,6 +1163,16 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebCookieManager_ClearCookies(void *jarg
   }
 }
 
+//----------------------------------WebFormRepostDecision---------------------------------------------------
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebFormRepostDecision_Reply(void *jarg1, bool jarg2) {
+  Dali::Toolkit::WebFormRepostDecision* arg1 = (Dali::Toolkit::WebFormRepostDecision*)jarg1;
+  {
+    try {
+      arg1->Reply(jarg2);
+    } CALL_CATCH_EXCEPTION();
+  }
+}
+
 //----------------------------------WebSettings---------------------------------------------------
 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_WebSettings_AllowMixedContents(void *jarg1, bool jarg2) {
   Dali::Toolkit::WebSettings *arg1 = (Dali::Toolkit::WebSettings *)0;