From: huayong.xu Date: Thu, 8 Sep 2022 11:54:29 +0000 (+0800) Subject: Implement navigation decision policy. X-Git-Tag: accepted/tizen/6.0/unified/20220915.050659^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;ds=sidebyside;h=6d4b665e141e9b771783cfb80df080358bd1f1b9;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Implement navigation decision policy. Change-Id: Ia61451357540b6a8ccd150a3bfc3d51a007a3e94 --- diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-web-engine.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-web-engine.cpp index 5f5160d..ac2d7d1 100755 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-web-engine.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-web-engine.cpp @@ -22,6 +22,8 @@ #include #include #include +#include +#include #include #include #include @@ -209,6 +211,85 @@ private: WebEngineBackForwardListItem* pMockItem; }; +class MockWebEngineFrame : public Dali::WebEngineFrame +{ +public: + MockWebEngineFrame() + { + } + + bool IsMainFrame() const override + { + return true; + } +}; + +class MockWebEnginePolicyDecision : public Dali::WebEnginePolicyDecision +{ +public: + MockWebEnginePolicyDecision() + { + } + + std::string GetUrl() const override + { + return "http://test.html"; + } + + std::string GetCookie() const override + { + return "test:abc"; + } + + Dali::WebEnginePolicyDecision::DecisionType GetDecisionType() const + { + return Dali::WebEnginePolicyDecision::DecisionType::USE; + } + + std::string GetResponseMime() const + { + return "txt/xml"; + } + + int32_t GetResponseStatusCode() const + { + return 500; + } + + Dali::WebEnginePolicyDecision::NavigationType GetNavigationType() const + { + return Dali::WebEnginePolicyDecision::NavigationType::LINK_CLICKED; + } + + Dali::WebEngineFrame& GetFrame() const + { + return *(Dali::WebEngineFrame*)(&mockWebFrame); + } + + std::string GetScheme() const + { + return "test"; + } + + bool Use() + { + return true; + } + + bool Ignore() + { + return true; + } + + bool Suspend() + { + return true; + } + +private: + MockWebEngineFrame mockWebFrame; +}; + class MockWebEngineSettings : public WebEngineSettings { public: @@ -405,7 +486,7 @@ public: ConnectToGlobalSignal( &OnGoBack ); } - void EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler ) + void EvaluateJavaScript( const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler ) { if( resultHandler ) { @@ -437,7 +518,7 @@ public: mScrollPosition += Dali::Vector2( dx, dy ); if ( mScrollPosition.y + mScrollSize.height > mContentSize.height ) { - gInstance->mScrollEdgeReachedSignal.Emit( Dali::WebEnginePlugin::ScrollEdge::BOTTOM ); + gInstance->mScrollEdgeReachedCallback( Dali::WebEnginePlugin::ScrollEdge::BOTTOM ); } } @@ -465,24 +546,29 @@ public: h = mContentSize.height; } - Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadStartedSignal() + void RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) { - return mPageLoadStartedSignal; + mPageLoadStartedCallback = callback; } - Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadFinishedSignal() + void RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) { - return mPageLoadFinishedSignal; + mPageLoadFinishedCallback = callback; } - Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& PageLoadErrorSignal() + void RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback) { - return mPageLoadErrorSignal; + mPageLoadErrorCallback = callback; } - Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& ScrollEdgeReachedSignal() + void RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback) { - return mScrollEdgeReachedSignal; + mScrollEdgeReachedCallback = callback; + } + + void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback) + { + mNavigationPolicyDecisionCallback = callback; } void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback) @@ -498,13 +584,16 @@ public: std::vector< std::string > mHistory; size_t mCurrentPlusOnePos; std::string mUserAgent; - Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadStartedSignal; - Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadFinishedSignal; - Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType mPageLoadErrorSignal; - std::vector< std::function< void( const std::string& ) > > mResultCallbacks; - bool mEvaluating; - Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType mScrollEdgeReachedSignal; + Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadStartedCallback; + Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadFinishedCallback; + Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback mPageLoadErrorCallback; + Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback mScrollEdgeReachedCallback; + Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback mNavigationPolicyDecisionCallback; + + std::vector mResultCallbacks; + bool mEvaluating; + Dali::Vector2 mScrollPosition; Dali::Vector2 mScrollSize; Dali::Vector2 mContentSize; @@ -566,8 +655,23 @@ bool OnLoadUrl() } gInstance->mHistory.push_back( gInstance->mUrl ); gInstance->mCurrentPlusOnePos++; - gInstance->mPageLoadStartedSignal.Emit( gInstance->mUrl ); - gInstance->mPageLoadFinishedSignal.Emit( gInstance->mUrl ); + if (gInstance->mPageLoadStartedCallback) + { + gInstance->mPageLoadStartedCallback( gInstance->mUrl ); + } + if (gInstance->mPageLoadFinishedCallback) + { + gInstance->mPageLoadFinishedCallback( gInstance->mUrl ); + } + if (gInstance->mPageLoadErrorCallback) + { + gInstance->mPageLoadErrorCallback(gInstance->mUrl, WebView::LoadErrorCode::UNKNOWN); + } + if (gInstance->mNavigationPolicyDecisionCallback) + { + std::unique_ptr policyDecision(new MockWebEnginePolicyDecision()); + gInstance->mNavigationPolicyDecisionCallback(std::move(policyDecision)); + } } return false; } @@ -754,12 +858,12 @@ void WebEngine::GoBack() Internal::Adaptor::GetImplementation( *this ).GoBack(); } -void WebEngine::EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler ) +void WebEngine::EvaluateJavaScript( const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler ) { Internal::Adaptor::GetImplementation( *this ).EvaluateJavaScript( script, resultHandler ); } -void WebEngine::AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void(const std::string&) > handler ) +void WebEngine::AddJavaScriptMessageHandler( const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler ) { } @@ -833,24 +937,29 @@ void WebEngine::EnableVideoHole( bool enabled ) { } -Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadStartedSignal() +void WebEngine::RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadStartedCallback(callback); +} + +void WebEngine::RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) { - return Internal::Adaptor::GetImplementation( *this ).PageLoadStartedSignal(); + Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadFinishedCallback(callback); } -Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadFinishedSignal() +void WebEngine::RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback) { - return Internal::Adaptor::GetImplementation( *this ).PageLoadFinishedSignal(); + Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadErrorCallback(callback); } -Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& WebEngine::PageLoadErrorSignal() +void WebEngine::RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback) { - return Internal::Adaptor::GetImplementation( *this ).PageLoadErrorSignal(); + Internal::Adaptor::GetImplementation( *this ).RegisterScrollEdgeReachedCallback(callback); } -Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& WebEngine::ScrollEdgeReachedSignal() +void WebEngine::RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback) { - return Internal::Adaptor::GetImplementation( *this ).ScrollEdgeReachedSignal(); + Internal::Adaptor::GetImplementation(*this).RegisterNavigationPolicyDecidedCallback(callback); } void WebEngine::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-WebView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-WebView.cpp index 72b50b3..c898b06 100755 --- a/automated-tests/src/dali-toolkit/utc-Dali-WebView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-WebView.cpp @@ -22,6 +22,8 @@ #include "dali-toolkit-test-utils/toolkit-timer.h" #include +#include +#include #include #include #include @@ -46,6 +48,7 @@ const char* const TEST_URL2( "http://www.somewhere.valid2.com" ); static int gPageLoadStartedCallbackCalled = 0; static int gPageLoadFinishedCallbackCalled = 0; static int gScrollEdgeReachedCallbackCalled = 0; +static int gNavigationPolicyDecidedCallbackCalled = 0; static int gEvaluateJavaScriptCallbackCalled = 0; static bool gTouched = false; static int gPlainTextReceivedCallbackCalled = 0; @@ -64,28 +67,33 @@ struct CallbackFunctor bool* mCallbackFlag; }; -static void OnPageLoadStarted( WebView view, const std::string& url ) +static void OnPageLoadStarted( const std::string& url ) { gPageLoadStartedCallbackCalled++; } -static void OnPageLoadFinished( WebView view, const std::string& url ) +static void OnPageLoadFinished( const std::string& url ) { gPageLoadFinishedCallbackCalled++; } -static void OnScrollEdgeReached( WebView view, Dali::WebEnginePlugin::ScrollEdge edge ) +static void OnScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge edge ) { gScrollEdgeReachedCallbackCalled++; } +static void OnNavigationPolicyDecided(std::unique_ptr decision) +{ + gNavigationPolicyDecidedCallbackCalled++; +} + static bool OnPlainTextReceived(const std::string& plainText) { gPlainTextReceivedCallbackCalled++; return true; } -static void OnPageLoadError( WebView view, const std::string& url, WebView::LoadErrorCode errorCode ) +static void OnPageLoadError( const std::string& url, WebView::LoadErrorCode errorCode ) { } @@ -172,19 +180,13 @@ int UtcDaliWebViewPageNavigation(void) application.Render(); DALI_TEST_CHECK( view ); - ConnectionTracker* testTracker = new ConnectionTracker(); - view.PageLoadStartedSignal().Connect( &OnPageLoadStarted ); - view.PageLoadFinishedSignal().Connect( &OnPageLoadFinished ); - view.PageLoadErrorSignal().Connect( &OnPageLoadError ); - bool signal1 = false; - bool signal2 = false; - bool signal3 = false; - view.ConnectSignal( testTracker, "pageLoadStarted", CallbackFunctor(&signal1) ); - view.ConnectSignal( testTracker, "pageLoadFinished", CallbackFunctor(&signal2) ); - view.ConnectSignal( testTracker, "invalidname", CallbackFunctor(&signal3) ); + view.RegisterPageLoadStartedCallback( &OnPageLoadStarted ); + view.RegisterPageLoadFinishedCallback( &OnPageLoadFinished ); + view.RegisterPageLoadErrorCallback( &OnPageLoadError ); + DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 0, TEST_LOCATION ); DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 0, TEST_LOCATION ); - + DALI_TEST_EQUALS( gPageLoadErrorCallbackCalled, 0, TEST_LOCATION ); view.LoadUrl( TEST_URL1 ); view.GetNaturalSize(); @@ -192,8 +194,7 @@ int UtcDaliWebViewPageNavigation(void) DALI_TEST_EQUALS( view.CanGoBack(), false, TEST_LOCATION ); DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 1, TEST_LOCATION ); DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 1, TEST_LOCATION ); - DALI_TEST_CHECK( signal1 & signal2 ); - DALI_TEST_CHECK( !signal3 ); + DALI_TEST_EQUALS( gPageLoadErrorCallbackCalled, 1, TEST_LOCATION ); view.LoadUrl( TEST_URL2 ); view.Suspend(); @@ -519,10 +520,7 @@ int UtcDaliWebViewScrollBy(void) DALI_TEST_CHECK( view ); // load url. - ConnectionTracker* testTracker = new ConnectionTracker(); - view.ScrollEdgeReachedSignal().Connect( &OnScrollEdgeReached ); - bool signal1 = false; - view.ConnectSignal( testTracker, "scrollEdgeReached", CallbackFunctor(&signal1) ); + view.RegisterScrollEdgeReachedCallback( &OnScrollEdgeReached ); DALI_TEST_EQUALS( gScrollEdgeReachedCallbackCalled, 0, TEST_LOCATION ); view.LoadUrl( TEST_URL1 ); @@ -540,7 +538,6 @@ int UtcDaliWebViewScrollBy(void) view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output ); DALI_TEST_CHECK( output.x == 150 && output.y == 150 ); DALI_TEST_EQUALS( gScrollEdgeReachedCallbackCalled, 1, TEST_LOCATION ); - DALI_TEST_CHECK( signal1 ); END_TEST; } @@ -801,6 +798,24 @@ int UtcDaliWebSettingsGetSetDefaultTextEncodingName(void) END_TEST; } +int UtcDaliWebViewNavigationPolicyDecisionRequest(void) +{ + ToolkitTestApplication application; + + WebView view = WebView::New(); + DALI_TEST_CHECK(view); + + // load url. + view.RegisterNavigationPolicyDecidedCallback(&OnNavigationPolicyDecided); + DALI_TEST_EQUALS(gNavigationPolicyDecidedCallbackCalled, 0, TEST_LOCATION); + + view.LoadUrl(TEST_URL1); + Test::EmitGlobalTimerSignal(); + DALI_TEST_EQUALS(gNavigationPolicyDecidedCallbackCalled, 1, TEST_LOCATION); + + END_TEST; +} + int UtcDaliWebViewGetPlainText(void) { ToolkitTestApplication application; diff --git a/dali-toolkit/devel-api/controls/web-view/web-view.cpp b/dali-toolkit/devel-api/controls/web-view/web-view.cpp old mode 100644 new mode 100755 index 3616de2..94b21fd --- a/dali-toolkit/devel-api/controls/web-view/web-view.cpp +++ b/dali-toolkit/devel-api/controls/web-view/web-view.cpp @@ -149,7 +149,7 @@ void WebView::GoBack() Dali::Toolkit::GetImpl(*this).GoBack(); } -void WebView::EvaluateJavaScript(const std::string& script, std::function resultHandler) +void WebView::EvaluateJavaScript(const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler) { Dali::Toolkit::GetImpl(*this).EvaluateJavaScript(script, resultHandler); } @@ -159,7 +159,7 @@ void WebView::EvaluateJavaScript(const std::string& script) Dali::Toolkit::GetImpl(*this).EvaluateJavaScript(script, nullptr); } -void WebView::AddJavaScriptMessageHandler(const std::string& exposedObjectName, std::function handler) +void WebView::AddJavaScriptMessageHandler(const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler) { Dali::Toolkit::GetImpl(*this).AddJavaScriptMessageHandler(exposedObjectName, handler); } @@ -179,24 +179,29 @@ void WebView::SetTtsFocus(bool focused) Dali::Toolkit::GetImpl(*this).SetTtsFocus(focused); } -WebView::WebViewPageLoadSignalType& WebView::PageLoadStartedSignal() +void WebView::RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) { - return Dali::Toolkit::GetImpl(*this).PageLoadStartedSignal(); + Dali::Toolkit::GetImpl(*this).RegisterPageLoadStartedCallback(callback); } -WebView::WebViewPageLoadSignalType& WebView::PageLoadFinishedSignal() +void WebView::RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) { - return Dali::Toolkit::GetImpl(*this).PageLoadFinishedSignal(); + Dali::Toolkit::GetImpl(*this).RegisterPageLoadFinishedCallback(callback); } -WebView::WebViewPageLoadErrorSignalType& WebView::PageLoadErrorSignal() +void WebView::RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback) { - return Dali::Toolkit::GetImpl(*this).PageLoadErrorSignal(); + Dali::Toolkit::GetImpl(*this).RegisterPageLoadErrorCallback(callback); } -WebView::WebViewScrollEdgeReachedSignalType& WebView::ScrollEdgeReachedSignal() +void WebView::RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback) { - return Dali::Toolkit::GetImpl( *this ).ScrollEdgeReachedSignal(); + Dali::Toolkit::GetImpl(*this).RegisterScrollEdgeReachedCallback(callback); +} + +void WebView::RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback) +{ + Dali::Toolkit::GetImpl(*this).RegisterNavigationPolicyDecidedCallback(callback); } void WebView::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback) diff --git a/dali-toolkit/devel-api/controls/web-view/web-view.h b/dali-toolkit/devel-api/controls/web-view/web-view.h old mode 100644 new mode 100755 index 577d0f2..7c54efc --- a/dali-toolkit/devel-api/controls/web-view/web-view.h +++ b/dali-toolkit/devel-api/controls/web-view/web-view.h @@ -143,21 +143,6 @@ public: INTERNAL_SERVER ///< Web server has an internal server error. }; - /** - * @brief WebView signal type related with page loading. - */ - typedef Signal WebViewPageLoadSignalType; - - /** - * @brief WebView signal type related with page loading error. - */ - typedef Signal WebViewPageLoadErrorSignalType; - - /** - * @brief WebView signal type related with scroll edge reached. - */ - typedef Signal WebViewScrollEdgeReachedSignalType; - public: /** * @brief Creates an initialized WebView. @@ -319,7 +304,7 @@ public: * @param[in] script The JavaScript code * @param[in] resultHandler The callback function to be called by the JavaScript runtime. This carries evaluation result. */ - void EvaluateJavaScript(const std::string& script, std::function resultHandler); + void EvaluateJavaScript(const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler); /** * @brief Evaluates JavaScript code represented as a string. @@ -352,7 +337,7 @@ public: * @param[in] exposedObjectName The name of exposed object * @param[in] handler The callback function */ - void AddJavaScriptMessageHandler(const std::string& exposedObjectName, std::function handler); + void AddJavaScriptMessageHandler(const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler); /** * @brief Clears all tiles resources of Web. @@ -372,32 +357,39 @@ public: void SetTtsFocus(bool focused); /** - * @brief Connects to this signal to be notified when page loading is started. + * @brief Callback to be called when page loading is started. + * + * @param[in] callback + */ + void RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback); + + /** + * @brief Callback to be called when page loading is finished. * - * @return A signal object to connect with + * @param[in] callback */ - WebViewPageLoadSignalType& PageLoadStartedSignal(); + void RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback); /** - * @brief Connects to this signal to be notified when page loading is finished. + * @brief Callback to be called when an error occurs in page loading. * - * @return A signal object to connect with + * @param[in] callback */ - WebViewPageLoadSignalType& PageLoadFinishedSignal(); + void RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback); /** - * @brief Connects to this signal to be notified when an error occurs in page loading. + * @brief Callback to be called when scroll edge is reached. * - * @return A signal object to connect with. + * @param[in] callback */ - WebViewPageLoadErrorSignalType& PageLoadErrorSignal(); + void RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback); /** - * @brief Connects to this signal to be notified when scroll edge is reached. + * @brief Callback to be called when navigation policy would be decided. * - * @return A signal object to connect with. + * @param[in] callback */ - WebViewScrollEdgeReachedSignalType& ScrollEdgeReachedSignal(); + void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback); /** * @brief Get a plain text of current web page asynchronously. diff --git a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp old mode 100644 new mode 100755 index d82463d..562c8d3 --- a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp +++ b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -69,11 +70,6 @@ DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "contentSize", VECTOR2 DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "title", STRING, TITLE ) DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "videoHoleEnabled", BOOLEAN, VIDEO_HOLE_ENABLED ) -DALI_SIGNAL_REGISTRATION( Toolkit, WebView, "pageLoadStarted", PAGE_LOAD_STARTED_SIGNAL ) -DALI_SIGNAL_REGISTRATION( Toolkit, WebView, "pageLoadFinished", PAGE_LOAD_FINISHED_SIGNAL ) -DALI_SIGNAL_REGISTRATION( Toolkit, WebView, "pageLoadError", PAGE_LOAD_ERROR_SIGNAL ) -DALI_SIGNAL_REGISTRATION( Toolkit, WebView, "scrollEdgeReached", SCROLL_EDGE_REACHED_SIGNAL ) - DALI_TYPE_REGISTRATION_END() const std::string kEmptyString; @@ -137,9 +133,6 @@ WebView::WebView( const std::string& locale, const std::string& timezoneId ) mVisual(), mWebViewSize( Stage::GetCurrent().GetSize() ), mWebEngine(), - mPageLoadStartedSignal(), - mPageLoadFinishedSignal(), - mPageLoadErrorSignal(), mVideoHoleEnabled( true ), mWebViewArea ( 0, 0, mWebViewSize.width, mWebViewSize.height ) { @@ -158,9 +151,6 @@ WebView::WebView( int argc, char** argv ) mVisual(), mWebViewSize( Stage::GetCurrent().GetSize() ), mWebEngine(), - mPageLoadStartedSignal(), - mPageLoadFinishedSignal(), - mPageLoadErrorSignal(), mVideoHoleEnabled( true ), mWebViewArea ( 0, 0, mWebViewSize.width, mWebViewSize.height ) { @@ -229,11 +219,6 @@ void WebView::OnInitialize() if( mWebEngine ) { - mWebEngine.PageLoadStartedSignal().Connect( this, &WebView::OnPageLoadStarted ); - mWebEngine.PageLoadFinishedSignal().Connect( this, &WebView::OnPageLoadFinished ); - mWebEngine.PageLoadErrorSignal().Connect( this, &WebView::OnPageLoadError ); - mWebEngine.ScrollEdgeReachedSignal().Connect( this, &WebView::OnScrollEdgeReached ); - mWebContext = std::unique_ptr( new WebContext( mWebEngine.GetContext() ) ); mWebCookieManager = std::unique_ptr( new WebCookieManager( mWebEngine.GetCookieManager() ) ); mWebSettings = std::unique_ptr( new WebSettings( mWebEngine.GetSettings() ) ); @@ -383,7 +368,7 @@ void WebView::GoBack() } } -void WebView::EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler ) +void WebView::EvaluateJavaScript( const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler ) { if( mWebEngine ) { @@ -391,7 +376,7 @@ void WebView::EvaluateJavaScript( const std::string& script, std::function< void } } -void WebView::AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void( const std::string& ) > handler ) +void WebView::AddJavaScriptMessageHandler( const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler ) { if( mWebEngine ) { @@ -476,99 +461,52 @@ void WebView::EnableBlendMode( bool blendEnabled ) } } -Dali::Toolkit::WebView::WebViewPageLoadSignalType& WebView::PageLoadStartedSignal() -{ - return mPageLoadStartedSignal; -} - -Dali::Toolkit::WebView::WebViewPageLoadSignalType& WebView::PageLoadFinishedSignal() -{ - return mPageLoadFinishedSignal; -} - -Dali::Toolkit::WebView::WebViewPageLoadErrorSignalType& WebView::PageLoadErrorSignal() +void WebView::RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) { - return mPageLoadErrorSignal; -} - -Dali::Toolkit::WebView::WebViewScrollEdgeReachedSignalType& WebView::ScrollEdgeReachedSignal() -{ - return mScrollEdgeReachedSignal; -} - -void WebView::OnPageLoadStarted( const std::string& url ) -{ - if( !mPageLoadStartedSignal.Empty() ) + if(mWebEngine) { - Dali::Toolkit::WebView handle( GetOwner() ); - mPageLoadStartedSignal.Emit( handle, url ); + mWebEngine.RegisterPageLoadStartedCallback(callback); } } -void WebView::OnPageLoadFinished( const std::string& url ) +void WebView::RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) { - if( !mPageLoadFinishedSignal.Empty() ) + if(mWebEngine) { - Dali::Toolkit::WebView handle( GetOwner() ); - mPageLoadFinishedSignal.Emit( handle, url ); + mWebEngine.RegisterPageLoadFinishedCallback(callback); } } -void WebView::OnPageLoadError( const std::string& url, int errorCode ) +void WebView::RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback) { - if( !mPageLoadErrorSignal.Empty() ) + if(mWebEngine) { - Dali::Toolkit::WebView handle( GetOwner() ); - mPageLoadErrorSignal.Emit( handle, url, static_cast< Toolkit::WebView::LoadErrorCode >( errorCode ) ); + mWebEngine.RegisterPageLoadErrorCallback(callback); } } -void WebView::OnScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge edge ) +void WebView::RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback) { - if( !mScrollEdgeReachedSignal.Empty() ) + if(mWebEngine) { - Dali::Toolkit::WebView handle( GetOwner() ); - mScrollEdgeReachedSignal.Emit( handle, edge ); + mWebEngine.RegisterScrollEdgeReachedCallback(callback); } } -void WebView::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback) +void WebView::RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback) { if(mWebEngine) { - mWebEngine.GetPlainTextAsynchronously(callback); + mWebEngine.RegisterNavigationPolicyDecidedCallback(callback); } } -bool WebView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ) +void WebView::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback) { - Dali::BaseHandle handle( object ); - - bool connected = false; - Toolkit::WebView webView = Toolkit::WebView::DownCast( handle ); - - if( 0 == strcmp( signalName.c_str(), PAGE_LOAD_STARTED_SIGNAL ) ) - { - webView.PageLoadStartedSignal().Connect( tracker, functor ); - connected = true; - } - else if( 0 == strcmp( signalName.c_str(), PAGE_LOAD_FINISHED_SIGNAL ) ) - { - webView.PageLoadFinishedSignal().Connect( tracker, functor ); - connected = true; - } - else if( 0 == strcmp( signalName.c_str(), PAGE_LOAD_ERROR_SIGNAL ) ) - { - webView.PageLoadErrorSignal().Connect( tracker, functor ); - connected = true; - } - else if( 0 == strcmp( signalName.c_str(), SCROLL_EDGE_REACHED_SIGNAL ) ) + if(mWebEngine) { - webView.ScrollEdgeReachedSignal().Connect( tracker, functor ); - connected = true; + mWebEngine.GetPlainTextAsynchronously(callback); } - - return connected; } Vector3 WebView::GetNaturalSize() diff --git a/dali-toolkit/internal/controls/web-view/web-view-impl.h b/dali-toolkit/internal/controls/web-view/web-view-impl.h old mode 100644 new mode 100755 index 9aab208..0205dd7 --- a/dali-toolkit/internal/controls/web-view/web-view-impl.h +++ b/dali-toolkit/internal/controls/web-view/web-view-impl.h @@ -161,12 +161,12 @@ public: /** * @copydoc Dali::Toolkit::WebView::EvaluateJavaScript() */ - void EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler ); + void EvaluateJavaScript( const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler ); /** * @copydoc Dali::Toolkit::WebView::AddJavaScriptMessageHandler() */ - void AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void( const std::string& ) > handler ); + void AddJavaScriptMessageHandler( const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler ); /** * @brief Clears all tiles resources of Web. @@ -184,24 +184,29 @@ public: void SetTtsFocus(bool focused); /** - * @copydoc Dali::Toolkit::WebView::PageLoadStartedSignal() + * @copydoc Dali::Toolkit::WebView::RegisterPageLoadStartedCallback() */ - Dali::Toolkit::WebView::WebViewPageLoadSignalType& PageLoadStartedSignal(); + void RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback); /** - * @copydoc Dali::Toolkit::WebView::PageLoadFinishedSignal() + * @copydoc Dali::Toolkit::WebView::RegisterPageLoadFinishedCallback() */ - Dali::Toolkit::WebView::WebViewPageLoadSignalType& PageLoadFinishedSignal(); + void RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback); /** - * @copydoc Dali::Toolkit::WebView::PageLoadErrorSignal() + * @copydoc Dali::Toolkit::WebView::RegisterPageLoadErrorCallback() */ - Dali::Toolkit::WebView::WebViewPageLoadErrorSignalType& PageLoadErrorSignal(); + void RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback); /** - * @copydoc Dali::Toolkit::WebView::ScrollEdgeReachedSignal() + * @copydoc Dali::Toolkit::WebView::RegisterScrollEdgeReachedCallback() */ - Dali::Toolkit::WebView::WebViewScrollEdgeReachedSignalType& ScrollEdgeReachedSignal(); + void RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterNavigationPolicyDecidedCallback() + */ + void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback); /** * @copydoc Dali::Toolkit::WebView::GetPlainTextAsynchronously() @@ -228,17 +233,6 @@ public: // Properties */ static Dali::Property::Value GetProperty( Dali::BaseObject* object, Dali::Property::Index propertyIndex ); - /** - * Connects a callback function with the object's signals. - * @param[in] object The object providing the signal. - * @param[in] tracker Used to disconnect the signal. - * @param[in] signalName The signal to connect to. - * @param[in] functor A newly allocated FunctorDelegate. - * @return True if the signal was connected. - * @post If a signal was connected, ownership of functor was passed to CallbackBase. Otherwise the c - */ - static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ); - private: // From Control /** @@ -351,53 +345,23 @@ private: */ void EnableBlendMode( bool blendEnabled ); - /** - * @brief Callback function to be called when page load started. - * @param[in] url The url currently being loaded - */ - void OnPageLoadStarted( const std::string& url ); - - /** - * @brief Callback function to be called when page load finished. - * @param[in] url The url currently being loaded - */ - void OnPageLoadFinished( const std::string& url ); - - /** - * @brief Callback function to be called when there is an error in page loading. - * @param[in] url The url currently being loaded - * @param[in] errorCode The error code - */ - void OnPageLoadError( const std::string& url, int errorCode ); - - /** - * @brief Callback function to be called when scroll edge is reached. - * @param[in] e The scroll edge reached. - */ - void OnScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge edge ); - private: - std::string mUrl; - Dali::Toolkit::Visual::Base mVisual; - Dali::Size mWebViewSize; - Dali::WebEngine mWebEngine; - - Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadStartedSignal; - Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadFinishedSignal; - Dali::Toolkit::WebView::WebViewPageLoadErrorSignalType mPageLoadErrorSignal; - Dali::Toolkit::WebView::WebViewScrollEdgeReachedSignalType mScrollEdgeReachedSignal; - - std::unique_ptr mWebContext; - std::unique_ptr mWebCookieManager; - std::unique_ptr mWebSettings; - std::unique_ptr mWebBackForwardList; - - Dali::PropertyNotification mPositionUpdateNotification; - Dali::PropertyNotification mSizeUpdateNotification; - Dali::PropertyNotification mScaleUpdateNotification; - bool mVideoHoleEnabled; - Dali::Rect< int > mWebViewArea; + std::string mUrl; + Dali::Toolkit::Visual::Base mVisual; + Dali::Size mWebViewSize; + Dali::WebEngine mWebEngine; + + std::unique_ptr mWebContext; + std::unique_ptr mWebCookieManager; + std::unique_ptr mWebSettings; + std::unique_ptr mWebBackForwardList; + + Dali::PropertyNotification mPositionUpdateNotification; + Dali::PropertyNotification mSizeUpdateNotification; + Dali::PropertyNotification mScaleUpdateNotification; + bool mVideoHoleEnabled; + Dali::Rect< int > mWebViewArea; }; } // namespace Internal