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=075cf2a3d5a226797f5bcc2816395bd92a62fc67;hp=9d7a582863bb11fd3d6ad8a9c0fda7a2d37427c9;hb=a0389a25a5ce0e8b539c75a6f37b75d3286dacef;hpb=9f87f31e8eea129579f00d6590f625a6290fc9cd 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..075cf2a 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) 2022 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. @@ -17,10 +17,31 @@ #include "toolkit-timer.h" -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include +#include +#include +#include #include namespace Dali @@ -33,347 +54,1935 @@ namespace Adaptor { class WebEngine; +class MockWebEngineContext; 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 = nullptr; static int gInstanceCount = 0; +static MockWebEngineContext* gWebEngineContextInstance = nullptr; bool OnGoBack(); bool OnGoForward(); bool OnLoadUrl(); bool OnEvaluteJavaScript(); +bool OnJavaScriptAlert(); +bool OnJavaScriptConfirm(); +bool OnJavaScriptPrompt(); +bool OnHitTestCreated(); +bool OnScrollEdge(); +bool OnScreenshotCaptured(); +bool OnVideoPlaying(); +bool OnGeolocationPermission(); bool OnClearHistory(); +bool OnSecurityOriginAcquired(); +bool OnStorageUsageAcquired(); +bool OnFormPasswordAcquired(); +bool OnDownloadStarted(); +bool OnMimeOverridden(); +bool OnRequestIntercepted(); +bool OnChangesWatch(); +bool OnPlainTextReceived(); -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 WebEngine: public Dali::BaseObject +class MockWebEngineContext : public Dali::WebEngineContext { public: + MockWebEngineContext() + : mockModel( Dali::WebEngineContext::CacheModel::DOCUMENT_VIEWER ) + { + } - 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 ) + Dali::WebEngineContext::CacheModel GetCacheModel() const override { - gInstanceCount++; - gInstance = this; + return mockModel; } - virtual ~WebEngine() + void SetCacheModel( Dali::WebEngineContext::CacheModel cacheModel ) override { - gInstanceCount--; - if( !gInstanceCount ) + mockModel = cacheModel; + } + + void SetProxyUri( const std::string& uri ) override + { + mockProxyUri = uri; + } + + std::string GetProxyUri() const override + { + return mockProxyUri; + } + + void SetProxyBypassRule(const std::string& proxy, const std::string& bypass) override + { + mockBypassRule = bypass; + } + + std::string GetProxyBypassRule() const override + { + return mockBypassRule; + } + + void SetDefaultProxyAuth( const std::string& username, const std::string& password ) override + { + } + + void SetCertificateFilePath( const std::string& certificatePath ) override + { + mockCertificateFilePath = certificatePath; + } + + std::string GetCertificateFilePath() const override + { + return mockCertificateFilePath; + } + + void DeleteAllWebDatabase() override + { + } + + bool GetWebDatabaseOrigins(Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback callback) override + { + if (callback) { - gInstance = NULL; + ConnectToGlobalSignal(&OnSecurityOriginAcquired); + mSecurityOriginAcquiredCallback = callback; } + return true; } - void LoadUrl( const std::string& url ) + bool DeleteWebDatabase(Dali::WebEngineSecurityOrigin& origin) override { - mUrl = url; - ConnectToGlobalSignal( &OnLoadUrl ); + return true; } - const std::string& GetUrl() const + bool GetWebStorageOrigins(Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback callback) override { - return mUrl; + if (callback) + { + ConnectToGlobalSignal(&OnSecurityOriginAcquired); + mSecurityOriginAcquiredCallback = callback; + } + return true; } - bool CanGoForward() const + bool GetWebStorageUsageForOrigin(Dali::WebEngineSecurityOrigin& origin, Dali::WebEngineContext::WebEngineStorageUsageAcquiredCallback callback) override { - return mHistory.size() > mCurrentPlusOnePos; + if (callback) + { + ConnectToGlobalSignal(&OnStorageUsageAcquired); + mStorageUsageAcquiredCallback = callback; + } + return true; } - void GoForward() + void DeleteAllWebStorage() override { - ConnectToGlobalSignal( &OnGoForward ); } - bool CanGoBack() const + bool DeleteWebStorage(Dali::WebEngineSecurityOrigin& origin) override { - return mCurrentPlusOnePos > 1; + return true; } - void GoBack() + void DeleteLocalFileSystem() override { - ConnectToGlobalSignal( &OnGoBack ); } - void EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler ) + void ClearCache() override { - if( resultHandler ) + } + + bool DeleteApplicationCache(Dali::WebEngineSecurityOrigin& origin) override + { + return true; + } + + void GetFormPasswordList(Dali::WebEngineContext::WebEngineFormPasswordAcquiredCallback callback) override + { + if (callback) { - if( !mEvaluating ) - { - ConnectToGlobalSignal( &OnEvaluteJavaScript ); - } - mResultCallbacks.push_back( resultHandler ); + ConnectToGlobalSignal(&OnFormPasswordAcquired); + mFormPasswordAcquiredCallback = callback; } } - void ClearHistory() + void RegisterDownloadStartedCallback(Dali::WebEngineContext::WebEngineDownloadStartedCallback callback) override { - ConnectToGlobalSignal( &OnClearHistory ); + if (callback) + { + ConnectToGlobalSignal(&OnDownloadStarted); + mDownloadStartedCallback = callback; + } + } + + void RegisterMimeOverriddenCallback(Dali::WebEngineContext::WebEngineMimeOverriddenCallback callback) override + { + if (callback) + { + ConnectToGlobalSignal(&OnMimeOverridden); + mMimeOverriddenCallback = callback; + } } - Dali::WebEnginePlugin::CacheModel GetCacheModel() const + void RegisterRequestInterceptedCallback(Dali::WebEngineContext::WebEngineRequestInterceptedCallback callback) override { - return mCacheModel; + if (callback) + { + ConnectToGlobalSignal(&OnRequestIntercepted); + mRequestInterceptedCallback = callback; + } } - void SetCacheModel( Dali::WebEnginePlugin::CacheModel cacheModel ) + void EnableCache( bool cacheEnabled ) override { - mCacheModel = cacheModel; + mockCacheEnabled = cacheEnabled; } - Dali::WebEnginePlugin::CookieAcceptPolicy GetCookieAcceptPolicy() const + bool IsCacheEnabled() const override { - return mCookieAcceptPolicy; + return mockCacheEnabled; } - void SetCookieAcceptPolicy( Dali::WebEnginePlugin::CookieAcceptPolicy policy ) + void SetAppId(const std::string& appID) override { - mCookieAcceptPolicy = policy; } - const std::string& GetUserAgent() const + bool SetAppVersion(const std::string& appVersion) override { - return mUserAgent; + return true; } - void SetUserAgent( const std::string& userAgent ) + void SetApplicationType(const Dali::WebEngineContext::ApplicationType applicationType) override { - mUserAgent = userAgent; } - bool IsJavaScriptEnabled() const + void SetTimeOffset(float timeOffset) override { - return mEnableJavaScript; } - void EnableJavaScript( bool enabled ) + void SetTimeZoneOffset(float timeZoneOffset, float daylightSavingTime) override { - mEnableJavaScript = enabled; } - bool AreImagesAutomaticallyLoaded() const + void RegisterUrlSchemesAsCorsEnabled(const std::vector& schemes) override { - return mLoadImagesAutomatically; } - void LoadImagesAutomatically( bool automatic ) + void RegisterJsPluginMimeTypes(const std::vector& mimeTypes) override { - mLoadImagesAutomatically = automatic; } - const std::string& GetDefaultTextEncodingName() const + void SetDefaultZoomFactor(float zoomFactor) override { - return mDefaultTextEncodingName; + mockZoomFactor = zoomFactor; } - void SetDefaultTextEncodingName( const std::string& defaultTextEncodingName ) + float GetDefaultZoomFactor() const override { - mDefaultTextEncodingName = defaultTextEncodingName; + return mockZoomFactor; } - int GetDefaultFontSize() const + bool DeleteAllApplicationCache() override { - return mDefaultFontSize; + return true; } - void SetDefaultFontSize( int defaultFontSize ) + bool DeleteAllWebIndexedDatabase() override { - mDefaultFontSize = defaultFontSize; + return true; } - void ScrollBy( int dx, int dy ) + void DeleteFormPasswordDataList(const std::vector& list) override { - mScrollPosition += Dali::Vector2( dx, dy ); - if ( mScrollPosition.y + mScrollSize.height > mContentSize.height ) + } + + void DeleteAllFormPasswordData() override + { + } + + void DeleteAllFormCandidateData() override + { + } + + bool FreeUnusedMemory() override + { + return true; + } + +public: + Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback mSecurityOriginAcquiredCallback; + Dali::WebEngineContext::WebEngineStorageUsageAcquiredCallback mStorageUsageAcquiredCallback; + Dali::WebEngineContext::WebEngineFormPasswordAcquiredCallback mFormPasswordAcquiredCallback; + Dali::WebEngineContext::WebEngineDownloadStartedCallback mDownloadStartedCallback; + Dali::WebEngineContext::WebEngineMimeOverriddenCallback mMimeOverriddenCallback; + Dali::WebEngineContext::WebEngineRequestInterceptedCallback mRequestInterceptedCallback; + +private: + Dali::WebEngineContext::CacheModel mockModel; + std::string mockProxyUri; + std::string mockBypassRule; + std::string mockCertificateFilePath; + bool mockCacheEnabled; + float mockZoomFactor; +}; + +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 + { + } + + void ChangesWatch( Dali::WebEngineCookieManager::WebEngineCookieManagerChangesWatchCallback callback ) override + { + if ( callback ) { - gInstance->mScrollEdgeReachedSignal.Emit( Dali::WebEnginePlugin::ScrollEdge::BOTTOM ); + ConnectToGlobalSignal( &OnChangesWatch ); + mChangesWatchCallback = callback; } } - void SetScrollPosition( int x, int y ) +public: + Dali::WebEngineCookieManager::WebEngineCookieManagerChangesWatchCallback mChangesWatchCallback; + +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 { - mScrollPosition.x = x; - mScrollPosition.y = y; + 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() + { + } + + std::unique_ptr GetCurrentItem() const override + { + std::unique_ptr ret(new MockWebEngineBackForwardListItem()); + return ret; + } + + std::unique_ptr GetPreviousItem() const override + { + std::unique_ptr ret(new MockWebEngineBackForwardListItem()); + return ret; + } + + std::unique_ptr GetNextItem() const override + { + std::unique_ptr ret(new MockWebEngineBackForwardListItem()); + return ret; + } + + std::unique_ptr GetItemAtIndex( uint32_t index ) const override + { + std::unique_ptr ret(new MockWebEngineBackForwardListItem()); + return ret; + } + + uint32_t GetItemCount() const override + { + return 1; + } + + std::vector> GetBackwardItems(int limit) override + { + std::vector> ret; + std::unique_ptr item(new MockWebEngineBackForwardListItem()); + ret.push_back(std::move(item)); + return ret; + } + + std::vector> GetForwardItems(int limit) override + { + std::vector> ret; + std::unique_ptr item(new MockWebEngineBackForwardListItem()); + ret.push_back(std::move(item)); + return ret; + } +}; + + +class MockWebEngineCertificate : public Dali::WebEngineCertificate +{ +public: + MockWebEngineCertificate() + { + } + + void Allow(bool allowed) override + { + } + + bool IsFromMainFrame() const override + { + return true; + } + + std::string GetPem() const override + { + return "abc"; + } + + bool IsContextSecure() const override + { + return true; + } +}; + +class MockWebEngineHttpAuthHandler : public Dali::WebEngineHttpAuthHandler +{ +public: + MockWebEngineHttpAuthHandler() + { + } + + std::string GetRealm() const override + { + return "test"; + } + + void Suspend() override + { + } + + void UseCredential(const std::string& user, const std::string& password) override + { + } + + void CancelCredential() override + { + } +}; + +class MockWebEngineFormRepostDecision : public WebEngineFormRepostDecision +{ +public: + MockWebEngineFormRepostDecision() + { + } + + void Reply(bool allowed) override {} +}; + +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); } - void GetScrollPosition( int& x, int& y ) const + std::string GetScheme() const { - x = mScrollPosition.x; - y = mScrollPosition.y; + return "test"; } - void GetScrollSize( int& w, int& h ) const + bool Use() { - w = mScrollSize.width; - h = mScrollSize.height; + return true; } - void GetContentSize( int& w, int& h ) const + bool Ignore() { - w = mContentSize.width; - h = mContentSize.height; + return true; } - Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadStartedSignal() + bool Suspend() + { + return true; + } + +private: + MockWebEngineFrame mockWebFrame; +}; + +class MockWebEngineRequestInterceptor : public WebEngineRequestInterceptor +{ +public: + MockWebEngineRequestInterceptor() + { + } + + std::string GetUrl() const override + { + return "http://test.html"; + } + + Dali::Property::Map GetHeaders() const override + { + return mockHeadersMap; + } + + std::string GetMethod() const override + { + return "GET"; + } + + 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 + { + mockHeadersMap.Add(fieldName, fieldValue); + return true; + } + + bool AddResponseHeaders(const Dali::Property::Map& headers) override + { + mockHeadersMap.Merge(headers); + return true; + } + + bool AddResponseBody(const int8_t* body, uint32_t length) override + { + return true; + } + + bool AddResponse(const std::string& headers, const int8_t* body, uint32_t length) override + { + return true; + } + + bool WriteResponseChunk(const int8_t* chunk, uint32_t length) override + { + return true; + } + +private: + Dali::Property::Map mockHeadersMap; +}; + +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 MockWebEngineContextMenuItem : public Dali::WebEngineContextMenuItem +{ +public: + MockWebEngineContextMenuItem() + { + } + + ItemTag GetTag() const override + { + return ItemTag::NO_ACTION; + } + + ItemType GetType() const override + { + return ItemType::ACTION; + } + + bool IsEnabled() const override + { + return true; + } + + std::string GetLinkUrl() const override + { + return "http://test.html"; + } + + std::string GetImageUrl() const override + { + return "http://test.jpg"; + } + + std::string GetTitle() const override + { + return "title"; + } + + std::unique_ptr GetParentMenu() const override + { + std::unique_ptr result; + return result; + } +}; + +class MockWebEngineContextMenu : public Dali::WebEngineContextMenu +{ +public: + MockWebEngineContextMenu() + { + } + + uint32_t GetItemCount() const override + { + return 1; + } + + std::unique_ptr GetItemAt(uint32_t index) const override + { + std::unique_ptr webitem(new MockWebEngineContextMenuItem()); + return webitem; + } + + std::vector> GetItemList() const override + { + std::vector> result; + std::unique_ptr webitem(new MockWebEngineContextMenuItem()); + result.push_back(std::move(webitem)); + return result; + } + + bool RemoveItem(WebEngineContextMenuItem& item) override + { + return true; + } + + bool AppendItemAsAction(WebEngineContextMenuItem::ItemTag tag, const std::string& title, bool enabled) override + { + return true; + } + + bool AppendItem(WebEngineContextMenuItem::ItemTag tag, const std::string& title, const std::string& iconFile, bool enabled) override + { + return true; + } + + bool SelectItem(WebEngineContextMenuItem& item) override + { + return true; + } + + bool Hide() override + { + return true; + } +}; + +class MockWebEngineHitTest : public Dali::WebEngineHitTest +{ +public: + MockWebEngineHitTest() + { + } + + ResultContext GetResultContext() const override + { + return ResultContext::DOCUMENT; + } + + std::string GetLinkUri() const override + { + return "http://test.html"; + } + + std::string GetLinkTitle() const override + { + return "test"; + } + + std::string GetLinkLabel() const override + { + return "label"; + } + + std::string GetImageUri() const override + { + return "http://test.jpg"; + } + + std::string GetMediaUri() const override + { + return "http://test.mp4"; + } + + std::string GetTagName() const override + { + return "img"; + } + + std::string GetNodeValue() const override + { + return "test"; + } + + Dali::Property::Map GetAttributes() const override + { + return mockAttributesMap; + } + + std::string GetImageFileNameExtension() const override + { + return "jpg"; + } + + Dali::PixelData GetImageBuffer() override + { + uint8_t* imageData = new uint8_t[16]; + memset(imageData, 0xff, 16); + return Dali::PixelData::New(imageData, 16, 2, 2, + Dali::Pixel::Format::RGBA8888, + Dali::PixelData::ReleaseFunction::DELETE_ARRAY); + } + +private: + mutable Dali::Property::Map mockAttributesMap; +}; + +class MockWebEngineSecurityOrigin : public Dali::WebEngineSecurityOrigin +{ +public: + MockWebEngineSecurityOrigin() + : mockUrl("https://test.html") + , mockPotocol("https") + { + } + + std::string GetHost() const + { + return mockUrl; + } + + std::string GetProtocol() const + { + return mockPotocol; + } + +private: + std::string mockUrl; + std::string mockPotocol; +}; + +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 + { + } + + bool SetViewportMetaTag(bool enable) override + { + return true; + } + + bool SetForceZoom(bool enable) override + { + return true; + } + + bool IsZoomForced() const override + { + return true; + } + + bool SetTextZoomEnabled(bool enable) override + { + return true; + } + + bool IsTextZoomEnabled() const override + { + return true; + } + + void SetExtraFeature(const std::string& feature, bool enable) override + { + } + + bool IsExtraFeatureEnabled(const std::string& feature) const override + { + return true; + } + +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: + + WebEngine() + : mUrl() + , mCurrentPlusOnePos( 0 ) + , mUserAgent() + , mEvaluating( false ) + , mScrollPosition( 0, 0 ) + , mScrollSize( 500, 500 ) + , mContentSize( 500, 500 ) + { + gInstanceCount++; + if ( gInstanceCount == 1 ) // only first web engine need be saved. + { + gInstance = this; + } + + mockWebEngineSettings = new MockWebEngineSettings(); + MockWebEngineContext* engineContext = new MockWebEngineContext(); + mockWebEngineContext = engineContext; + if ( gInstanceCount == 1 ) + { + gWebEngineContextInstance = engineContext; + } + mockWebEngineCookieManager = new MockWebEngineCookieManager(); + mockWebEngineBackForwardList = new MockWebEngineBackForwardList(); + } + + virtual ~WebEngine() + { + gInstanceCount--; + if( !gInstanceCount ) + { + gInstance = 0; + gWebEngineContextInstance = 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 ) + { + mUrl = url; + ConnectToGlobalSignal( &OnLoadUrl ); + } + + std::string GetUrl() const + { + return mUrl; + } + + std::string GetTitle() const + { + return std::string("title"); + } + + Dali::PixelData GetFavicon() const + { + static int testGetFaviconCount = 0; + if (testGetFaviconCount == 0) + { + testGetFaviconCount++; + uint8_t* faviconData = new uint8_t[16]; + memset(faviconData, 0xff, 16); + return Dali::PixelData::New(faviconData, 16, 2, 2, + Dali::Pixel::Format::RGBA8888, + Dali::PixelData::ReleaseFunction::DELETE_ARRAY); + } + else + { + return Dali::PixelData(); + } + } + + bool CanGoForward() const + { + return mHistory.size() > mCurrentPlusOnePos; + } + + void GoForward() + { + ConnectToGlobalSignal( &OnGoForward ); + } + + bool CanGoBack() const + { + return mCurrentPlusOnePos > 1; + } + + void GoBack() + { + ConnectToGlobalSignal( &OnGoBack ); + } + + void EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler ) + { + if( resultHandler ) + { + if( !mEvaluating ) + { + ConnectToGlobalSignal( &OnEvaluteJavaScript ); + } + mResultCallbacks.push_back( resultHandler ); + } + } + + 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; + } + } + + std::unique_ptr CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode) + { + std::unique_ptr hitTest(new MockWebEngineHitTest()); + return hitTest; + } + + bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback) + { + if (callback) + { + ConnectToGlobalSignal( &OnHitTestCreated ); + mHitTestCreatedCallback = callback; + } + return true; + } + + void ClearHistory() + { + ConnectToGlobalSignal( &OnClearHistory ); + } + + std::string GetUserAgent() const + { + return mUserAgent; + } + + void SetUserAgent( const std::string& userAgent ) + { + mUserAgent = userAgent; + } + + void ScrollBy( int32_t dx, int32_t dy ) + { + mScrollPosition += Dali::Vector2( dx, dy ); + if ( mScrollPosition.y + mScrollSize.height > mContentSize.height ) + { + ConnectToGlobalSignal( &OnScrollEdge ); + } + } + + bool ScrollEdgeBy( int32_t dx, int32_t dy ) + { + mScrollPosition += Dali::Vector2( dx, dy ); + if ( mScrollPosition.y + mScrollSize.height > mContentSize.height ) + { + ConnectToGlobalSignal( &OnScrollEdge ); + } + return true; + } + + void SetScrollPosition( int32_t x, int32_t y ) + { + mScrollPosition.x = x; + mScrollPosition.y = y; + } + + Dali::Vector2 GetScrollPosition() const + { + return mScrollPosition; + } + + Dali::Vector2 GetScrollSize() const + { + return mScrollSize; + } + + Dali::Vector2 GetContentSize() const + { + return mContentSize; + } + + void SetPageZoomFactor(float zoomFactor) + { + mPageZoomFactor = zoomFactor; + } + + float GetPageZoomFactor() const + { + return mPageZoomFactor; + } + + void SetTextZoomFactor(float zoomFactor) + { + mTextZoomFactor = zoomFactor; + } + + float GetTextZoomFactor() const + { + return mTextZoomFactor; + } + + float GetLoadProgressPercentage() const + { + return 0.5f; + } + + void SetScaleFactor(float scaleFactor, Dali::Vector2 point) + { + mScaleFactor = scaleFactor; + } + + float GetScaleFactor() const + { + return mScaleFactor; + } + + Dali::Accessibility::Address GetAccessibilityAddress() + { + return {":9.99", "root"}; + } + + Dali::PixelData GetScreenshot(Dali::Rect viewArea, float scaleFactor) + { + 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 ); + } + + bool GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback) + { + if ( callback ) + { + ConnectToGlobalSignal( &OnScreenshotCaptured ); + mScreenshotCapturedCallback = callback; + } + return true; + } + + bool CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback) + { + if ( callback ) + { + ConnectToGlobalSignal( &OnVideoPlaying ); + mVideoPlayingCallback = callback; + } + return true; + } + + void RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback) + { + if ( callback ) + { + ConnectToGlobalSignal( &OnGeolocationPermission ); + mGeolocationPermissionCallback = callback; + } + } + + Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& FrameRenderedSignal() + { + return mFrameRenderedSignal; + } + + void RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) + { + mPageLoadStartedCallback = callback; + } + + void RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) + { + mPageLoadInProgressCallback = callback; + } + + void RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) + { + mPageLoadFinishedCallback = callback; + } + + void RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback) + { + mPageLoadErrorCallback = callback; + } + + void RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback) + { + mScrollEdgeReachedCallback = callback; + } + + void RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback) + { + mUrlChangedCallback = callback; + } + + void RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback) + { + mFormRepostDecidedCallback = callback; + } + + void RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback) + { + mConsoleMessageCallback = callback; + } + + void RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback) + { + mResponsePolicyDecisionCallback = callback; + } + + void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback) + { + mNavigationPolicyDecisionCallback = callback; + } + + void RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback) + { + mCertificateConfirmCallback = callback; + } + + void RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback) + { + mSslCertificateChangedCallback = callback; + } + + void RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback) + { + mHttpAuthHandlerCallback = callback; + } + + void RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback) + { + mContextMenuShownCallback = callback; + } + + void RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback) + { + mContextMenuHiddenCallback = callback; + } + + void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback) + { + if (callback) + { + ConnectToGlobalSignal(&OnPlainTextReceived); + mPlainTextReceivedCallback = callback; + } + } + + std::string mUrl; + std::vector mHistory; + size_t mCurrentPlusOnePos; + std::string mUserAgent; + + Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType mFrameRenderedSignal; + + 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::WebEnginePageLoadCallback mPageLoadStartedCallback; + Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadInProgressCallback; + Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadFinishedCallback; + Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback mPageLoadErrorCallback; + Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback mScrollEdgeReachedCallback; + Dali::WebEnginePlugin::WebEngineUrlChangedCallback mUrlChangedCallback; + Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback mFormRepostDecidedCallback; + Dali::WebEnginePlugin::WebEngineFrameRenderedCallback mFrameRenderedCallback; + Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback mConsoleMessageCallback; + Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback mResponsePolicyDecisionCallback; + Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback mNavigationPolicyDecisionCallback; + Dali::WebEnginePlugin::WebEngineCertificateCallback mCertificateConfirmCallback; + Dali::WebEnginePlugin::WebEngineCertificateCallback mSslCertificateChangedCallback; + Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback mHttpAuthHandlerCallback; + Dali::WebEnginePlugin::WebEngineContextMenuShownCallback mContextMenuShownCallback; + Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback mContextMenuHiddenCallback; + Dali::WebEnginePlugin::JavaScriptAlertCallback mJavaScriptAlertCallback; + Dali::WebEnginePlugin::JavaScriptConfirmCallback mJavaScriptConfirmCallback; + Dali::WebEnginePlugin::JavaScriptPromptCallback mJavaScriptPromptCallback; + Dali::WebEnginePlugin::ScreenshotCapturedCallback mScreenshotCapturedCallback; + Dali::WebEnginePlugin::VideoPlayingCallback mVideoPlayingCallback; + Dali::WebEnginePlugin::GeolocationPermissionCallback mGeolocationPermissionCallback; + Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback mHitTestCreatedCallback; + Dali::WebEnginePlugin::PlainTextReceivedCallback mPlainTextReceivedCallback; +}; + + +namespace +{ + +bool OnGoBack() +{ + DisconnectFromGlobalSignal( &OnGoBack ); + + if( gInstance && gInstance->CanGoBack() ) + { + gInstance->mCurrentPlusOnePos--; + } + return false; +} + +bool OnGoForward() +{ + DisconnectFromGlobalSignal( &OnGoForward ); + + if( gInstance && gInstance->CanGoForward() ) + { + gInstance->mCurrentPlusOnePos++; + } + return false; +} + +bool OnLoadUrl() +{ + DisconnectFromGlobalSignal( &OnLoadUrl ); + + if( gInstance ) + { + if( gInstance->mHistory.size() > gInstance->mCurrentPlusOnePos ) + { + gInstance->mHistory.erase( gInstance->mHistory.begin() + gInstance->mCurrentPlusOnePos, gInstance->mHistory.end() ); + } + gInstance->mHistory.push_back( gInstance->mUrl ); + gInstance->mCurrentPlusOnePos++; + if (gInstance->mPageLoadStartedCallback) + { + gInstance->mPageLoadStartedCallback( gInstance->mUrl ); + } + if (gInstance->mPageLoadInProgressCallback) + { + gInstance->mPageLoadInProgressCallback( gInstance->mUrl ); + } + if (gInstance->mPageLoadFinishedCallback) + { + gInstance->mPageLoadFinishedCallback( gInstance->mUrl ); + } + if (gInstance->mPageLoadErrorCallback) + { + std::unique_ptr error(new MockWebEngineLoadError(gInstance->mUrl)); + gInstance->mPageLoadErrorCallback(std::move(error)); + } + if (gInstance->mUrlChangedCallback) + { + gInstance->mUrlChangedCallback( "http://new-test" ); + } + if (gInstance->mFormRepostDecidedCallback) + { + std::unique_ptr repostDecision(new MockWebEngineFormRepostDecision()); + gInstance->mFormRepostDecidedCallback(std::move(repostDecision)); + } + gInstance->mFrameRenderedSignal.Emit(); + if (gInstance->mFrameRenderedCallback) + { + gInstance->mFrameRenderedCallback(); + } + if (gInstance->mConsoleMessageCallback) + { + std::unique_ptr message(new MockWebEngineConsoleMessage()); + gInstance->mConsoleMessageCallback(std::move(message)); + } + if (gInstance->mResponsePolicyDecisionCallback) + { + std::unique_ptr policyDecision(new MockWebEnginePolicyDecision()); + gInstance->mResponsePolicyDecisionCallback(std::move(policyDecision)); + } + if (gInstance->mNavigationPolicyDecisionCallback) + { + std::unique_ptr policyDecision(new MockWebEnginePolicyDecision()); + gInstance->mNavigationPolicyDecisionCallback(std::move(policyDecision)); + } + if (gInstance->mCertificateConfirmCallback) + { + std::unique_ptr certificate(new MockWebEngineCertificate()); + gInstance->mCertificateConfirmCallback(std::move(certificate)); + } + if (gInstance->mSslCertificateChangedCallback) + { + std::unique_ptr sslCertificate(new MockWebEngineCertificate()); + gInstance->mSslCertificateChangedCallback(std::move(sslCertificate)); + } + if (gInstance->mHttpAuthHandlerCallback) + { + std::unique_ptr handler(new MockWebEngineHttpAuthHandler()); + gInstance->mHttpAuthHandlerCallback(std::move(handler)); + } + if (gInstance->mContextMenuShownCallback) + { + std::unique_ptr menu(new MockWebEngineContextMenu()); + gInstance->mContextMenuShownCallback(std::move(menu)); + } + if (gInstance->mContextMenuHiddenCallback) + { + std::unique_ptr hiddenMenu(new MockWebEngineContextMenu()); + gInstance->mContextMenuHiddenCallback(std::move(hiddenMenu)); + } + } + return false; +} + +bool OnScrollEdge() +{ + DisconnectFromGlobalSignal( &OnScrollEdge ); + + if( gInstance && gInstance->mScrollEdgeReachedCallback ) + { + gInstance->mScrollEdgeReachedCallback( Dali::WebEnginePlugin::ScrollEdge::BOTTOM ); + } + + return false; +} + +bool OnEvaluteJavaScript() +{ + DisconnectFromGlobalSignal( &OnEvaluteJavaScript ); + + if( gInstance ) + { + for( auto& func : gInstance->mResultCallbacks ) + { + func("undefined"); + } + gInstance->mResultCallbacks.clear(); + } + 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 OnHitTestCreated() +{ + DisconnectFromGlobalSignal(&OnHitTestCreated); + if (gInstance) + { + std::unique_ptr test(new MockWebEngineHitTest()); + gInstance->mHitTestCreatedCallback(std::move(test)); + } + return false; +} + +bool OnClearHistory() +{ + DisconnectFromGlobalSignal( &OnClearHistory ); + + if( gInstance && gInstance->mCurrentPlusOnePos ) { - return mPageLoadStartedSignal; + std::string url = gInstance->mHistory[ gInstance->mCurrentPlusOnePos - 1 ]; + std::vector< std::string >().swap( gInstance->mHistory ); + gInstance->mHistory.push_back( url ); + gInstance->mCurrentPlusOnePos = 1; } + return false; +} - Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadFinishedSignal() +bool OnSecurityOriginAcquired() +{ + DisconnectFromGlobalSignal(&OnSecurityOriginAcquired); + if (gWebEngineContextInstance) { - return mPageLoadFinishedSignal; + std::vector> securityOriginList; + std::unique_ptr origin(new MockWebEngineSecurityOrigin()); + securityOriginList.push_back(std::move(origin)); + gWebEngineContextInstance->mSecurityOriginAcquiredCallback(securityOriginList); } + return false; +} - Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& PageLoadErrorSignal() +bool OnStorageUsageAcquired() +{ + DisconnectFromGlobalSignal(&OnStorageUsageAcquired); + if (gWebEngineContextInstance) { - return mPageLoadErrorSignal; + gWebEngineContextInstance->mStorageUsageAcquiredCallback(0); } + return false; +} - Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& ScrollEdgeReachedSignal() +bool OnFormPasswordAcquired() +{ + DisconnectFromGlobalSignal(&OnFormPasswordAcquired); + if (gWebEngineContextInstance) { - return mScrollEdgeReachedSignal; + std::vector> formPasswordList; + std::unique_ptr data(new Dali::WebEngineContext::PasswordData()); + data->url = "http://test.html"; + data->useFingerprint = false; + formPasswordList.push_back(std::move(data)); + gWebEngineContextInstance->mFormPasswordAcquiredCallback(formPasswordList); } - - 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; -}; - -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 ); + return false; } -inline const WebEngine& GetImplementation( const Dali::WebEngine& webEngine ) +bool OnDownloadStarted() { - DALI_ASSERT_ALWAYS( webEngine && "WebEngine handle is empty." ); - const BaseObject& handle = webEngine.GetBaseObject(); - return static_cast< const Internal::Adaptor::WebEngine& >( handle ); + DisconnectFromGlobalSignal(&OnDownloadStarted); + if (gWebEngineContextInstance) + { + gWebEngineContextInstance->mDownloadStartedCallback("http://test.html"); + } + return false; } -namespace -{ - -bool OnGoBack() +bool OnMimeOverridden() { - DisconnectFromGlobalSignal( &OnGoBack ); - - if( gInstance && gInstance->CanGoBack() ) + DisconnectFromGlobalSignal(&OnMimeOverridden); + if (gWebEngineContextInstance) { - gInstance->mCurrentPlusOnePos--; + std::string newMime; + gWebEngineContextInstance->mMimeOverriddenCallback("http://test.html", "txt/xml", newMime); } return false; } -bool OnGoForward() +bool OnRequestIntercepted() { - DisconnectFromGlobalSignal( &OnGoForward ); - - if( gInstance && gInstance->CanGoForward() ) + DisconnectFromGlobalSignal(&OnRequestIntercepted); + if (gWebEngineContextInstance) { - gInstance->mCurrentPlusOnePos++; + Dali::WebEngineRequestInterceptorPtr interceptor = new MockWebEngineRequestInterceptor(); + gWebEngineContextInstance->mRequestInterceptedCallback(interceptor); } return false; } -bool OnLoadUrl() +bool OnChangesWatch() { - DisconnectFromGlobalSignal( &OnLoadUrl ); + DisconnectFromGlobalSignal( &OnChangesWatch ); - if( gInstance ) + if ( gInstance ) { - if( gInstance->mHistory.size() > gInstance->mCurrentPlusOnePos ) + MockWebEngineCookieManager* temp = (MockWebEngineCookieManager *)(&(gInstance->GetCookieManager())); + if ( temp ) { - gInstance->mHistory.erase( gInstance->mHistory.begin() + gInstance->mCurrentPlusOnePos, gInstance->mHistory.end() ); + temp->mChangesWatchCallback(); } - gInstance->mHistory.push_back( gInstance->mUrl ); - gInstance->mCurrentPlusOnePos++; - gInstance->mPageLoadStartedSignal.Emit( gInstance->mUrl ); - gInstance->mPageLoadFinishedSignal.Emit( gInstance->mUrl ); } + return false; } -bool OnEvaluteJavaScript() +bool OnPlainTextReceived() { - DisconnectFromGlobalSignal( &OnEvaluteJavaScript ); - - if( gInstance ) + DisconnectFromGlobalSignal(&OnPlainTextReceived); + if (gInstance) { - for( auto& func : gInstance->mResultCallbacks ) - { - func("undefined"); - } - gInstance->mResultCallbacks.clear(); + std::string dummyResultText; + gInstance->mPlainTextReceivedCallback(dummyResultText); } return false; } -bool OnClearHistory() +} // namespace + +inline WebEngine& GetImplementation( Dali::WebEngine& webEngine ) { - DisconnectFromGlobalSignal( &OnClearHistory ); + DALI_ASSERT_ALWAYS( webEngine && "WebEngine handle is empty." ); + BaseObject& handle = webEngine.GetBaseObject(); + return static_cast< Internal::Adaptor::WebEngine& >( handle ); +} - if( gInstance && gInstance->mCurrentPlusOnePos ) { - std::string url = gInstance->mHistory[ gInstance->mCurrentPlusOnePos - 1 ]; - std::vector< std::string >().swap( gInstance->mHistory ); - gInstance->mHistory.push_back( url ); - gInstance->mCurrentPlusOnePos = 1; - } - return false; +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 } // namespace Adaptor } // namespace Internal - // Dali::WebEngine Implementation WebEngine::WebEngine() { @@ -411,7 +2020,11 @@ WebEngine WebEngine::DownCast( BaseHandle handle ) return WebEngine( dynamic_cast< Internal::Adaptor::WebEngine* >( handle.GetObjectPtr() ) ); } -void WebEngine::Create( int width, int height, const std::string& locale, const std::string& timezoneId ) +void WebEngine::Create( uint32_t width, uint32_t height, const std::string& locale, const std::string& timezoneId ) +{ +} + +void WebEngine::Create( uint32_t width, uint32_t height, uint32_t argc, char** argv ) { } @@ -419,31 +2032,76 @@ 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 ); } -const std::string& WebEngine::GetUrl() +std::string WebEngine::GetTitle() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetTitle(); +} + +Dali::PixelData WebEngine::GetFavicon() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetFavicon(); +} + +std::string WebEngine::GetUrl() const { return Internal::Adaptor::GetImplementation( *this ).GetUrl(); } -NativeImageInterfacePtr WebEngine::GetNativeImageSource() +NativeImageSourcePtr WebEngine::GetNativeImageSource() { Any source; Dali::NativeImageSourcePtr sourcePtr = Dali::NativeImageSource::New( source ); 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 +2114,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,40 +2171,101 @@ 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 ) +{ +} + +std::unique_ptr WebEngine::CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode) +{ + return Internal::Adaptor::GetImplementation(*this).CreateHitTest(x, y, mode); +} + +bool WebEngine::CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback) +{ + return Internal::Adaptor::GetImplementation(*this).CreateHitTestAsynchronously(x, y, mode, callback); +} + +void WebEngine::ClearAllTilesResources() +{ +} + void WebEngine::ClearHistory() { Internal::Adaptor::GetImplementation( *this ).ClearHistory(); } -void WebEngine::ClearCache() +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) +{ +} + +Accessibility::Address WebEngine::GetAccessibilityAddress() +{ + return Internal::Adaptor::GetImplementation(*this).GetAccessibilityAddress(); +} + +bool WebEngine::HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount) { + return true; } -void WebEngine::ClearCookies() +void WebEngine::AddDynamicCertificatePath(const std::string& host, const std::string& certPath) { } -Dali::WebEnginePlugin::CacheModel WebEngine::GetCacheModel() const +Dali::PixelData WebEngine::GetScreenshot(Dali::Rect viewArea, float scaleFactor) { - return Internal::Adaptor::GetImplementation( *this ).GetCacheModel(); + return Internal::Adaptor::GetImplementation( *this ).GetScreenshot(viewArea, scaleFactor); } -void WebEngine::SetCacheModel( Dali::WebEnginePlugin::CacheModel cacheModel ) +bool WebEngine::GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback) { - Internal::Adaptor::GetImplementation( *this ).SetCacheModel( cacheModel ); + return Internal::Adaptor::GetImplementation( *this ).GetScreenshotAsynchronously(viewArea, scaleFactor, callback); } -Dali::WebEnginePlugin::CookieAcceptPolicy WebEngine::GetCookieAcceptPolicy() const +bool WebEngine::CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback) { - return Internal::Adaptor::GetImplementation( *this ).GetCookieAcceptPolicy(); + return Internal::Adaptor::GetImplementation( *this ).CheckVideoPlayingAsynchronously(callback); } -void WebEngine::SetCookieAcceptPolicy( Dali::WebEnginePlugin::CookieAcceptPolicy policy ) +void WebEngine::RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback) { - Internal::Adaptor::GetImplementation( *this ).SetCookieAcceptPolicy( policy ); + Internal::Adaptor::GetImplementation( *this ).RegisterGeolocationPermissionCallback(callback); } -const std::string& WebEngine::GetUserAgent() const +std::string WebEngine::GetUserAgent() const { return Internal::Adaptor::GetImplementation( *this ).GetUserAgent(); } @@ -528,81 +2275,77 @@ void WebEngine::SetUserAgent( const std::string& userAgent ) Internal::Adaptor::GetImplementation( *this ).SetUserAgent( userAgent ); } -bool WebEngine::IsJavaScriptEnabled() const +void WebEngine::ScrollBy( int32_t dx, int32_t dy ) { - return Internal::Adaptor::GetImplementation( *this ).IsJavaScriptEnabled(); + Internal::Adaptor::GetImplementation( *this ).ScrollBy( dx, dy ); } -void WebEngine::EnableJavaScript( bool enabled ) +bool WebEngine::ScrollEdgeBy( int32_t dx, int32_t dy ) { - Internal::Adaptor::GetImplementation( *this ).EnableJavaScript( enabled ); + return Internal::Adaptor::GetImplementation( *this ).ScrollEdgeBy( dx, dy ); } -bool WebEngine::AreImagesAutomaticallyLoaded() const +void WebEngine::SetScrollPosition( int32_t x, int32_t y ) { - return Internal::Adaptor::GetImplementation( *this ).AreImagesAutomaticallyLoaded(); + Internal::Adaptor::GetImplementation( *this ).SetScrollPosition( x, y ); } -void WebEngine::LoadImagesAutomatically( bool automatic ) +Dali::Vector2 WebEngine::GetScrollPosition() const { - Internal::Adaptor::GetImplementation( *this ).LoadImagesAutomatically( automatic ); + return Internal::Adaptor::GetImplementation( *this ).GetScrollPosition(); } -const std::string& WebEngine::GetDefaultTextEncodingName() const +Dali::Vector2 WebEngine::GetScrollSize() const { - return Internal::Adaptor::GetImplementation( *this ).GetDefaultTextEncodingName(); + return Internal::Adaptor::GetImplementation( *this ).GetScrollSize(); } -void WebEngine::SetDefaultTextEncodingName( const std::string& defaultTextEncodingName ) +Dali::Vector2 WebEngine::GetContentSize() const { - Internal::Adaptor::GetImplementation( *this ).SetDefaultTextEncodingName( defaultTextEncodingName ); + return Internal::Adaptor::GetImplementation( *this ).GetContentSize(); } -int WebEngine::GetDefaultFontSize() const +void WebEngine::SetSize( uint32_t width, uint32_t height ) { - return Internal::Adaptor::GetImplementation( *this ).GetDefaultFontSize(); } -void WebEngine::SetDefaultFontSize( int defaultFontSize ) +void WebEngine::SetDocumentBackgroundColor(Dali::Vector4 color) { - Internal::Adaptor::GetImplementation( *this ).SetDefaultFontSize( defaultFontSize ); } -void WebEngine::ScrollBy( int dx, int dy ) +void WebEngine::ClearTilesWhenHidden(bool cleared) { - Internal::Adaptor::GetImplementation( *this ).ScrollBy( dx, dy ); } -void WebEngine::SetScrollPosition( int x, int y ) +void WebEngine::SetTileCoverAreaMultiplier(float multiplier) { - Internal::Adaptor::GetImplementation( *this ).SetScrollPosition( x, y ); } -void WebEngine::GetScrollPosition( int& x, int& y ) const +void WebEngine::EnableCursorByClient(bool enabled) { - Internal::Adaptor::GetImplementation( *this ).GetScrollPosition( x, y ); } -void WebEngine::GetScrollSize( int& w, int& h ) const +std::string WebEngine::GetSelectedText() const { - Internal::Adaptor::GetImplementation( *this ).GetScrollSize( w, h ); + return "test"; } -void WebEngine::GetContentSize( int& w, int& h ) const +bool WebEngine::SendTouchEvent( const TouchEvent& touch ) { - Internal::Adaptor::GetImplementation( *this ).GetContentSize( w, h ); + return true; } -void WebEngine::SetSize( int width, int height ) +bool WebEngine::SendKeyEvent( const KeyEvent& event ) { + return true; } -bool WebEngine::SendTouchEvent( const TouchEvent& touch ) +bool WebEngine::SendHoverEvent( const HoverEvent& event ) { return true; } -bool WebEngine::SendKeyEvent( const KeyEvent& event ) +bool WebEngine::SendWheelEvent( const WheelEvent& event ) { return true; } @@ -611,25 +2354,130 @@ void WebEngine::SetFocus( bool focused ) { } -Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadStartedSignal() +void WebEngine::SetPageZoomFactor(float zoomFactor) { - return Internal::Adaptor::GetImplementation( *this ).PageLoadStartedSignal(); + Internal::Adaptor::GetImplementation( *this ).SetPageZoomFactor(zoomFactor); } -Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadFinishedSignal() +float WebEngine::GetPageZoomFactor() const { - return Internal::Adaptor::GetImplementation( *this ).PageLoadFinishedSignal(); + return Internal::Adaptor::GetImplementation( *this ).GetPageZoomFactor(); } -Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& WebEngine::PageLoadErrorSignal() +void WebEngine::SetTextZoomFactor(float zoomFactor) { - return Internal::Adaptor::GetImplementation( *this ).PageLoadErrorSignal(); + Internal::Adaptor::GetImplementation( *this ).SetTextZoomFactor(zoomFactor); } -Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& WebEngine::ScrollEdgeReachedSignal() +float WebEngine::GetTextZoomFactor() const { - return Internal::Adaptor::GetImplementation( *this ).ScrollEdgeReachedSignal(); + return Internal::Adaptor::GetImplementation( *this ).GetTextZoomFactor(); } -} // namespace Dali; +float WebEngine::GetLoadProgressPercentage() const +{ + return Internal::Adaptor::GetImplementation( *this ).GetLoadProgressPercentage(); +} +void WebEngine::UpdateDisplayArea( Dali::Rect< int32_t > displayArea ) +{ +} + +void WebEngine::EnableVideoHole( bool enabled ) +{ +} + +void WebEngine::EnableMouseEvents( bool enabled ) +{ +} + +void WebEngine::EnableKeyEvents( bool enabled ) +{ +} + +Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& WebEngine::FrameRenderedSignal() +{ + return Internal::Adaptor::GetImplementation(*this).FrameRenderedSignal(); +} + +void WebEngine::RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadStartedCallback(callback); +} + +void WebEngine::RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadInProgressCallback(callback); +} + +void WebEngine::RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadFinishedCallback(callback); +} + +void WebEngine::RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadErrorCallback(callback); +} + +void WebEngine::RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterScrollEdgeReachedCallback(callback); +} + +void WebEngine::RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterUrlChangedCallback(callback); +} + +void WebEngine::RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterFormRepostDecidedCallback(callback); +} + +void WebEngine::RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterConsoleMessageReceivedCallback(callback); +} + +void WebEngine::RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterResponsePolicyDecidedCallback(callback); +} + +void WebEngine::RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback) +{ + Internal::Adaptor::GetImplementation(*this).RegisterNavigationPolicyDecidedCallback(callback); +} + +void WebEngine::RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterCertificateConfirmedCallback(callback); +} + +void WebEngine::RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterSslCertificateChangedCallback(callback); +} + +void WebEngine::RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterHttpAuthHandlerCallback(callback); +} + +void WebEngine::RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterContextMenuShownCallback(callback); +} + +void WebEngine::RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback) +{ + Internal::Adaptor::GetImplementation( *this ).RegisterContextMenuHiddenCallback(callback); +} + +void WebEngine::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback) +{ + Internal::Adaptor::GetImplementation(*this).GetPlainTextAsynchronously(callback); +} + +} // namespace Dali;