From 0aa2017bbab445436eb696fc910d519be3101413 Mon Sep 17 00:00:00 2001 From: "huayong.xu" Date: Thu, 15 Dec 2022 17:49:34 +0800 Subject: [PATCH] Add an API for 'create,window' event. Change-Id: I9905ec1e2fc32ab3b7be42179d881404f812024a --- .../web-engine/web-engine-plugin.h | 26 ++++++----- .../adaptor-framework/web-engine/web-engine.cpp | 9 +++- .../adaptor-framework/web-engine/web-engine.h | 16 +++++-- .../internal/web-engine/common/web-engine-impl.cpp | 51 ++++++++++------------ dali/internal/web-engine/common/web-engine-impl.h | 9 +++- 5 files changed, 65 insertions(+), 46 deletions(-) diff --git a/dali/devel-api/adaptor-framework/web-engine/web-engine-plugin.h b/dali/devel-api/adaptor-framework/web-engine/web-engine-plugin.h index 7a53042..39c6371 100755 --- a/dali/devel-api/adaptor-framework/web-engine/web-engine-plugin.h +++ b/dali/devel-api/adaptor-framework/web-engine/web-engine-plugin.h @@ -21,7 +21,6 @@ // EXTERNAL INCLUDES #include #include -#include #include #include @@ -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; - - /** * @brief WebEngine callback related with page loading. */ using WebEnginePageLoadCallback = std::function; @@ -174,6 +166,11 @@ public: using WebEngineNavigationPolicyDecidedCallback = std::function)>; /** + * @brief WebView callback related with a new window would be created. + */ + using WebEngineNewWindowCreatedCallback = std::function; + + /** * @brief Hit test callback called after hit test is created asynchronously. */ using WebEngineHitTestCreatedCallback = std::function)>; @@ -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 diff --git a/dali/devel-api/adaptor-framework/web-engine/web-engine.cpp b/dali/devel-api/adaptor-framework/web-engine/web-engine.cpp index 9cb82e2..6367f71 100755 --- a/dali/devel-api/adaptor-framework/web-engine/web-engine.cpp +++ b/dali/devel-api/adaptor-framework/web-engine/web-engine.cpp @@ -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); diff --git a/dali/devel-api/adaptor-framework/web-engine/web-engine.h b/dali/devel-api/adaptor-framework/web-engine/web-engine.h index 1c98c00..2d33aba 100755 --- a/dali/devel-api/adaptor-framework/web-engine/web-engine.h +++ b/dali/devel-api/adaptor-framework/web-engine/web-engine.h @@ -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 diff --git a/dali/internal/web-engine/common/web-engine-impl.cpp b/dali/internal/web-engine/common/web-engine-impl.cpp index 3d5e300..a54cb82 100644 --- a/dali/internal/web-engine/common/web-engine-impl.cpp +++ b/dali/internal/web-engine/common/web-engine-impl.cpp @@ -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(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(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); diff --git a/dali/internal/web-engine/common/web-engine-impl.h b/dali/internal/web-engine/common/web-engine-impl.h index 96e6eac..7cc0ac0 100755 --- a/dali/internal/web-engine/common/web-engine-impl.h +++ b/dali/internal/web-engine/common/web-engine-impl.h @@ -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); -- 2.7.4