X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Fdali-toolkit-test-utils%2Ftoolkit-web-engine.cpp;h=f400f7530587e5b22bf019b8227595b62b2d525d;hp=9d7a582863bb11fd3d6ad8a9c0fda7a2d37427c9;hb=03d087167ceac9acf09a9cb7eb86bc06c0a5d4e7;hpb=542e587d36cb500e0c3b36635cf22b81b6608697 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 9d7a582..f400f75 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. @@ -18,9 +18,21 @@ #include "toolkit-timer.h" #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include +#include +#include #include namespace Dali @@ -36,49 +48,544 @@ 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 OnScreenshotCaptured(); +bool OnVideoPlaying(); +bool OnGeolocationPermission(); 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 +{ +public: + MockWebEngineContext() + : mockModel( Dali::WebEngineContext::CacheModel::DOCUMENT_VIEWER ) + { + } + + Dali::WebEngineContext::CacheModel GetCacheModel() const override + { + return mockModel; + } + + void SetCacheModel( Dali::WebEngineContext::CacheModel cacheModel ) override + { + mockModel = cacheModel; + } + + void SetProxyUri( const std::string& uri ) override + { + } + + void SetDefaultProxyAuth( const std::string& username, const std::string& password ) override + { + } + + void SetCertificateFilePath( const std::string& certificatePath ) override + { + } + + void DeleteWebDatabase() override + { + } + + void DeleteWebStorage() override + { + } + + void DeleteLocalFileSystem() override + { + } + + void DisableCache( bool cacheDisabled ) override + { + } + + void ClearCache() override + { + } + +private: + Dali::WebEngineContext::CacheModel mockModel; +}; + +class MockWebEngineCookieManager : public Dali::WebEngineCookieManager +{ +public: + MockWebEngineCookieManager() + : mockCookieAcceptPolicy( Dali::WebEngineCookieManager::CookieAcceptPolicy::NO_THIRD_PARTY ) + { + } + + void SetCookieAcceptPolicy( Dali::WebEngineCookieManager::CookieAcceptPolicy policy ) override + { + mockCookieAcceptPolicy = policy; + } + + Dali::WebEngineCookieManager::CookieAcceptPolicy GetCookieAcceptPolicy() const override + { + return mockCookieAcceptPolicy; + } + + void ClearCookies() override + { + } + + void SetPersistentStorage( const std::string& path, Dali::WebEngineCookieManager::CookiePersistentStorage storage ) override + { + } + +private: + Dali::WebEngineCookieManager::CookieAcceptPolicy mockCookieAcceptPolicy; +}; + +class MockWebEngineBackForwardListItem : public Dali::WebEngineBackForwardListItem +{ +public: + MockWebEngineBackForwardListItem() + : mockUrl( "http://url" ), + mockTitle( "title" ), + mockOriginalUrl( "http://originalurl" ) + { + } + + std::string GetUrl() const override + { + return mockUrl; + } + + std::string GetTitle() const override + { + return mockTitle; + } + + std::string GetOriginalUrl() const override + { + return mockOriginalUrl; + } + +private: + std::string mockUrl; + std::string mockTitle; + std::string mockOriginalUrl; +}; + +class MockWebEngineBackForwardList : public Dali::WebEngineBackForwardList +{ +public: + MockWebEngineBackForwardList() + : mockItem(), + pMockItem( &mockItem ) + { + } + + Dali::WebEngineBackForwardListItem& GetCurrentItem() const override + { + return *pMockItem; + } + + Dali::WebEngineBackForwardListItem& GetItemAtIndex( uint32_t index ) const override + { + return *pMockItem; + } + + uint32_t GetItemCount() const override + { + return 1; + } + +private: + MockWebEngineBackForwardListItem mockItem; + WebEngineBackForwardListItem* pMockItem; +}; + +class MockWebEngineFormRepostDecision : public WebEngineFormRepostDecision +{ +public: + MockWebEngineFormRepostDecision() + { + } + + void Reply(bool allowed) override {} +}; + +class MockWebEngineRequestInterceptor : public WebEngineRequestInterceptor +{ +public: + MockWebEngineRequestInterceptor() + { + } + + std::string GetUrl() const override + { + return "http://test.html"; + } + + bool Ignore() override + { + return true; + } + + bool SetResponseStatus(int statusCode, const std::string &customedStatusText) override + { + return true; + } + + bool AddResponseHeader(const std::string &fieldName, const std::string &fieldValue) override + { + return true; + } + + bool AddResponseBody(const std::string &body, uint32_t length) override + { + return true; + } +}; + +class MockWebEngineConsoleMessage : public Dali::WebEngineConsoleMessage +{ +public: + MockWebEngineConsoleMessage() + { + } + + std::string GetSource() const override + { + return "source"; + } + + uint32_t GetLine() const override + { + return 10; + } + + SeverityLevel GetSeverityLevel() const override + { + return SeverityLevel::EMPTY; + } + + std::string GetText() const override + { + return "This is a text."; + } +}; + +class MockWebEngineLoadError : public Dali::WebEngineLoadError +{ +public: + MockWebEngineLoadError(const std::string& url) + : mockUrl(url) + { + } + + std::string GetUrl() const override + { + return mockUrl; + } + + ErrorCode GetCode() const override + { + return ErrorCode::UNKNOWN; + } + + std::string GetDescription() const override + { + return "This is an error."; + } + + ErrorType GetType() const override + { + return ErrorType::NONE; + } + +private: + std::string mockUrl; +}; + +class MockWebEngineSettings : public WebEngineSettings +{ +public: + MockWebEngineSettings() + : mockDefaultFontSize( 16 ), + mockJavaScriptEnabled( true ), + mockAutoFittingEnabled ( true ), + mockPluginsEnabled ( true ), + mockPrivateBrowsingEnabled( true ), + mockLinkMagnifierEnabled( true ), + mockKeypadWithoutUserActionUsed( true ), + mockAutofillPasswordFormEnabled( true ), + mockFormCandidateDataEnabled( true ), + mockTextSelectionEnabled( true ), + mockTextAutosizingEnable( true ), + mockArrowScrollEnable( true ), + mockClipboardEnabled( true ), + mockImePanelEnabled( true ), + mockImageLoadedAutomatically( true ), + mockDefaultTextEncodingName() + { + } + + uint32_t GetDefaultFontSize() const override + { + return mockDefaultFontSize; + } + + void SetDefaultFontSize( uint32_t size ) override + { + mockDefaultFontSize = size; + } + + bool IsJavaScriptEnabled() const override + { + return mockJavaScriptEnabled; + } + + void EnableJavaScript( bool enabled ) override + { + mockJavaScriptEnabled = enabled; + } + + bool IsAutoFittingEnabled() const override + { + return mockAutoFittingEnabled; + } + + void EnableAutoFitting( bool enabled ) override + { + mockAutoFittingEnabled = enabled; + } + + bool ArePluginsEnabled() const override + { + return mockPluginsEnabled; + } + + void EnablePlugins( bool enabled ) override + { + mockPluginsEnabled = enabled; + } + + bool IsPrivateBrowsingEnabled() const override + { + return mockPrivateBrowsingEnabled; + } + + void EnablePrivateBrowsing( bool enabled ) override + { + mockPrivateBrowsingEnabled = enabled; + } + + bool IsLinkMagnifierEnabled() const override + { + return mockLinkMagnifierEnabled; + } + + void EnableLinkMagnifier( bool enabled ) override + { + mockLinkMagnifierEnabled = enabled; + } + + bool IsKeypadWithoutUserActionUsed() const override + { + return mockKeypadWithoutUserActionUsed; + } + + void UseKeypadWithoutUserAction( bool used ) override + { + mockKeypadWithoutUserActionUsed = used; + } + + bool IsAutofillPasswordFormEnabled() const override + { + return mockAutofillPasswordFormEnabled; + } + + void EnableAutofillPasswordForm( bool enabled ) override + { + mockAutofillPasswordFormEnabled = enabled; + } + + bool IsFormCandidateDataEnabled() const override + { + return mockFormCandidateDataEnabled; + } + + void EnableFormCandidateData( bool enabled ) override + { + mockFormCandidateDataEnabled = enabled; + } + + bool IsTextSelectionEnabled() const override + { + return mockTextSelectionEnabled; + } + + void EnableTextSelection( bool enabled ) override + { + mockTextSelectionEnabled = enabled; + } + + bool IsTextAutosizingEnabled() const override + { + return mockTextAutosizingEnable; + } + + void EnableTextAutosizing( bool enabled ) override + { + mockTextAutosizingEnable = enabled; + } + + bool IsArrowScrollEnabled() const override + { + return mockArrowScrollEnable; + } + + void EnableArrowScroll( bool enabled ) override + { + mockArrowScrollEnable = enabled; + } + + bool IsClipboardEnabled() const override + { + return mockClipboardEnabled; + } + + void EnableClipboard( bool enabled ) override + { + mockClipboardEnabled = enabled; + } + + bool IsImePanelEnabled() const override + { + return mockImePanelEnabled; + } + + void EnableImePanel( bool enabled ) override + { + mockImePanelEnabled = enabled; + } + + bool AreImagesLoadedAutomatically() const override + { + return mockImageLoadedAutomatically; + } + + void AllowImagesLoadAutomatically( bool automatic ) override + { + mockImageLoadedAutomatically = automatic; + } + + std::string GetDefaultTextEncodingName() const override + { + return mockDefaultTextEncodingName; + } + + void SetDefaultTextEncodingName( const std::string& defaultTextEncodingName ) override + { + mockDefaultTextEncodingName = defaultTextEncodingName; + } + + void AllowMixedContents( bool allowed ) override + { + } + + void EnableSpatialNavigation( bool enabled ) override + { + } + + void EnableWebSecurity( bool enabled ) override + { + } + + void EnableCacheBuilder( bool enabled ) override + { + } + + void UseScrollbarThumbFocusNotifications( bool used ) override + { + } + + void EnableDoNotTrack( bool enabled ) override + { + } + + void AllowFileAccessFromExternalUrl( bool allowed ) override + { + } + + void AllowScriptsOpenWindows( bool allowed ) override + { + } + +private: + int mockDefaultFontSize; + bool mockJavaScriptEnabled; + bool mockAutoFittingEnabled; + bool mockPluginsEnabled; + bool mockPrivateBrowsingEnabled; + bool mockLinkMagnifierEnabled; + bool mockKeypadWithoutUserActionUsed; + bool mockAutofillPasswordFormEnabled; + bool mockFormCandidateDataEnabled; + bool mockTextSelectionEnabled; + bool mockTextAutosizingEnable; + bool mockArrowScrollEnable; + bool mockClipboardEnabled; + bool mockImePanelEnabled; + bool mockImageLoadedAutomatically; + std::string mockDefaultTextEncodingName; +}; class WebEngine: public Dali::BaseObject { public: + using JavaScriptEvaluatedResultCallback = std::function; + WebEngine() : mUrl() , mCurrentPlusOnePos( 0 ) - , mCacheModel( Dali::WebEnginePlugin::CacheModel::DOCUMENT_VIEWER ) - , mCookieAcceptPolicy( Dali::WebEnginePlugin::CookieAcceptPolicy::NO_THIRD_PARTY ) , mUserAgent() - , mEnableJavaScript( true ) - , mLoadImagesAutomatically( true ) - , mDefaultTextEncodingName() - , mDefaultFontSize( 16 ) , mEvaluating( false ) , mScrollPosition( 0, 0 ) , mScrollSize( 500, 500 ) , mContentSize( 500, 500 ) { gInstanceCount++; - gInstance = this; + if ( gInstanceCount == 1 ) // only first web engine need be saved. + { + gInstance = this; + } + + mockWebEngineSettings = new MockWebEngineSettings(); + mockWebEngineContext = new MockWebEngineContext(); + mockWebEngineCookieManager = new MockWebEngineCookieManager(); + mockWebEngineBackForwardList = new MockWebEngineBackForwardList(); } virtual ~WebEngine() @@ -86,8 +593,33 @@ public: gInstanceCount--; if( !gInstanceCount ) { - gInstance = NULL; + gInstance = 0; } + + delete mockWebEngineSettings; + delete mockWebEngineContext; + delete mockWebEngineCookieManager; + delete mockWebEngineBackForwardList; + } + + Dali::WebEngineSettings& GetSettings() const + { + return *mockWebEngineSettings; + } + + Dali::WebEngineContext& GetContext() const + { + return *mockWebEngineContext; + } + + Dali::WebEngineCookieManager& GetCookieManager() const + { + return *mockWebEngineCookieManager; + } + + Dali::WebEngineBackForwardList& GetBackForwardList() const + { + return *mockWebEngineBackForwardList; } void LoadUrl( const std::string& url ) @@ -101,6 +633,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; @@ -133,169 +696,250 @@ public: } } - void ClearHistory() + 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 ); + } + + const std::string& GetUserAgent() const + { + return mUserAgent; + } + + void SetUserAgent( const std::string& userAgent ) + { + mUserAgent = userAgent; + } + + void ScrollBy( int dx, int dy ) + { + mScrollPosition += Dali::Vector2( dx, dy ); + if ( mScrollPosition.y + mScrollSize.height > mContentSize.height ) + { + ConnectToGlobalSignal( &OnScrollEdge ); + } + } + + bool ScrollEdgeBy( int dx, int dy ) + { + mScrollPosition += Dali::Vector2( dx, dy ); + if ( mScrollPosition.y + mScrollSize.height > mContentSize.height ) + { + ConnectToGlobalSignal( &OnScrollEdge ); + } + return true; + } + + void SetScrollPosition( int x, int y ) + { + mScrollPosition.x = x; + mScrollPosition.y = y; + } + + Dali::Vector2 GetScrollPosition() const { - ConnectToGlobalSignal( &OnClearHistory ); + return mScrollPosition; } - Dali::WebEnginePlugin::CacheModel GetCacheModel() const + Dali::Vector2 GetScrollSize() const { - return mCacheModel; + return mScrollSize; } - void SetCacheModel( Dali::WebEnginePlugin::CacheModel cacheModel ) + Dali::Vector2 GetContentSize() const { - mCacheModel = cacheModel; + return mContentSize; } - Dali::WebEnginePlugin::CookieAcceptPolicy GetCookieAcceptPolicy() const + void SetPageZoomFactor(float zoomFactor) { - return mCookieAcceptPolicy; + mPageZoomFactor = zoomFactor; } - void SetCookieAcceptPolicy( Dali::WebEnginePlugin::CookieAcceptPolicy policy ) + float GetPageZoomFactor() const { - mCookieAcceptPolicy = policy; + return mPageZoomFactor; } - const std::string& GetUserAgent() const + void SetTextZoomFactor(float zoomFactor) { - return mUserAgent; + mTextZoomFactor = zoomFactor; } - void SetUserAgent( const std::string& userAgent ) + float GetTextZoomFactor() const { - mUserAgent = userAgent; + return mTextZoomFactor; } - bool IsJavaScriptEnabled() const + float GetLoadProgressPercentage() const { - return mEnableJavaScript; + return 0.5f; } - void EnableJavaScript( bool enabled ) + void SetScaleFactor(float scaleFactor, Dali::Vector2 point) { - mEnableJavaScript = enabled; + mScaleFactor = scaleFactor; } - bool AreImagesAutomaticallyLoaded() const + float GetScaleFactor() const { - return mLoadImagesAutomatically; + return mScaleFactor; } - void LoadImagesAutomatically( bool automatic ) + Dali::PixelData GetScreenshot(Dali::Rect viewArea, float scaleFactor) { - mLoadImagesAutomatically = automatic; + uint32_t bufferSize = viewArea.width * viewArea.height * 4 ; + uint8_t* pixel = new uint8_t[ bufferSize ]; + memset(pixel, 0xff, bufferSize); + return Dali::PixelData::New( pixel, bufferSize, viewArea.width, viewArea.height, + Dali::Pixel::Format::RGBA8888, + Dali::PixelData::ReleaseFunction::DELETE_ARRAY ); } - const std::string& GetDefaultTextEncodingName() const + bool GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback) { - return mDefaultTextEncodingName; + if ( callback ) + { + ConnectToGlobalSignal( &OnScreenshotCaptured ); + mScreenshotCapturedCallback = callback; + } + return true; } - void SetDefaultTextEncodingName( const std::string& defaultTextEncodingName ) + bool CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback) { - mDefaultTextEncodingName = defaultTextEncodingName; + if ( callback ) + { + ConnectToGlobalSignal( &OnVideoPlaying ); + mVideoPlayingCallback = callback; + } + return true; } - int GetDefaultFontSize() const + void RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback) { - return mDefaultFontSize; + if ( callback ) + { + ConnectToGlobalSignal( &OnGeolocationPermission ); + mGeolocationPermissionCallback = callback; + } } - void SetDefaultFontSize( int defaultFontSize ) + Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadStartedSignal() { - mDefaultFontSize = defaultFontSize; + return mPageLoadStartedSignal; } - void ScrollBy( int dx, int dy ) + Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadInProgressSignal() { - mScrollPosition += Dali::Vector2( dx, dy ); - if ( mScrollPosition.y + mScrollSize.height > mContentSize.height ) - { - gInstance->mScrollEdgeReachedSignal.Emit( Dali::WebEnginePlugin::ScrollEdge::BOTTOM ); - } + return mPageLoadInProgressSignal; } - void SetScrollPosition( int x, int y ) + Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadFinishedSignal() { - mScrollPosition.x = x; - mScrollPosition.y = y; + return mPageLoadFinishedSignal; } - void GetScrollPosition( int& x, int& y ) const + Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& PageLoadErrorSignal() { - x = mScrollPosition.x; - y = mScrollPosition.y; + return mPageLoadErrorSignal; } - void GetScrollSize( int& w, int& h ) const + Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& ScrollEdgeReachedSignal() { - w = mScrollSize.width; - h = mScrollSize.height; + return mScrollEdgeReachedSignal; } - void GetContentSize( int& w, int& h ) const + Dali::WebEnginePlugin::WebEngineUrlChangedSignalType& UrlChangedSignal() { - w = mContentSize.width; - h = mContentSize.height; + return mUrlChangedSignal; } - Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadStartedSignal() + Dali::WebEnginePlugin::WebEngineFormRepostDecisionSignalType& FormRepostDecisionSignal() { - return mPageLoadStartedSignal; + return mFormRepostDecisionSignal; } - Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadFinishedSignal() + Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& FrameRenderedSignal() { - return mPageLoadFinishedSignal; + return mFrameRenderedSignal; } - Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& PageLoadErrorSignal() + Dali::WebEnginePlugin::WebEngineRequestInterceptorSignalType& RequestInterceptorSignal() { - return mPageLoadErrorSignal; + return mRequestInterceptorSignal; } - Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& ScrollEdgeReachedSignal() + Dali::WebEnginePlugin::WebEngineConsoleMessageSignalType& ConsoleMessageSignal() { - return mScrollEdgeReachedSignal; + return mConsoleMessageSignal; } - std::string mUrl; - std::vector< std::string > mHistory; - size_t mCurrentPlusOnePos; - Dali::WebEnginePlugin::CacheModel mCacheModel; - Dali::WebEnginePlugin::CookieAcceptPolicy mCookieAcceptPolicy; - std::string mUserAgent; - bool mEnableJavaScript; - bool mLoadImagesAutomatically; - std::string mDefaultTextEncodingName; - int mDefaultFontSize; - 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::Vector2 mScrollPosition; - Dali::Vector2 mScrollSize; - Dali::Vector2 mContentSize; + std::string mUrl; + std::vector mHistory; + size_t mCurrentPlusOnePos; + std::string mUserAgent; + + Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadStartedSignal; + Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadInProgressSignal; + Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadFinishedSignal; + Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType mPageLoadErrorSignal; + Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType mScrollEdgeReachedSignal; + Dali::WebEnginePlugin::WebEngineUrlChangedSignalType mUrlChangedSignal; + Dali::WebEnginePlugin::WebEngineFormRepostDecisionSignalType mFormRepostDecisionSignal; + Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType mFrameRenderedSignal; + Dali::WebEnginePlugin::WebEngineRequestInterceptorSignalType mRequestInterceptorSignal; + Dali::WebEnginePlugin::WebEngineConsoleMessageSignalType mConsoleMessageSignal; + + bool mEvaluating; + float mPageZoomFactor; + float mTextZoomFactor; + float mScaleFactor; + + Dali::Vector2 mScrollPosition; + Dali::Vector2 mScrollSize; + Dali::Vector2 mContentSize; + WebEngineBackForwardList* mockWebEngineBackForwardList; + WebEngineContext* mockWebEngineContext; + WebEngineCookieManager* mockWebEngineCookieManager; + WebEngineSettings* mockWebEngineSettings; + + std::vector mResultCallbacks; + Dali::WebEnginePlugin::JavaScriptAlertCallback mJavaScriptAlertCallback; + Dali::WebEnginePlugin::JavaScriptConfirmCallback mJavaScriptConfirmCallback; + Dali::WebEnginePlugin::JavaScriptPromptCallback mJavaScriptPromptCallback; + Dali::WebEnginePlugin::ScreenshotCapturedCallback mScreenshotCapturedCallback; + Dali::WebEnginePlugin::VideoPlayingCallback mVideoPlayingCallback; + Dali::WebEnginePlugin::GeolocationPermissionCallback mGeolocationPermissionCallback; }; -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 { @@ -335,8 +979,33 @@ 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" ); + + std::shared_ptr decision(new MockWebEngineFormRepostDecision()); + gInstance->mFormRepostDecisionSignal.Emit(std::move(decision)); + gInstance->mFrameRenderedSignal.Emit(); + std::shared_ptr interceptor(new MockWebEngineRequestInterceptor()); + gInstance->mRequestInterceptorSignal.Emit(std::move(interceptor)); + + std::shared_ptr error(new MockWebEngineLoadError(gInstance->mUrl)); + gInstance->mPageLoadErrorSignal.Emit(std::move(error)); + std::shared_ptr message(new MockWebEngineConsoleMessage()); + gInstance->mConsoleMessageSignal.Emit(std::move(message)); + } + return false; +} + +bool OnScrollEdge() +{ + DisconnectFromGlobalSignal( &OnScrollEdge ); + + if( gInstance ) + { + gInstance->mScrollEdgeReachedSignal.Emit( Dali::WebEnginePlugin::ScrollEdge::BOTTOM ); } + return false; } @@ -355,11 +1024,77 @@ 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 OnScreenshotCaptured() +{ + DisconnectFromGlobalSignal( &OnScreenshotCaptured ); + if ( gInstance ) + { + uint8_t* pixel = new uint8_t[ 2 * 2 * 4 ]; + memset(pixel, 0xff, 2 * 2 * 4); + Dali::PixelData data = Dali::PixelData::New( pixel, 2 * 2 * 4, 2, 2, + Dali::Pixel::Format::RGBA8888, + Dali::PixelData::ReleaseFunction::DELETE_ARRAY ); + gInstance->mScreenshotCapturedCallback( data ); + } + return false; +} + +bool OnVideoPlaying() +{ + DisconnectFromGlobalSignal( &OnVideoPlaying ); + if ( gInstance ) + { + gInstance->mVideoPlayingCallback( true ); + } + return false; +} + +bool OnGeolocationPermission() +{ + DisconnectFromGlobalSignal( &OnGeolocationPermission ); + if ( gInstance ) + { + gInstance->mGeolocationPermissionCallback( "", "" ); + } + 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 ); @@ -367,13 +1102,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() { @@ -415,15 +1164,49 @@ 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() { } +WebEngineSettings& WebEngine::GetSettings() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetSettings(); +} + +WebEngineContext& WebEngine::GetContext() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetContext(); +} + +WebEngineCookieManager& WebEngine::GetCookieManager() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetCookieManager(); +} + +WebEngineBackForwardList& WebEngine::GetBackForwardList() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetBackForwardList(); +} + 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(); @@ -436,14 +1219,29 @@ NativeImageInterfacePtr WebEngine::GetNativeImageSource() return sourcePtr; } -void WebEngine::LoadHTMLString( const std::string& htmlString ) +void WebEngine::LoadHtmlString( const std::string& htmlString ) +{ +} + +bool WebEngine::LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl) { + return true; +} + +bool WebEngine::LoadContents(const std::string& contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri) +{ + return true; } void WebEngine::Reload() { } +bool WebEngine::ReloadWithoutCache() +{ + return true; +} + void WebEngine::StopLoading() { } @@ -456,6 +1254,34 @@ void WebEngine::Resume() { } +void WebEngine::SuspendNetworkLoading() +{ +} + +void WebEngine::ResumeNetworkLoading() +{ +} + +bool WebEngine::AddCustomHeader(const std::string& name, const std::string& value) +{ + return true; +} + +bool WebEngine::RemoveCustomHeader(const std::string& name) +{ + return true; +} + +uint32_t WebEngine::StartInspectorServer(uint32_t port) +{ + return port; +} + +bool WebEngine::StopInspectorServer() +{ + return true; +} + bool WebEngine::CanGoForward() { return Internal::Adaptor::GetImplementation( *this ).CanGoForward(); @@ -485,87 +1311,93 @@ void WebEngine::AddJavaScriptMessageHandler( const std::string& exposedObjectNam { } -void WebEngine::ClearHistory() +void WebEngine::RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback ) { - Internal::Adaptor::GetImplementation( *this ).ClearHistory(); + Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptAlertCallback( callback ); } -void WebEngine::ClearCache() +void WebEngine::JavaScriptAlertReply() { } -void WebEngine::ClearCookies() +void WebEngine::RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback ) { + Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptConfirmCallback( callback ); } -Dali::WebEnginePlugin::CacheModel WebEngine::GetCacheModel() const +void WebEngine::JavaScriptConfirmReply( bool confirmed ) { - return Internal::Adaptor::GetImplementation( *this ).GetCacheModel(); } -void WebEngine::SetCacheModel( Dali::WebEnginePlugin::CacheModel cacheModel ) +void WebEngine::RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback ) { - Internal::Adaptor::GetImplementation( *this ).SetCacheModel( cacheModel ); + Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptPromptCallback( callback ); } -Dali::WebEnginePlugin::CookieAcceptPolicy WebEngine::GetCookieAcceptPolicy() const +void WebEngine::JavaScriptPromptReply( const std::string& result ) { - return Internal::Adaptor::GetImplementation( *this ).GetCookieAcceptPolicy(); } -void WebEngine::SetCookieAcceptPolicy( Dali::WebEnginePlugin::CookieAcceptPolicy policy ) +void WebEngine::ClearAllTilesResources() { - Internal::Adaptor::GetImplementation( *this ).SetCookieAcceptPolicy( policy ); } -const std::string& WebEngine::GetUserAgent() const +void WebEngine::ClearHistory() { - return Internal::Adaptor::GetImplementation( *this ).GetUserAgent(); + Internal::Adaptor::GetImplementation( *this ).ClearHistory(); } -void WebEngine::SetUserAgent( const std::string& userAgent ) +void WebEngine::SetScaleFactor(float scaleFactor, Dali::Vector2 point) +{ + Internal::Adaptor::GetImplementation( *this ).SetScaleFactor(scaleFactor, point); +} + +float WebEngine::GetScaleFactor() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetScaleFactor(); +} + +void WebEngine::ActivateAccessibility(bool activated) { - Internal::Adaptor::GetImplementation( *this ).SetUserAgent( userAgent ); } -bool WebEngine::IsJavaScriptEnabled() const +bool WebEngine::HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount) { - return Internal::Adaptor::GetImplementation( *this ).IsJavaScriptEnabled(); + return true; } -void WebEngine::EnableJavaScript( bool enabled ) +void WebEngine::AddDynamicCertificatePath(const std::string& host, const std::string& certPath) { - Internal::Adaptor::GetImplementation( *this ).EnableJavaScript( enabled ); } -bool WebEngine::AreImagesAutomaticallyLoaded() const +Dali::PixelData WebEngine::GetScreenshot(Dali::Rect viewArea, float scaleFactor) { - return Internal::Adaptor::GetImplementation( *this ).AreImagesAutomaticallyLoaded(); + return Internal::Adaptor::GetImplementation( *this ).GetScreenshot(viewArea, scaleFactor); } -void WebEngine::LoadImagesAutomatically( bool automatic ) +bool WebEngine::GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback) { - Internal::Adaptor::GetImplementation( *this ).LoadImagesAutomatically( automatic ); + return Internal::Adaptor::GetImplementation( *this ).GetScreenshotAsynchronously(viewArea, scaleFactor, callback); } -const std::string& WebEngine::GetDefaultTextEncodingName() const +bool WebEngine::CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback) { - return Internal::Adaptor::GetImplementation( *this ).GetDefaultTextEncodingName(); + return Internal::Adaptor::GetImplementation( *this ).CheckVideoPlayingAsynchronously(callback); } -void WebEngine::SetDefaultTextEncodingName( const std::string& defaultTextEncodingName ) +void WebEngine::RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback) { - Internal::Adaptor::GetImplementation( *this ).SetDefaultTextEncodingName( defaultTextEncodingName ); + Internal::Adaptor::GetImplementation( *this ).RegisterGeolocationPermissionCallback(callback); } -int WebEngine::GetDefaultFontSize() const +const std::string& WebEngine::GetUserAgent() const { - return Internal::Adaptor::GetImplementation( *this ).GetDefaultFontSize(); + return Internal::Adaptor::GetImplementation( *this ).GetUserAgent(); } -void WebEngine::SetDefaultFontSize( int defaultFontSize ) +void WebEngine::SetUserAgent( const std::string& userAgent ) { - Internal::Adaptor::GetImplementation( *this ).SetDefaultFontSize( defaultFontSize ); + Internal::Adaptor::GetImplementation( *this ).SetUserAgent( userAgent ); } void WebEngine::ScrollBy( int dx, int dy ) @@ -573,30 +1405,56 @@ void WebEngine::ScrollBy( int dx, int dy ) Internal::Adaptor::GetImplementation( *this ).ScrollBy( dx, dy ); } +bool WebEngine::ScrollEdgeBy( int dx, int dy ) +{ + return Internal::Adaptor::GetImplementation( *this ).ScrollEdgeBy( dx, dy ); +} + 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 ) { } +void WebEngine::SetDocumentBackgroundColor(Dali::Vector4 color) +{ +} + +void WebEngine::ClearTilesWhenHidden(bool cleared) +{ +} + +void WebEngine::SetTileCoverAreaMultiplier(float multiplier) +{ +} + +void WebEngine::EnableCursorByClient(bool enabled) +{ +} + +std::string WebEngine::GetSelectedText() const +{ + return "test"; +} + bool WebEngine::SendTouchEvent( const TouchEvent& touch ) { return true; @@ -607,15 +1465,71 @@ bool WebEngine::SendKeyEvent( const KeyEvent& event ) return true; } +bool WebEngine::SendHoverEvent( const HoverEvent& event ) +{ + return true; +} + +bool WebEngine::SendWheelEvent( const WheelEvent& event ) +{ + return true; +} + void WebEngine::SetFocus( bool focused ) { } +void WebEngine::SetPageZoomFactor(float zoomFactor) +{ + Internal::Adaptor::GetImplementation( *this ).SetPageZoomFactor(zoomFactor); +} + +float WebEngine::GetPageZoomFactor() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetPageZoomFactor(); +} + +void WebEngine::SetTextZoomFactor(float zoomFactor) +{ + Internal::Adaptor::GetImplementation( *this ).SetTextZoomFactor(zoomFactor); +} + +float WebEngine::GetTextZoomFactor() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetTextZoomFactor(); +} + +float WebEngine::GetLoadProgressPercentage() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetLoadProgressPercentage(); +} + +void WebEngine::UpdateDisplayArea( Dali::Rect< int > displayArea ) +{ +} + +void WebEngine::EnableVideoHole( bool enabled ) +{ +} + +void WebEngine::EnableMouseEvents( bool enabled ) +{ +} + +void WebEngine::EnableKeyEvents( 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(); @@ -631,5 +1545,30 @@ Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& WebEngine::ScrollEd return Internal::Adaptor::GetImplementation( *this ).ScrollEdgeReachedSignal(); } +Dali::WebEnginePlugin::WebEngineUrlChangedSignalType& WebEngine::UrlChangedSignal() +{ + return Internal::Adaptor::GetImplementation( *this ).UrlChangedSignal(); +} + +Dali::WebEnginePlugin::WebEngineFormRepostDecisionSignalType& WebEngine::FormRepostDecisionSignal() +{ + return Internal::Adaptor::GetImplementation( *this ).FormRepostDecisionSignal(); +} + +Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& WebEngine::FrameRenderedSignal() +{ + return Internal::Adaptor::GetImplementation(*this).FrameRenderedSignal(); +} + +Dali::WebEnginePlugin::WebEngineRequestInterceptorSignalType& WebEngine::RequestInterceptorSignal() +{ + return Internal::Adaptor::GetImplementation(*this).RequestInterceptorSignal(); +} + +Dali::WebEnginePlugin::WebEngineConsoleMessageSignalType& WebEngine::ConsoleMessageSignal() +{ + return Internal::Adaptor::GetImplementation(*this).ConsoleMessageSignal(); +} + } // namespace Dali;