From 72384c0ecf89fb0623ffbc55f49dd6b6b298170b Mon Sep 17 00:00:00 2001 From: "huayong.xu" Date: Wed, 30 Dec 2020 17:41:37 +0800 Subject: [PATCH] Add APIs to show javascript popup in web engine. Add callbacks for 'url,changed', 'load,progress', and javascript alert/confirm/prompt. Change-Id: I8b5a0b91ac58a7e1ccb541e32b20d2c745b3ef66 --- .../adaptor-framework/web-engine-plugin.h | 79 +++++++++++++++++++++- dali/devel-api/adaptor-framework/web-engine.cpp | 44 +++++++++++- dali/devel-api/adaptor-framework/web-engine.h | 54 ++++++++++++++- .../internal/web-engine/common/web-engine-impl.cpp | 49 ++++++++++++-- dali/internal/web-engine/common/web-engine-impl.h | 40 +++++++++++ 5 files changed, 256 insertions(+), 10 deletions(-) diff --git a/dali/devel-api/adaptor-framework/web-engine-plugin.h b/dali/devel-api/adaptor-framework/web-engine-plugin.h index 88500cc..373b59d 100644 --- a/dali/devel-api/adaptor-framework/web-engine-plugin.h +++ b/dali/devel-api/adaptor-framework/web-engine-plugin.h @@ -60,6 +60,30 @@ public: using WebEngineScrollEdgeReachedSignalType = Signal; /** + * @brief WebView signal type related with page url changed. + */ + using WebEngineUrlChangedSignalType = Signal; + + /** + * @brief Alert callback when JavaScript alert is called with a message. + * It returns true if a pop-up is created successfully, false otherwise. + */ + using JavaScriptAlertCallback = std::function; + + /** + * @brief Confirm callback when JavaScript confirm is called with a message. + * It returns true if a pop-up is created successfully, false otherwise. + */ + using JavaScriptConfirmCallback = std::function; + + /** + * @brief Prompt callback when JavaScript prompt is called with a message + * and an optional value that is the default value for the input field. + * It returns true if a pop-up is created successfully, false otherwise. + */ + using JavaScriptPromptCallback = std::function; + + /** * @brief Enumeration for the scroll edge. */ enum class ScrollEdge @@ -251,9 +275,40 @@ public: virtual void AddJavaScriptMessageHandler(const std::string& exposedObjectName, std::function handler) = 0; /** - * @brief Clears all tiles resources of Web. + * @brief Register a callback for JavaScript alert. + * + * @param[in] callback The callback function */ - virtual void ClearAllTilesResources() = 0; + virtual void RegisterJavaScriptAlertCallback(JavaScriptAlertCallback callback) = 0; + + /** + * @brief Reply for JavaScript alert. + */ + virtual void JavaScriptAlertReply() = 0; + + /** + * @brief Register a callback for JavaScript confirm. + * + * @param[in] callback The callback function + */ + virtual void RegisterJavaScriptConfirmCallback(JavaScriptConfirmCallback callback) = 0; + + /** + * @brief Reply for JavaScript confirm. + */ + virtual void JavaScriptConfirmReply( bool confirmed ) = 0; + + /** + * @brief Register a callback for JavaScript prompt. + * + * @param[in] callback The callback function + */ + virtual void RegisterJavaScriptPromptCallback( JavaScriptPromptCallback callback ) = 0; + + /** + * @brief Reply for JavaScript prompt. + */ + virtual void JavaScriptPromptReply( const std::string& result ) = 0; /** * @brief Clears the history of Web. @@ -261,6 +316,11 @@ public: virtual void ClearHistory() = 0; /** + * @brief Clears all tiles resources of Web. + */ + virtual void ClearAllTilesResources() = 0; + + /** * @brief Get user agent string. * * @return The string value of user agent @@ -314,6 +374,13 @@ public: virtual WebEnginePageLoadSignalType& PageLoadStartedSignal() = 0; /** + * @brief Connects to this signal to be notified when page loading is in progress. + * + * @return A signal object to connect with. + */ + virtual WebEnginePageLoadSignalType& PageLoadInProgressSignal() = 0; + + /** * @brief Connects to this signal to be notified when page loading is finished. * * @return A signal object to connect with. @@ -333,6 +400,14 @@ public: * @return A signal object to connect with. */ virtual WebEngineScrollEdgeReachedSignalType& ScrollEdgeReachedSignal() = 0; + + /** + * @brief Connects to this signal to be notified when url is changed. + * + * @return A signal object to connect with. + */ + virtual WebEngineUrlChangedSignalType& UrlChangedSignal() = 0; + }; } // namespace Dali diff --git a/dali/devel-api/adaptor-framework/web-engine.cpp b/dali/devel-api/adaptor-framework/web-engine.cpp index e7701bd..2569cf6 100644 --- a/dali/devel-api/adaptor-framework/web-engine.cpp +++ b/dali/devel-api/adaptor-framework/web-engine.cpp @@ -209,9 +209,34 @@ void WebEngine::AddJavaScriptMessageHandler(const std::string& exposedObjectName GetImplementation(*this).AddJavaScriptMessageHandler(exposedObjectName, handler); } -void WebEngine::ClearAllTilesResources() +void WebEngine::RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback ) +{ + GetImplementation( *this ).RegisterJavaScriptAlertCallback( callback ); +} + +void WebEngine::JavaScriptAlertReply() +{ + GetImplementation( *this ).JavaScriptAlertReply(); +} + +void WebEngine::RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback ) +{ + GetImplementation( *this ).RegisterJavaScriptConfirmCallback( callback ); +} + +void WebEngine::JavaScriptConfirmReply( bool confirmed ) +{ + GetImplementation( *this ).JavaScriptConfirmReply( confirmed ); +} + +void WebEngine::RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback ) { - GetImplementation(*this).ClearAllTilesResources(); + GetImplementation( *this ).RegisterJavaScriptPromptCallback( callback ); +} + +void WebEngine::JavaScriptPromptReply( const std::string& result ) +{ + GetImplementation( *this ).JavaScriptPromptReply( result ); } void WebEngine::ClearHistory() @@ -219,6 +244,11 @@ void WebEngine::ClearHistory() return GetImplementation(*this).ClearHistory(); } +void WebEngine::ClearAllTilesResources() +{ + GetImplementation( *this ).ClearAllTilesResources(); +} + const std::string& WebEngine::GetUserAgent() const { return GetImplementation(*this).GetUserAgent(); @@ -264,6 +294,11 @@ Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadStartedSi return GetImplementation(*this).PageLoadStartedSignal(); } +Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadInProgressSignal() +{ + return GetImplementation(*this).PageLoadInProgressSignal(); +} + Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadFinishedSignal() { return GetImplementation(*this).PageLoadFinishedSignal(); @@ -279,4 +314,9 @@ Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& WebEngine::ScrollEd return GetImplementation(*this).ScrollEdgeReachedSignal(); } +Dali::WebEnginePlugin::WebEngineUrlChangedSignalType& WebEngine::UrlChangedSignal() +{ + return GetImplementation(*this).UrlChangedSignal(); +} + } // namespace Dali diff --git a/dali/devel-api/adaptor-framework/web-engine.h b/dali/devel-api/adaptor-framework/web-engine.h index 0a909b4..2d2d142 100644 --- a/dali/devel-api/adaptor-framework/web-engine.h +++ b/dali/devel-api/adaptor-framework/web-engine.h @@ -255,9 +255,40 @@ public: void AddJavaScriptMessageHandler(const std::string& exposedObjectName, std::function handler); /** - * @brief Clears all tiles resources of Web. + * @brief Register a callback for JavaScript alert. + * + * @param[in] callback The callback function */ - void ClearAllTilesResources(); + void RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback); + + /** + * @brief Reply for JavaScript alert. + */ + void JavaScriptAlertReply(); + + /** + * @brief Register a callback for JavaScript confirm. + * + * @param[in] callback The callback function + */ + void RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback); + + /** + * @brief Reply for JavaScript confirm. + */ + void JavaScriptConfirmReply( bool confirmed ); + + /** + * @brief Register a callback for JavaScript prompt. + * + * @param[in] callback The callback function + */ + void RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback ); + + /** + * @brief Reply for JavaScript prompt. + */ + void JavaScriptPromptReply( const std::string& result ); /** * @brief Clears the history of Web. @@ -265,6 +296,11 @@ public: void ClearHistory(); /** + * @brief Clears all tiles resources of Web. + */ + void ClearAllTilesResources(); + + /** * @brief Get user agent string. * * @return The string value of user agent @@ -319,6 +355,13 @@ public: Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadStartedSignal(); /** + * @brief Connects to this signal to be notified when page loading is in progress. + * + * @return A signal object to connect with. + */ + Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadInProgressSignal(); + + /** * @brief Connects to this signal to be notified when page loading is finished. * * @return A signal object to connect with. @@ -339,6 +382,13 @@ public: */ Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& ScrollEdgeReachedSignal(); + /** + * @brief Connects to this signal to be notified when url is changed. + * + * @return A signal object to connect with. + */ + Dali::WebEnginePlugin::WebEngineUrlChangedSignalType& UrlChangedSignal(); + private: // Not intended for application developers /** * @brief Internal constructor diff --git a/dali/internal/web-engine/common/web-engine-impl.cpp b/dali/internal/web-engine/common/web-engine-impl.cpp index 1bb7af9..e4f54ba 100644 --- a/dali/internal/web-engine/common/web-engine-impl.cpp +++ b/dali/internal/web-engine/common/web-engine-impl.cpp @@ -204,7 +204,7 @@ Dali::WebEngineBackForwardList& WebEngine::GetBackForwardList() const return mPlugin->GetBackForwardList(); } -void WebEngine::LoadUrl(const std::string& url) +void WebEngine::LoadUrl( const std::string& url ) { mPlugin->LoadUrl(url); } @@ -284,6 +284,36 @@ Dali::Vector2 WebEngine::GetContentSize() const return mPlugin->GetContentSize(); } +void WebEngine::RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback ) +{ + mPlugin->RegisterJavaScriptAlertCallback( callback ); +} + +void WebEngine::JavaScriptAlertReply() +{ + mPlugin->JavaScriptAlertReply(); +} + +void WebEngine::RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback ) +{ + mPlugin->RegisterJavaScriptAlertCallback( callback ); +} + +void WebEngine::JavaScriptConfirmReply( bool confirmed ) +{ + mPlugin->JavaScriptConfirmReply( confirmed ); +} + +void WebEngine::RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback ) +{ + mPlugin->RegisterJavaScriptPromptCallback( callback ); +} + +void WebEngine::JavaScriptPromptReply( const std::string& result ) +{ + mPlugin->JavaScriptPromptReply( result ); +} + bool WebEngine::CanGoForward() { return mPlugin->CanGoForward(); @@ -359,6 +389,11 @@ Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadStartedSi return mPlugin->PageLoadStartedSignal(); } +Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadInProgressSignal() +{ + return mPlugin->PageLoadInProgressSignal(); +} + Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadFinishedSignal() { return mPlugin->PageLoadFinishedSignal(); @@ -374,6 +409,12 @@ Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& WebEngine::ScrollEd return mPlugin->ScrollEdgeReachedSignal(); } -} // namespace Adaptor -} // namespace Internal -} // namespace Dali +Dali::WebEnginePlugin::WebEngineUrlChangedSignalType& WebEngine::UrlChangedSignal() +{ + return mPlugin->UrlChangedSignal(); +} + +} // namespace Adaptor; +} // namespace Internal; +} // namespace Dali; + diff --git a/dali/internal/web-engine/common/web-engine-impl.h b/dali/internal/web-engine/common/web-engine-impl.h index 069339f..057b831 100644 --- a/dali/internal/web-engine/common/web-engine-impl.h +++ b/dali/internal/web-engine/common/web-engine-impl.h @@ -175,6 +175,36 @@ public: Dali::Vector2 GetContentSize() const; /** + * @copydoc Dali::WebEngine::RegisterJavaScriptAlertCallback() + */ + void RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback ); + + /** + * @copydoc Dali::WebEngine::JavaScriptAlertReply() + */ + void JavaScriptAlertReply(); + + /** + * @copydoc Dali::WebEngine::RegisterJavaScriptConfirmCallback() + */ + void RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback ); + + /** + * @copydoc Dali::WebEngine::JavaScriptConfirmReply() + */ + void JavaScriptConfirmReply( bool confirmed ); + + /** + * @copydoc Dali::WebEngine::RegisterJavaScriptPromptCallback() + */ + void RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback ); + + /** + * @copydoc Dali::WebEngine::JavaScriptPromptReply() + */ + void JavaScriptPromptReply( const std::string& result ); + + /** * @copydoc Dali::WebEngine::CanGoForward() */ bool CanGoForward(); @@ -250,6 +280,11 @@ public: Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadStartedSignal(); /** + * @copydoc Dali::WebEngine::PageLoadProgressSignal() + */ + Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadInProgressSignal(); + + /** * @copydoc Dali::WebEngine::PageLoadFinishedSignal() */ Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadFinishedSignal(); @@ -264,6 +299,11 @@ public: */ Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& ScrollEdgeReachedSignal(); + /** + * @copydoc Dali::WebEngine::UrlChangedSignal() + */ + Dali::WebEnginePlugin::WebEngineUrlChangedSignalType& UrlChangedSignal(); + private: /** * @brief Constructor. -- 2.7.4