Add an API for 'create,window' event. 20/285620/1
authorhuayong.xu <huayong.xu@samsung.com>
Thu, 15 Dec 2022 09:49:34 +0000 (17:49 +0800)
committerhuayong.xu <huayong.xu@samsung.com>
Thu, 15 Dec 2022 09:49:34 +0000 (17:49 +0800)
Change-Id: I9905ec1e2fc32ab3b7be42179d881404f812024a

dali/devel-api/adaptor-framework/web-engine/web-engine-plugin.h
dali/devel-api/adaptor-framework/web-engine/web-engine.cpp
dali/devel-api/adaptor-framework/web-engine/web-engine.h
dali/internal/web-engine/common/web-engine-impl.cpp
dali/internal/web-engine/common/web-engine-impl.h

index 7a53042..39c6371 100755 (executable)
@@ -21,7 +21,6 @@
 // EXTERNAL INCLUDES
 #include <dali/public-api/images/native-image-interface.h>
 #include <dali/public-api/math/rect.h>
-#include <dali/public-api/signals/dali-signal.h>
 #include <functional>
 #include <memory>
 
@@ -39,9 +38,7 @@ class TouchEvent;
 class WebEngineBackForwardList;
 class WebEngineCertificate;
 class WebEngineConsoleMessage;
-class WebEngineContext;
 class WebEngineContextMenu;
-class WebEngineCookieManager;
 class WebEngineFormRepostDecision;
 class WebEngineHitTest;
 class WebEngineHttpAuthHandler;
@@ -59,11 +56,6 @@ class WebEnginePlugin
 {
 public:
   /**
-   * @brief WebView signal type related with frame rendered.
-   */
-  using WebEngineFrameRenderedSignalType = Signal<void(void)>;
-
-  /**
    * @brief WebEngine callback related with page loading.
    */
   using WebEnginePageLoadCallback = std::function<void(const std::string&)>;
@@ -174,6 +166,11 @@ public:
   using WebEngineNavigationPolicyDecidedCallback = std::function<void(std::unique_ptr<Dali::WebEnginePolicyDecision>)>;
 
   /**
+   * @brief WebView callback related with a new window would be created.
+   */
+  using WebEngineNewWindowCreatedCallback = std::function<void(Dali::WebEnginePlugin*&)>;
+
+  /**
    * @brief Hit test callback called after hit test is created asynchronously.
    */
   using WebEngineHitTestCreatedCallback = std::function<bool(std::unique_ptr<Dali::WebEngineHitTest>)>;
@@ -760,11 +757,11 @@ public:
   virtual bool SendWheelEvent(const WheelEvent& event) = 0;
 
   /**
-   * @brief Connect to this signal to be notified when frame is rendered.
+   * @brief Callback to be called when frame would be rendered.
    *
-   * @return A signal object to connect with.
+   * @param[in] callback
    */
-  virtual WebEngineFrameRenderedSignalType& FrameRenderedSignal() = 0;
+  virtual void RegisterFrameRenderedCallback(WebEngineFrameRenderedCallback callback) = 0;
 
   /**
    * @brief Callback to be called when page loading is started.
@@ -837,6 +834,13 @@ public:
   virtual void RegisterNavigationPolicyDecidedCallback(WebEngineNavigationPolicyDecidedCallback callback) = 0;
 
   /**
+   * @brief Callback to be called when a new window would be created.
+   *
+   * @param[in] callback
+   */
+  virtual void RegisterNewWindowCreatedCallback(WebEngineNewWindowCreatedCallback callback) = 0;
+
+  /**
    * @brief Callback to be called when certificate need be confirmed.
    *
    * @param[in] callback
index 9cb82e2..6367f71 100755 (executable)
@@ -480,9 +480,9 @@ void WebEngine::EnableVideoHole(bool enabled)
   GetImplementation(*this).EnableVideoHole(enabled);
 }
 
-Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& WebEngine::FrameRenderedSignal()
+void WebEngine::RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback)
 {
-  return GetImplementation(*this).FrameRenderedSignal();
+  GetImplementation(*this).RegisterFrameRenderedCallback(callback);
 }
 
 void WebEngine::RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
@@ -535,6 +535,11 @@ void WebEngine::RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::W
   GetImplementation(*this).RegisterNavigationPolicyDecidedCallback(callback);
 }
 
+void WebEngine::RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback)
+{
+  GetImplementation(*this).RegisterNewWindowCreatedCallback(callback);
+}
+
 void WebEngine::RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
 {
   GetImplementation(*this).RegisterCertificateConfirmedCallback(callback);
index 1c98c00..2d33aba 100755 (executable)
@@ -28,6 +28,9 @@
 
 namespace Dali
 {
+class WebEngineContext;
+class WebEngineCookieManager;
+
 namespace Internal
 {
 namespace Adaptor
@@ -659,11 +662,11 @@ public:
   bool SendWheelEvent(const WheelEvent& event);
 
   /**
-   * @brief Connect to this signal to be notified when frame is rendered.
+   * @brief Callback to be called when frame would be rendered.
    *
-   * @return A signal object to connect with.
+   * @param[in] callback
    */
-  Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& FrameRenderedSignal();
+  void RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback);
 
   /**
    * @brief Callback to be called when page loading is started.
@@ -736,6 +739,13 @@ public:
   void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback);
 
   /**
+   * @brief Callback to be called when a new window would be created.
+   *
+   * @param[in] callback
+   */
+  void RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback);
+
+  /**
    * @brief Callback to be called when certificate need be confirmed.
    *
    * @param[in] callback
index 3d5e300..a54cb82 100644 (file)
@@ -89,7 +89,7 @@ public:
    */
   explicit operator bool() const
   {
-    return mLoadSuccess;
+    return mLoadSucceeded;
   }
 
   bool InitializeContextHandle()
@@ -102,7 +102,6 @@ public:
     if(!mGetWebEngineContextPtr)
     {
       mGetWebEngineContextPtr = reinterpret_cast<GetWebEngineContext>(dlsym(mHandle, "GetWebEngineContext"));
-
       if(!mGetWebEngineContextPtr)
       {
         DALI_LOG_ERROR("Can't load symbol GetWebEngineContext(), error: %s\n", dlerror());
@@ -123,7 +122,6 @@ public:
     if(!mGetWebEngineCookieManagerPtr)
     {
       mGetWebEngineCookieManagerPtr = reinterpret_cast<GetWebEngineCookieManager>(dlsym(mHandle, "GetWebEngineCookieManager"));
-
       if(!mGetWebEngineCookieManagerPtr)
       {
         DALI_LOG_ERROR("Can't load symbol GetWebEngineCookieManager(), error: %s\n", dlerror());
@@ -137,32 +135,28 @@ public:
 private:
   // Private constructor / destructor
   WebEnginePluginObject()
-  : mPluginName{},
-    mLoadSuccess{false},
+  : mLoadSucceeded{false},
     mHandle{nullptr},
     mCreateWebEnginePtr{nullptr},
     mDestroyWebEnginePtr{nullptr},
     mGetWebEngineContextPtr{nullptr},
     mGetWebEngineCookieManagerPtr{nullptr}
   {
-    if(mPluginName.length() == 0)
+    std::string pluginName;
+    const char* name = EnvironmentVariable::GetEnvironmentVariable(DALI_ENV_WEB_ENGINE_NAME);
+    if(name)
     {
-      // mPluginName is not initialized yet.
-      const char* name = EnvironmentVariable::GetEnvironmentVariable(DALI_ENV_WEB_ENGINE_NAME);
-      if(name)
-      {
-        mPluginName = MakePluginName(name);
-      }
-      else
-      {
-        mPluginName = std::string(kPluginFullNameDefault);
-      }
+      pluginName = MakePluginName(name);
+    }
+    else
+    {
+      pluginName = std::string(kPluginFullNameDefault);
     }
 
-    mHandle = dlopen(mPluginName.c_str(), RTLD_LAZY);
+    mHandle = dlopen(pluginName.c_str(), RTLD_LAZY);
     if(!mHandle)
     {
-      DALI_LOG_ERROR("Can't load %s : %s\n", mPluginName.c_str(), dlerror());
+      DALI_LOG_ERROR("Can't load %s : %s\n", pluginName.c_str(), dlerror());
       return;
     }
 
@@ -180,7 +174,7 @@ private:
       return;
     }
 
-    mLoadSuccess = true;
+    mLoadSucceeded = true;
   }
 
   ~WebEnginePluginObject()
@@ -188,8 +182,8 @@ private:
     if(mHandle)
     {
       dlclose(mHandle);
-      mHandle      = nullptr;
-      mLoadSuccess = false;
+      mHandle        = nullptr;
+      mLoadSucceeded = false;
     }
   }
 
@@ -199,11 +193,7 @@ private:
   WebEnginePluginObject& operator=(WebEnginePluginObject&&) = delete;
 
 private:
-  std::string mPluginName; ///< Name of web engine plugin
-                           /// Note: Dali WebView policy does not allow to use multiple web engines in an application.
-                           /// So once pluginName is set to non-empty string, it will not change.
-
-  bool mLoadSuccess; ///< True if library loaded successfully. False otherwise.
+  bool mLoadSucceeded; ///< True if library loaded successfully. False otherwise.
 
 public:
   using CreateWebEngineFunction  = Dali::WebEnginePlugin* (*)();
@@ -700,9 +690,9 @@ bool WebEngine::SendWheelEvent(const Dali::WheelEvent& event)
   return mPlugin->SendWheelEvent(event);
 }
 
-Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& WebEngine::FrameRenderedSignal()
+void WebEngine::RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback)
 {
-  return mPlugin->FrameRenderedSignal();
+  mPlugin->RegisterFrameRenderedCallback(callback);
 }
 
 void WebEngine::RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
@@ -755,6 +745,11 @@ void WebEngine::RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::W
   mPlugin->RegisterNavigationPolicyDecidedCallback(callback);
 }
 
+void WebEngine::RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback)
+{
+  mPlugin->RegisterNewWindowCreatedCallback(callback);
+}
+
 void WebEngine::RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
 {
   mPlugin->RegisterCertificateConfirmedCallback(callback);
index 96e6eac..7cc0ac0 100755 (executable)
@@ -468,9 +468,9 @@ public:
   bool SendWheelEvent(const Dali::WheelEvent& event);
 
   /**
-   * @copydoc Dali::WebEngine::FrameRenderedSignal()
+   @copydoc Dali::WebEngine::RegisterFrameRenderedCallback()
    */
-  Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& FrameRenderedSignal();
+  void RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback);
 
   /**
    * @copydoc Dali::WebEngine::RegisterPageLoadStartedCallback()
@@ -523,6 +523,11 @@ public:
   void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback);
 
   /**
+   @copydoc Dali::WebEngine::RegisterNewWindowCreatedCallback()
+   */
+  void RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback);
+
+  /**
    * @copydoc Dali::WebEngine::RegisterCertificateConfirmedCallback()
    */
   void RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback);