X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Fdali-toolkit-test-utils%2Ftoolkit-web-engine.cpp;h=863a3b01c2c25f3d606a3f0ce79af105c483bef2;hb=ebc31d0e211cb33fe359071bcab608dbdc400080;hp=e5077fe9ca6d7d433103b2517d8113ab9e28eaf1;hpb=d30d320c158f38d9c1ff49e01627467d3950698d;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git 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 e5077fe..863a3b0 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,9 +23,10 @@ #include #include #include +#include +#include #include #include -#include #include namespace Dali @@ -41,27 +42,34 @@ class WebEngine; namespace { -static WebEngine* gInstance = NULL; + +// Generally only one WebEngine instance exists. +// If > 1, a new web engine has been created by CreateWindowSignal. +static WebEngine* gInstance = 0; static int gInstanceCount = 0; bool OnGoBack(); bool OnGoForward(); bool OnLoadUrl(); bool OnEvaluteJavaScript(); +bool OnJavaScriptAlert(); +bool OnJavaScriptConfirm(); +bool OnJavaScriptPrompt(); +bool OnScrollEdge(); bool OnClearHistory(); -static void ConnectToGlobalSignal( bool (*func)() ) +static void ConnectToGlobalSignal( bool ( *func )() ) { Dali::Timer timer = Dali::Timer::New( 0 ); timer.TickSignal().Connect( func ); } -static void DisconnectFromGlobalSignal( bool (*func)() ) +static void DisconnectFromGlobalSignal( bool ( *func )() ) { Dali::Timer timer = Dali::Timer::New( 0 ); timer.TickSignal().Disconnect( func ); } -} +} // namespace anonymous class MockWebEngineContext : public Dali::WebEngineContext { @@ -289,6 +297,11 @@ class WebEngine: public Dali::BaseObject { public: + using JavaScriptEvaluatedResultCallback = std::function; + using JavaScriptAlertCallback = std::function; + using JavaScriptConfirmCallback = std::function; + using JavaScriptPromptCallback = std::function; + WebEngine() : mUrl() , mCurrentPlusOnePos( 0 ) @@ -299,7 +312,10 @@ public: , mContentSize( 500, 500 ) { gInstanceCount++; - gInstance = this; + if ( gInstanceCount == 1 ) // only first web engine need be saved. + { + gInstance = this; + } mockWebEngineSettings = new MockWebEngineSettings(); mockWebEngineContext = new MockWebEngineContext(); @@ -312,7 +328,7 @@ public: gInstanceCount--; if( !gInstanceCount ) { - gInstance = NULL; + gInstance = 0; } delete mockWebEngineSettings; @@ -352,6 +368,37 @@ public: return mUrl; } + std::string GetTitle() const + { + return std::string("title"); + } + + Dali::PixelData GetFavicon() const + { + uint8_t* faviconData = new uint8_t[ 16 ]; + + faviconData[ 0 ] = 0xff; + faviconData[ 1 ] = 0x00; + faviconData[ 2 ] = 0x00; + faviconData[ 3 ] = 0xff; + faviconData[ 4 ] = 0xff; + faviconData[ 5 ] = 0x00; + faviconData[ 6 ] = 0x00; + faviconData[ 7 ] = 0xff; + faviconData[ 8 ] = 0xff; + faviconData[ 9 ] = 0x00; + faviconData[ 10 ] = 0x00; + faviconData[ 11 ] = 0xff; + faviconData[ 12 ] = 0xff; + faviconData[ 13 ] = 0x00; + faviconData[ 14 ] = 0x00; + faviconData[ 15 ] = 0xff; + + return Dali::PixelData::New( faviconData, 16, 2, 2, + Dali::Pixel::Format::RGBA8888, + Dali::PixelData::ReleaseFunction::DELETE_ARRAY ); + } + bool CanGoForward() const { return mHistory.size() > mCurrentPlusOnePos; @@ -384,6 +431,33 @@ public: } } + void RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback ) + { + if ( callback ) + { + ConnectToGlobalSignal( &OnJavaScriptAlert ); + mJavaScriptAlertCallback = callback; + } + } + + void RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback ) + { + if ( callback ) + { + ConnectToGlobalSignal( &OnJavaScriptConfirm ); + mJavaScriptConfirmCallback = callback; + } + } + + void RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback ) + { + if ( callback ) + { + ConnectToGlobalSignal( &OnJavaScriptPrompt ); + mJavaScriptPromptCallback = callback; + } + } + void ClearHistory() { ConnectToGlobalSignal( &OnClearHistory ); @@ -404,7 +478,7 @@ public: mScrollPosition += Dali::Vector2( dx, dy ); if ( mScrollPosition.y + mScrollSize.height > mContentSize.height ) { - gInstance->mScrollEdgeReachedSignal.Emit( Dali::WebEnginePlugin::ScrollEdge::BOTTOM ); + ConnectToGlobalSignal( &OnScrollEdge ); } } @@ -414,22 +488,19 @@ public: mScrollPosition.y = y; } - void GetScrollPosition( int& x, int& y ) const + Dali::Vector2 GetScrollPosition() const { - x = mScrollPosition.x; - y = mScrollPosition.y; + return mScrollPosition; } - void GetScrollSize( int& w, int& h ) const + Dali::Vector2 GetScrollSize() const { - w = mScrollSize.width; - h = mScrollSize.height; + return mScrollSize; } - void GetContentSize( int& w, int& h ) const + Dali::Vector2 GetContentSize() const { - w = mContentSize.width; - h = mContentSize.height; + return mContentSize; } Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadStartedSignal() @@ -437,6 +508,11 @@ public: return mPageLoadStartedSignal; } + Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadInProgressSignal() + { + return mPageLoadInProgressSignal; + } + Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadFinishedSignal() { return mPageLoadFinishedSignal; @@ -452,14 +528,20 @@ public: return mScrollEdgeReachedSignal; } + Dali::WebEnginePlugin::WebEngineUrlChangedSignalType& UrlChangedSignal() + { + return mUrlChangedSignal; + } + std::string mUrl; std::vector< std::string > mHistory; size_t mCurrentPlusOnePos; std::string mUserAgent; Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadStartedSignal; + Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadInProgressSignal; Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadFinishedSignal; Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType mPageLoadErrorSignal; - std::vector< std::function< void( const std::string& ) > > mResultCallbacks; + std::vector mResultCallbacks; bool mEvaluating; Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType mScrollEdgeReachedSignal; @@ -470,21 +552,13 @@ public: WebEngineContext* mockWebEngineContext; WebEngineCookieManager* mockWebEngineCookieManager; WebEngineSettings* mockWebEngineSettings; -}; + Dali::WebEnginePlugin::WebEngineUrlChangedSignalType mUrlChangedSignal; -inline WebEngine& GetImplementation( Dali::WebEngine& webEngine ) -{ - DALI_ASSERT_ALWAYS( webEngine && "WebEngine handle is empty." ); - BaseObject& handle = webEngine.GetBaseObject(); - return static_cast< Internal::Adaptor::WebEngine& >( handle ); -} + JavaScriptAlertCallback mJavaScriptAlertCallback; + JavaScriptConfirmCallback mJavaScriptConfirmCallback; + JavaScriptPromptCallback mJavaScriptPromptCallback; +}; -inline const WebEngine& GetImplementation( const Dali::WebEngine& webEngine ) -{ - DALI_ASSERT_ALWAYS( webEngine && "WebEngine handle is empty." ); - const BaseObject& handle = webEngine.GetBaseObject(); - return static_cast< const Internal::Adaptor::WebEngine& >( handle ); -} namespace { @@ -524,8 +598,22 @@ bool OnLoadUrl() gInstance->mHistory.push_back( gInstance->mUrl ); gInstance->mCurrentPlusOnePos++; gInstance->mPageLoadStartedSignal.Emit( gInstance->mUrl ); + gInstance->mPageLoadInProgressSignal.Emit( gInstance->mUrl ); gInstance->mPageLoadFinishedSignal.Emit( gInstance->mUrl ); + gInstance->mUrlChangedSignal.Emit( "http://new-test" ); + } + return false; +} + +bool OnScrollEdge() +{ + DisconnectFromGlobalSignal( &OnScrollEdge ); + + if( gInstance ) + { + gInstance->mScrollEdgeReachedSignal.Emit( Dali::WebEnginePlugin::ScrollEdge::BOTTOM ); } + return false; } @@ -544,11 +632,42 @@ bool OnEvaluteJavaScript() return false; } +bool OnJavaScriptAlert() +{ + DisconnectFromGlobalSignal( &OnJavaScriptAlert ); + if ( gInstance ) + { + gInstance->mJavaScriptAlertCallback( "this is an alert popup." ); + } + return false; +} + +bool OnJavaScriptConfirm() +{ + DisconnectFromGlobalSignal( &OnJavaScriptConfirm ); + if ( gInstance ) + { + gInstance->mJavaScriptConfirmCallback( "this is a confirm popup." ); + } + return false; +} + +bool OnJavaScriptPrompt() +{ + DisconnectFromGlobalSignal( &OnJavaScriptPrompt ); + if ( gInstance ) + { + gInstance->mJavaScriptPromptCallback( "this is a prompt pompt.", "" ); + } + return false; +} + bool OnClearHistory() { DisconnectFromGlobalSignal( &OnClearHistory ); - if( gInstance && gInstance->mCurrentPlusOnePos ) { + if( gInstance && gInstance->mCurrentPlusOnePos ) + { std::string url = gInstance->mHistory[ gInstance->mCurrentPlusOnePos - 1 ]; std::vector< std::string >().swap( gInstance->mHistory ); gInstance->mHistory.push_back( url ); @@ -556,13 +675,27 @@ bool OnClearHistory() } return false; } + } // namespace +inline WebEngine& GetImplementation( Dali::WebEngine& webEngine ) +{ + DALI_ASSERT_ALWAYS( webEngine && "WebEngine handle is empty." ); + BaseObject& handle = webEngine.GetBaseObject(); + return static_cast< Internal::Adaptor::WebEngine& >( handle ); +} + +inline const WebEngine& GetImplementation( const Dali::WebEngine& webEngine ) +{ + DALI_ASSERT_ALWAYS( webEngine && "WebEngine handle is empty." ); + const BaseObject& handle = webEngine.GetBaseObject(); + return static_cast< const Internal::Adaptor::WebEngine& >( handle ); +} + } // namespace Adaptor } // namespace Internal - // Dali::WebEngine Implementation WebEngine::WebEngine() { @@ -604,6 +737,10 @@ void WebEngine::Create( int width, int height, const std::string& locale, const { } +void WebEngine::Create( int width, int height, int argc, char** argv ) +{ +} + void WebEngine::Destroy() { } @@ -633,6 +770,16 @@ void WebEngine::LoadUrl( const std::string& url ) return Internal::Adaptor::GetImplementation( *this ).LoadUrl( url ); } +std::string WebEngine::GetTitle() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetTitle(); +} + +Dali::PixelData WebEngine::GetFavicon() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetFavicon(); +} + const std::string& WebEngine::GetUrl() { return Internal::Adaptor::GetImplementation( *this ).GetUrl(); @@ -694,6 +841,37 @@ void WebEngine::AddJavaScriptMessageHandler( const std::string& exposedObjectNam { } +void WebEngine::RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback ) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptAlertCallback( callback ); +} + +void WebEngine::JavaScriptAlertReply() +{ +} + +void WebEngine::RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback ) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptConfirmCallback( callback ); +} + +void WebEngine::JavaScriptConfirmReply( bool confirmed ) +{ +} + +void WebEngine::RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback ) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptPromptCallback( callback ); +} + +void WebEngine::JavaScriptPromptReply( const std::string& result ) +{ +} + +void WebEngine::ClearAllTilesResources() +{ +} + void WebEngine::ClearHistory() { Internal::Adaptor::GetImplementation( *this ).ClearHistory(); @@ -719,19 +897,19 @@ void WebEngine::SetScrollPosition( int x, int y ) Internal::Adaptor::GetImplementation( *this ).SetScrollPosition( x, y ); } -void WebEngine::GetScrollPosition( int& x, int& y ) const +Dali::Vector2 WebEngine::GetScrollPosition() const { - Internal::Adaptor::GetImplementation( *this ).GetScrollPosition( x, y ); + return Internal::Adaptor::GetImplementation( *this ).GetScrollPosition(); } -void WebEngine::GetScrollSize( int& w, int& h ) const +Dali::Vector2 WebEngine::GetScrollSize() const { - Internal::Adaptor::GetImplementation( *this ).GetScrollSize( w, h ); + return Internal::Adaptor::GetImplementation( *this ).GetScrollSize(); } -void WebEngine::GetContentSize( int& w, int& h ) const +Dali::Vector2 WebEngine::GetContentSize() const { - Internal::Adaptor::GetImplementation( *this ).GetContentSize( w, h ); + return Internal::Adaptor::GetImplementation( *this ).GetContentSize(); } void WebEngine::SetSize( int width, int height ) @@ -752,11 +930,24 @@ void WebEngine::SetFocus( bool focused ) { } +void WebEngine::UpdateDisplayArea( Dali::Rect< int > displayArea ) +{ +} + +void WebEngine::EnableVideoHole( bool enabled ) +{ +} + Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadStartedSignal() { return Internal::Adaptor::GetImplementation( *this ).PageLoadStartedSignal(); } +Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadInProgressSignal() +{ + return Internal::Adaptor::GetImplementation( *this ).PageLoadInProgressSignal(); +} + Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadFinishedSignal() { return Internal::Adaptor::GetImplementation( *this ).PageLoadFinishedSignal(); @@ -772,5 +963,10 @@ Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& WebEngine::ScrollEd return Internal::Adaptor::GetImplementation( *this ).ScrollEdgeReachedSignal(); } +Dali::WebEnginePlugin::WebEngineUrlChangedSignalType& WebEngine::UrlChangedSignal() +{ + return Internal::Adaptor::GetImplementation( *this ).UrlChangedSignal(); +} + } // namespace Dali;