2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include "toolkit-timer.h"
20 #include <dali/devel-api/adaptor-framework/web-engine.h>
21 #include <dali/devel-api/adaptor-framework/web-engine-back-forward-list.h>
22 #include <dali/devel-api/adaptor-framework/web-engine-back-forward-list-item.h>
23 #include <dali/devel-api/adaptor-framework/web-engine-console-message.h>
24 #include <dali/devel-api/adaptor-framework/web-engine-context.h>
25 #include <dali/devel-api/adaptor-framework/web-engine-cookie-manager.h>
26 #include <dali/devel-api/adaptor-framework/web-engine-form-repost-decision.h>
27 #include <dali/devel-api/adaptor-framework/web-engine-request-interceptor.h>
28 #include <dali/devel-api/adaptor-framework/web-engine-load-error.h>
29 #include <dali/devel-api/adaptor-framework/web-engine-settings.h>
30 #include <dali/public-api/adaptor-framework/native-image-source.h>
31 #include <dali/public-api/images/pixel-data.h>
32 #include <dali/public-api/object/any.h>
33 #include <dali/public-api/object/base-object.h>
36 #include <toolkit-application.h>
52 // Generally only one WebEngine instance exists.
53 // If > 1, a new web engine has been created by CreateWindowSignal.
54 static WebEngine* gInstance = 0;
55 static int gInstanceCount = 0;
60 bool OnEvaluteJavaScript();
61 bool OnJavaScriptAlert();
62 bool OnJavaScriptConfirm();
63 bool OnJavaScriptPrompt();
65 bool OnScreenshotCaptured();
66 bool OnVideoPlaying();
67 bool OnGeolocationPermission();
68 bool OnClearHistory();
70 static void ConnectToGlobalSignal( bool ( *func )() )
72 Dali::Timer timer = Dali::Timer::New( 0 );
73 timer.TickSignal().Connect( func );
76 static void DisconnectFromGlobalSignal( bool ( *func )() )
78 Dali::Timer timer = Dali::Timer::New( 0 );
79 timer.TickSignal().Disconnect( func );
81 } // namespace anonymous
83 class MockWebEngineContext : public Dali::WebEngineContext
86 MockWebEngineContext()
87 : mockModel( Dali::WebEngineContext::CacheModel::DOCUMENT_VIEWER )
91 Dali::WebEngineContext::CacheModel GetCacheModel() const override
96 void SetCacheModel( Dali::WebEngineContext::CacheModel cacheModel ) override
98 mockModel = cacheModel;
101 void SetProxyUri( const std::string& uri ) override
105 void SetDefaultProxyAuth( const std::string& username, const std::string& password ) override
109 void SetCertificateFilePath( const std::string& certificatePath ) override
113 void DeleteWebDatabase() override
117 void DeleteWebStorage() override
121 void DeleteLocalFileSystem() override
125 void DisableCache( bool cacheDisabled ) override
129 void ClearCache() override
134 Dali::WebEngineContext::CacheModel mockModel;
137 class MockWebEngineCookieManager : public Dali::WebEngineCookieManager
140 MockWebEngineCookieManager()
141 : mockCookieAcceptPolicy( Dali::WebEngineCookieManager::CookieAcceptPolicy::NO_THIRD_PARTY )
145 void SetCookieAcceptPolicy( Dali::WebEngineCookieManager::CookieAcceptPolicy policy ) override
147 mockCookieAcceptPolicy = policy;
150 Dali::WebEngineCookieManager::CookieAcceptPolicy GetCookieAcceptPolicy() const override
152 return mockCookieAcceptPolicy;
155 void ClearCookies() override
159 void SetPersistentStorage( const std::string& path, Dali::WebEngineCookieManager::CookiePersistentStorage storage ) override
164 Dali::WebEngineCookieManager::CookieAcceptPolicy mockCookieAcceptPolicy;
167 class MockWebEngineBackForwardListItem : public Dali::WebEngineBackForwardListItem
170 MockWebEngineBackForwardListItem()
171 : mockUrl( "http://url" ),
172 mockTitle( "title" ),
173 mockOriginalUrl( "http://originalurl" )
177 std::string GetUrl() const override
182 std::string GetTitle() const override
187 std::string GetOriginalUrl() const override
189 return mockOriginalUrl;
194 std::string mockTitle;
195 std::string mockOriginalUrl;
198 class MockWebEngineBackForwardList : public Dali::WebEngineBackForwardList
201 MockWebEngineBackForwardList()
203 pMockItem( &mockItem )
207 Dali::WebEngineBackForwardListItem& GetCurrentItem() const override
212 Dali::WebEngineBackForwardListItem& GetItemAtIndex( uint32_t index ) const override
217 uint32_t GetItemCount() const override
223 MockWebEngineBackForwardListItem mockItem;
224 WebEngineBackForwardListItem* pMockItem;
227 class MockWebEngineFormRepostDecision : public WebEngineFormRepostDecision
230 MockWebEngineFormRepostDecision()
234 void Reply(bool allowed) override {}
237 class MockWebEngineRequestInterceptor : public WebEngineRequestInterceptor
240 MockWebEngineRequestInterceptor()
244 std::string GetUrl() const override
246 return "http://test.html";
249 bool Ignore() override
254 bool SetResponseStatus(int statusCode, const std::string &customedStatusText) override
259 bool AddResponseHeader(const std::string &fieldName, const std::string &fieldValue) override
264 bool AddResponseBody(const std::string &body, uint32_t length) override
270 class MockWebEngineConsoleMessage : public Dali::WebEngineConsoleMessage
273 MockWebEngineConsoleMessage()
277 std::string GetSource() const override
282 uint32_t GetLine() const override
287 SeverityLevel GetSeverityLevel() const override
289 return SeverityLevel::EMPTY;
292 std::string GetText() const override
294 return "This is a text.";
298 class MockWebEngineLoadError : public Dali::WebEngineLoadError
301 MockWebEngineLoadError(const std::string& url)
306 std::string GetUrl() const override
311 ErrorCode GetCode() const override
313 return ErrorCode::UNKNOWN;
316 std::string GetDescription() const override
318 return "This is an error.";
321 ErrorType GetType() const override
323 return ErrorType::NONE;
330 class MockWebEngineSettings : public WebEngineSettings
333 MockWebEngineSettings()
334 : mockDefaultFontSize( 16 ),
335 mockJavaScriptEnabled( true ),
336 mockAutoFittingEnabled ( true ),
337 mockPluginsEnabled ( true ),
338 mockPrivateBrowsingEnabled( true ),
339 mockLinkMagnifierEnabled( true ),
340 mockKeypadWithoutUserActionUsed( true ),
341 mockAutofillPasswordFormEnabled( true ),
342 mockFormCandidateDataEnabled( true ),
343 mockTextSelectionEnabled( true ),
344 mockTextAutosizingEnable( true ),
345 mockArrowScrollEnable( true ),
346 mockClipboardEnabled( true ),
347 mockImePanelEnabled( true ),
348 mockImageLoadedAutomatically( true ),
349 mockDefaultTextEncodingName()
353 uint32_t GetDefaultFontSize() const override
355 return mockDefaultFontSize;
358 void SetDefaultFontSize( uint32_t size ) override
360 mockDefaultFontSize = size;
363 bool IsJavaScriptEnabled() const override
365 return mockJavaScriptEnabled;
368 void EnableJavaScript( bool enabled ) override
370 mockJavaScriptEnabled = enabled;
373 bool IsAutoFittingEnabled() const override
375 return mockAutoFittingEnabled;
378 void EnableAutoFitting( bool enabled ) override
380 mockAutoFittingEnabled = enabled;
383 bool ArePluginsEnabled() const override
385 return mockPluginsEnabled;
388 void EnablePlugins( bool enabled ) override
390 mockPluginsEnabled = enabled;
393 bool IsPrivateBrowsingEnabled() const override
395 return mockPrivateBrowsingEnabled;
398 void EnablePrivateBrowsing( bool enabled ) override
400 mockPrivateBrowsingEnabled = enabled;
403 bool IsLinkMagnifierEnabled() const override
405 return mockLinkMagnifierEnabled;
408 void EnableLinkMagnifier( bool enabled ) override
410 mockLinkMagnifierEnabled = enabled;
413 bool IsKeypadWithoutUserActionUsed() const override
415 return mockKeypadWithoutUserActionUsed;
418 void UseKeypadWithoutUserAction( bool used ) override
420 mockKeypadWithoutUserActionUsed = used;
423 bool IsAutofillPasswordFormEnabled() const override
425 return mockAutofillPasswordFormEnabled;
428 void EnableAutofillPasswordForm( bool enabled ) override
430 mockAutofillPasswordFormEnabled = enabled;
433 bool IsFormCandidateDataEnabled() const override
435 return mockFormCandidateDataEnabled;
438 void EnableFormCandidateData( bool enabled ) override
440 mockFormCandidateDataEnabled = enabled;
443 bool IsTextSelectionEnabled() const override
445 return mockTextSelectionEnabled;
448 void EnableTextSelection( bool enabled ) override
450 mockTextSelectionEnabled = enabled;
453 bool IsTextAutosizingEnabled() const override
455 return mockTextAutosizingEnable;
458 void EnableTextAutosizing( bool enabled ) override
460 mockTextAutosizingEnable = enabled;
463 bool IsArrowScrollEnabled() const override
465 return mockArrowScrollEnable;
468 void EnableArrowScroll( bool enabled ) override
470 mockArrowScrollEnable = enabled;
473 bool IsClipboardEnabled() const override
475 return mockClipboardEnabled;
478 void EnableClipboard( bool enabled ) override
480 mockClipboardEnabled = enabled;
483 bool IsImePanelEnabled() const override
485 return mockImePanelEnabled;
488 void EnableImePanel( bool enabled ) override
490 mockImePanelEnabled = enabled;
493 bool AreImagesLoadedAutomatically() const override
495 return mockImageLoadedAutomatically;
498 void AllowImagesLoadAutomatically( bool automatic ) override
500 mockImageLoadedAutomatically = automatic;
503 std::string GetDefaultTextEncodingName() const override
505 return mockDefaultTextEncodingName;
508 void SetDefaultTextEncodingName( const std::string& defaultTextEncodingName ) override
510 mockDefaultTextEncodingName = defaultTextEncodingName;
513 void AllowMixedContents( bool allowed ) override
517 void EnableSpatialNavigation( bool enabled ) override
521 void EnableWebSecurity( bool enabled ) override
525 void EnableCacheBuilder( bool enabled ) override
529 void UseScrollbarThumbFocusNotifications( bool used ) override
533 void EnableDoNotTrack( bool enabled ) override
537 void AllowFileAccessFromExternalUrl( bool allowed ) override
541 void AllowScriptsOpenWindows( bool allowed ) override
546 int mockDefaultFontSize;
547 bool mockJavaScriptEnabled;
548 bool mockAutoFittingEnabled;
549 bool mockPluginsEnabled;
550 bool mockPrivateBrowsingEnabled;
551 bool mockLinkMagnifierEnabled;
552 bool mockKeypadWithoutUserActionUsed;
553 bool mockAutofillPasswordFormEnabled;
554 bool mockFormCandidateDataEnabled;
555 bool mockTextSelectionEnabled;
556 bool mockTextAutosizingEnable;
557 bool mockArrowScrollEnable;
558 bool mockClipboardEnabled;
559 bool mockImePanelEnabled;
560 bool mockImageLoadedAutomatically;
561 std::string mockDefaultTextEncodingName;
564 class WebEngine: public Dali::BaseObject
568 using JavaScriptEvaluatedResultCallback = std::function<void(const std::string&)>;
572 , mCurrentPlusOnePos( 0 )
574 , mEvaluating( false )
575 , mScrollPosition( 0, 0 )
576 , mScrollSize( 500, 500 )
577 , mContentSize( 500, 500 )
580 if ( gInstanceCount == 1 ) // only first web engine need be saved.
585 mockWebEngineSettings = new MockWebEngineSettings();
586 mockWebEngineContext = new MockWebEngineContext();
587 mockWebEngineCookieManager = new MockWebEngineCookieManager();
588 mockWebEngineBackForwardList = new MockWebEngineBackForwardList();
594 if( !gInstanceCount )
599 delete mockWebEngineSettings;
600 delete mockWebEngineContext;
601 delete mockWebEngineCookieManager;
602 delete mockWebEngineBackForwardList;
605 Dali::WebEngineSettings& GetSettings() const
607 return *mockWebEngineSettings;
610 Dali::WebEngineContext& GetContext() const
612 return *mockWebEngineContext;
615 Dali::WebEngineCookieManager& GetCookieManager() const
617 return *mockWebEngineCookieManager;
620 Dali::WebEngineBackForwardList& GetBackForwardList() const
622 return *mockWebEngineBackForwardList;
625 void LoadUrl( const std::string& url )
628 ConnectToGlobalSignal( &OnLoadUrl );
631 const std::string& GetUrl() const
636 std::string GetTitle() const
638 return std::string("title");
641 Dali::PixelData GetFavicon() const
643 uint8_t* faviconData = new uint8_t[ 16 ];
645 faviconData[ 0 ] = 0xff;
646 faviconData[ 1 ] = 0x00;
647 faviconData[ 2 ] = 0x00;
648 faviconData[ 3 ] = 0xff;
649 faviconData[ 4 ] = 0xff;
650 faviconData[ 5 ] = 0x00;
651 faviconData[ 6 ] = 0x00;
652 faviconData[ 7 ] = 0xff;
653 faviconData[ 8 ] = 0xff;
654 faviconData[ 9 ] = 0x00;
655 faviconData[ 10 ] = 0x00;
656 faviconData[ 11 ] = 0xff;
657 faviconData[ 12 ] = 0xff;
658 faviconData[ 13 ] = 0x00;
659 faviconData[ 14 ] = 0x00;
660 faviconData[ 15 ] = 0xff;
662 return Dali::PixelData::New( faviconData, 16, 2, 2,
663 Dali::Pixel::Format::RGBA8888,
664 Dali::PixelData::ReleaseFunction::DELETE_ARRAY );
667 bool CanGoForward() const
669 return mHistory.size() > mCurrentPlusOnePos;
674 ConnectToGlobalSignal( &OnGoForward );
677 bool CanGoBack() const
679 return mCurrentPlusOnePos > 1;
684 ConnectToGlobalSignal( &OnGoBack );
687 void EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler )
693 ConnectToGlobalSignal( &OnEvaluteJavaScript );
695 mResultCallbacks.push_back( resultHandler );
699 void RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback )
703 ConnectToGlobalSignal( &OnJavaScriptAlert );
704 mJavaScriptAlertCallback = callback;
708 void RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback )
712 ConnectToGlobalSignal( &OnJavaScriptConfirm );
713 mJavaScriptConfirmCallback = callback;
717 void RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback )
721 ConnectToGlobalSignal( &OnJavaScriptPrompt );
722 mJavaScriptPromptCallback = callback;
728 ConnectToGlobalSignal( &OnClearHistory );
731 const std::string& GetUserAgent() const
736 void SetUserAgent( const std::string& userAgent )
738 mUserAgent = userAgent;
741 void ScrollBy( int dx, int dy )
743 mScrollPosition += Dali::Vector2( dx, dy );
744 if ( mScrollPosition.y + mScrollSize.height > mContentSize.height )
746 ConnectToGlobalSignal( &OnScrollEdge );
750 bool ScrollEdgeBy( int dx, int dy )
752 mScrollPosition += Dali::Vector2( dx, dy );
753 if ( mScrollPosition.y + mScrollSize.height > mContentSize.height )
755 ConnectToGlobalSignal( &OnScrollEdge );
760 void SetScrollPosition( int x, int y )
762 mScrollPosition.x = x;
763 mScrollPosition.y = y;
766 Dali::Vector2 GetScrollPosition() const
768 return mScrollPosition;
771 Dali::Vector2 GetScrollSize() const
776 Dali::Vector2 GetContentSize() const
781 void SetPageZoomFactor(float zoomFactor)
783 mPageZoomFactor = zoomFactor;
786 float GetPageZoomFactor() const
788 return mPageZoomFactor;
791 void SetTextZoomFactor(float zoomFactor)
793 mTextZoomFactor = zoomFactor;
796 float GetTextZoomFactor() const
798 return mTextZoomFactor;
801 float GetLoadProgressPercentage() const
806 void SetScaleFactor(float scaleFactor, Dali::Vector2 point)
808 mScaleFactor = scaleFactor;
811 float GetScaleFactor() const
816 Dali::PixelData GetScreenshot(Dali::Rect<int> viewArea, float scaleFactor)
818 uint32_t bufferSize = viewArea.width * viewArea.height * 4 ;
819 uint8_t* pixel = new uint8_t[ bufferSize ];
820 memset(pixel, 0xff, bufferSize);
821 return Dali::PixelData::New( pixel, bufferSize, viewArea.width, viewArea.height,
822 Dali::Pixel::Format::RGBA8888,
823 Dali::PixelData::ReleaseFunction::DELETE_ARRAY );
826 bool GetScreenshotAsynchronously(Dali::Rect<int> viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback)
830 ConnectToGlobalSignal( &OnScreenshotCaptured );
831 mScreenshotCapturedCallback = callback;
836 bool CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback)
840 ConnectToGlobalSignal( &OnVideoPlaying );
841 mVideoPlayingCallback = callback;
846 void RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback)
850 ConnectToGlobalSignal( &OnGeolocationPermission );
851 mGeolocationPermissionCallback = callback;
855 Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadStartedSignal()
857 return mPageLoadStartedSignal;
860 Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadInProgressSignal()
862 return mPageLoadInProgressSignal;
865 Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadFinishedSignal()
867 return mPageLoadFinishedSignal;
870 Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& PageLoadErrorSignal()
872 return mPageLoadErrorSignal;
875 Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& ScrollEdgeReachedSignal()
877 return mScrollEdgeReachedSignal;
880 Dali::WebEnginePlugin::WebEngineUrlChangedSignalType& UrlChangedSignal()
882 return mUrlChangedSignal;
885 Dali::WebEnginePlugin::WebEngineFormRepostDecisionSignalType& FormRepostDecisionSignal()
887 return mFormRepostDecisionSignal;
890 Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& FrameRenderedSignal()
892 return mFrameRenderedSignal;
895 Dali::WebEnginePlugin::WebEngineRequestInterceptorSignalType& RequestInterceptorSignal()
897 return mRequestInterceptorSignal;
900 Dali::WebEnginePlugin::WebEngineConsoleMessageSignalType& ConsoleMessageSignal()
902 return mConsoleMessageSignal;
906 std::vector<std::string> mHistory;
907 size_t mCurrentPlusOnePos;
908 std::string mUserAgent;
910 Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadStartedSignal;
911 Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadInProgressSignal;
912 Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadFinishedSignal;
913 Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType mPageLoadErrorSignal;
914 Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType mScrollEdgeReachedSignal;
915 Dali::WebEnginePlugin::WebEngineUrlChangedSignalType mUrlChangedSignal;
916 Dali::WebEnginePlugin::WebEngineFormRepostDecisionSignalType mFormRepostDecisionSignal;
917 Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType mFrameRenderedSignal;
918 Dali::WebEnginePlugin::WebEngineRequestInterceptorSignalType mRequestInterceptorSignal;
919 Dali::WebEnginePlugin::WebEngineConsoleMessageSignalType mConsoleMessageSignal;
922 float mPageZoomFactor;
923 float mTextZoomFactor;
926 Dali::Vector2 mScrollPosition;
927 Dali::Vector2 mScrollSize;
928 Dali::Vector2 mContentSize;
929 WebEngineBackForwardList* mockWebEngineBackForwardList;
930 WebEngineContext* mockWebEngineContext;
931 WebEngineCookieManager* mockWebEngineCookieManager;
932 WebEngineSettings* mockWebEngineSettings;
934 std::vector<JavaScriptEvaluatedResultCallback> mResultCallbacks;
935 Dali::WebEnginePlugin::JavaScriptAlertCallback mJavaScriptAlertCallback;
936 Dali::WebEnginePlugin::JavaScriptConfirmCallback mJavaScriptConfirmCallback;
937 Dali::WebEnginePlugin::JavaScriptPromptCallback mJavaScriptPromptCallback;
938 Dali::WebEnginePlugin::ScreenshotCapturedCallback mScreenshotCapturedCallback;
939 Dali::WebEnginePlugin::VideoPlayingCallback mVideoPlayingCallback;
940 Dali::WebEnginePlugin::GeolocationPermissionCallback mGeolocationPermissionCallback;
949 DisconnectFromGlobalSignal( &OnGoBack );
951 if( gInstance && gInstance->CanGoBack() )
953 gInstance->mCurrentPlusOnePos--;
960 DisconnectFromGlobalSignal( &OnGoForward );
962 if( gInstance && gInstance->CanGoForward() )
964 gInstance->mCurrentPlusOnePos++;
971 DisconnectFromGlobalSignal( &OnLoadUrl );
975 if( gInstance->mHistory.size() > gInstance->mCurrentPlusOnePos )
977 gInstance->mHistory.erase( gInstance->mHistory.begin() + gInstance->mCurrentPlusOnePos, gInstance->mHistory.end() );
979 gInstance->mHistory.push_back( gInstance->mUrl );
980 gInstance->mCurrentPlusOnePos++;
981 gInstance->mPageLoadStartedSignal.Emit( gInstance->mUrl );
982 gInstance->mPageLoadInProgressSignal.Emit( gInstance->mUrl );
983 gInstance->mPageLoadFinishedSignal.Emit( gInstance->mUrl );
984 gInstance->mUrlChangedSignal.Emit( "http://new-test" );
986 std::shared_ptr<Dali::WebEngineFormRepostDecision> decision(new MockWebEngineFormRepostDecision());
987 gInstance->mFormRepostDecisionSignal.Emit(std::move(decision));
988 gInstance->mFrameRenderedSignal.Emit();
989 std::shared_ptr<Dali::WebEngineRequestInterceptor> interceptor(new MockWebEngineRequestInterceptor());
990 gInstance->mRequestInterceptorSignal.Emit(std::move(interceptor));
992 std::shared_ptr<Dali::WebEngineLoadError> error(new MockWebEngineLoadError(gInstance->mUrl));
993 gInstance->mPageLoadErrorSignal.Emit(std::move(error));
994 std::shared_ptr<Dali::WebEngineConsoleMessage> message(new MockWebEngineConsoleMessage());
995 gInstance->mConsoleMessageSignal.Emit(std::move(message));
1002 DisconnectFromGlobalSignal( &OnScrollEdge );
1006 gInstance->mScrollEdgeReachedSignal.Emit( Dali::WebEnginePlugin::ScrollEdge::BOTTOM );
1012 bool OnEvaluteJavaScript()
1014 DisconnectFromGlobalSignal( &OnEvaluteJavaScript );
1018 for( auto& func : gInstance->mResultCallbacks )
1022 gInstance->mResultCallbacks.clear();
1027 bool OnJavaScriptAlert()
1029 DisconnectFromGlobalSignal( &OnJavaScriptAlert );
1032 gInstance->mJavaScriptAlertCallback( "this is an alert popup." );
1037 bool OnJavaScriptConfirm()
1039 DisconnectFromGlobalSignal( &OnJavaScriptConfirm );
1042 gInstance->mJavaScriptConfirmCallback( "this is a confirm popup." );
1047 bool OnJavaScriptPrompt()
1049 DisconnectFromGlobalSignal( &OnJavaScriptPrompt );
1052 gInstance->mJavaScriptPromptCallback( "this is a prompt pompt.", "" );
1057 bool OnScreenshotCaptured()
1059 DisconnectFromGlobalSignal( &OnScreenshotCaptured );
1062 uint8_t* pixel = new uint8_t[ 2 * 2 * 4 ];
1063 memset(pixel, 0xff, 2 * 2 * 4);
1064 Dali::PixelData data = Dali::PixelData::New( pixel, 2 * 2 * 4, 2, 2,
1065 Dali::Pixel::Format::RGBA8888,
1066 Dali::PixelData::ReleaseFunction::DELETE_ARRAY );
1067 gInstance->mScreenshotCapturedCallback( data );
1072 bool OnVideoPlaying()
1074 DisconnectFromGlobalSignal( &OnVideoPlaying );
1077 gInstance->mVideoPlayingCallback( true );
1082 bool OnGeolocationPermission()
1084 DisconnectFromGlobalSignal( &OnGeolocationPermission );
1087 gInstance->mGeolocationPermissionCallback( "", "" );
1092 bool OnClearHistory()
1094 DisconnectFromGlobalSignal( &OnClearHistory );
1096 if( gInstance && gInstance->mCurrentPlusOnePos )
1098 std::string url = gInstance->mHistory[ gInstance->mCurrentPlusOnePos - 1 ];
1099 std::vector< std::string >().swap( gInstance->mHistory );
1100 gInstance->mHistory.push_back( url );
1101 gInstance->mCurrentPlusOnePos = 1;
1108 inline WebEngine& GetImplementation( Dali::WebEngine& webEngine )
1110 DALI_ASSERT_ALWAYS( webEngine && "WebEngine handle is empty." );
1111 BaseObject& handle = webEngine.GetBaseObject();
1112 return static_cast< Internal::Adaptor::WebEngine& >( handle );
1115 inline const WebEngine& GetImplementation( const Dali::WebEngine& webEngine )
1117 DALI_ASSERT_ALWAYS( webEngine && "WebEngine handle is empty." );
1118 const BaseObject& handle = webEngine.GetBaseObject();
1119 return static_cast< const Internal::Adaptor::WebEngine& >( handle );
1122 } // namespace Adaptor
1124 } // namespace Internal
1126 // Dali::WebEngine Implementation
1127 WebEngine::WebEngine()
1131 WebEngine::WebEngine( Internal::Adaptor::WebEngine* internal )
1132 : BaseHandle( internal )
1136 WebEngine::~WebEngine()
1140 WebEngine WebEngine::New()
1142 Internal::Adaptor::WebEngine* baseObject = new Internal::Adaptor::WebEngine();
1144 return WebEngine( baseObject );
1147 WebEngine::WebEngine( const WebEngine& WebEngine )
1148 : BaseHandle( WebEngine )
1152 WebEngine& WebEngine::operator=( const WebEngine& webEngine )
1154 BaseHandle::operator=( webEngine );
1158 WebEngine WebEngine::DownCast( BaseHandle handle )
1160 return WebEngine( dynamic_cast< Internal::Adaptor::WebEngine* >( handle.GetObjectPtr() ) );
1163 void WebEngine::Create( int width, int height, const std::string& locale, const std::string& timezoneId )
1167 void WebEngine::Create( int width, int height, int argc, char** argv )
1171 void WebEngine::Destroy()
1175 WebEngineSettings& WebEngine::GetSettings() const
1177 return Internal::Adaptor::GetImplementation( *this ).GetSettings();
1180 WebEngineContext& WebEngine::GetContext() const
1182 return Internal::Adaptor::GetImplementation( *this ).GetContext();
1185 WebEngineCookieManager& WebEngine::GetCookieManager() const
1187 return Internal::Adaptor::GetImplementation( *this ).GetCookieManager();
1190 WebEngineBackForwardList& WebEngine::GetBackForwardList() const
1192 return Internal::Adaptor::GetImplementation( *this ).GetBackForwardList();
1195 void WebEngine::LoadUrl( const std::string& url )
1197 return Internal::Adaptor::GetImplementation( *this ).LoadUrl( url );
1200 std::string WebEngine::GetTitle() const
1202 return Internal::Adaptor::GetImplementation( *this ).GetTitle();
1205 Dali::PixelData WebEngine::GetFavicon() const
1207 return Internal::Adaptor::GetImplementation( *this ).GetFavicon();
1210 const std::string& WebEngine::GetUrl()
1212 return Internal::Adaptor::GetImplementation( *this ).GetUrl();
1215 NativeImageInterfacePtr WebEngine::GetNativeImageSource()
1218 Dali::NativeImageSourcePtr sourcePtr = Dali::NativeImageSource::New( source );
1222 void WebEngine::LoadHtmlString( const std::string& htmlString )
1226 bool WebEngine::LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl)
1231 bool WebEngine::LoadContents(const std::string& contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri)
1236 void WebEngine::Reload()
1240 bool WebEngine::ReloadWithoutCache()
1245 void WebEngine::StopLoading()
1249 void WebEngine::Suspend()
1253 void WebEngine::Resume()
1257 void WebEngine::SuspendNetworkLoading()
1261 void WebEngine::ResumeNetworkLoading()
1265 bool WebEngine::AddCustomHeader(const std::string& name, const std::string& value)
1270 bool WebEngine::RemoveCustomHeader(const std::string& name)
1275 uint32_t WebEngine::StartInspectorServer(uint32_t port)
1280 bool WebEngine::StopInspectorServer()
1285 bool WebEngine::CanGoForward()
1287 return Internal::Adaptor::GetImplementation( *this ).CanGoForward();
1290 void WebEngine::GoForward()
1292 Internal::Adaptor::GetImplementation( *this ).GoForward();
1295 bool WebEngine::CanGoBack()
1297 return Internal::Adaptor::GetImplementation( *this ).CanGoBack();
1300 void WebEngine::GoBack()
1302 Internal::Adaptor::GetImplementation( *this ).GoBack();
1305 void WebEngine::EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler )
1307 Internal::Adaptor::GetImplementation( *this ).EvaluateJavaScript( script, resultHandler );
1310 void WebEngine::AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void(const std::string&) > handler )
1314 void WebEngine::RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback )
1316 Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptAlertCallback( callback );
1319 void WebEngine::JavaScriptAlertReply()
1323 void WebEngine::RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback )
1325 Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptConfirmCallback( callback );
1328 void WebEngine::JavaScriptConfirmReply( bool confirmed )
1332 void WebEngine::RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback )
1334 Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptPromptCallback( callback );
1337 void WebEngine::JavaScriptPromptReply( const std::string& result )
1341 void WebEngine::ClearAllTilesResources()
1345 void WebEngine::ClearHistory()
1347 Internal::Adaptor::GetImplementation( *this ).ClearHistory();
1350 void WebEngine::SetScaleFactor(float scaleFactor, Dali::Vector2 point)
1352 Internal::Adaptor::GetImplementation( *this ).SetScaleFactor(scaleFactor, point);
1355 float WebEngine::GetScaleFactor() const
1357 return Internal::Adaptor::GetImplementation( *this ).GetScaleFactor();
1360 void WebEngine::ActivateAccessibility(bool activated)
1364 bool WebEngine::HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount)
1369 void WebEngine::AddDynamicCertificatePath(const std::string& host, const std::string& certPath)
1373 Dali::PixelData WebEngine::GetScreenshot(Dali::Rect<int> viewArea, float scaleFactor)
1375 return Internal::Adaptor::GetImplementation( *this ).GetScreenshot(viewArea, scaleFactor);
1378 bool WebEngine::GetScreenshotAsynchronously(Dali::Rect<int> viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback)
1380 return Internal::Adaptor::GetImplementation( *this ).GetScreenshotAsynchronously(viewArea, scaleFactor, callback);
1383 bool WebEngine::CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback)
1385 return Internal::Adaptor::GetImplementation( *this ).CheckVideoPlayingAsynchronously(callback);
1388 void WebEngine::RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback)
1390 Internal::Adaptor::GetImplementation( *this ).RegisterGeolocationPermissionCallback(callback);
1393 const std::string& WebEngine::GetUserAgent() const
1395 return Internal::Adaptor::GetImplementation( *this ).GetUserAgent();
1398 void WebEngine::SetUserAgent( const std::string& userAgent )
1400 Internal::Adaptor::GetImplementation( *this ).SetUserAgent( userAgent );
1403 void WebEngine::ScrollBy( int dx, int dy )
1405 Internal::Adaptor::GetImplementation( *this ).ScrollBy( dx, dy );
1408 bool WebEngine::ScrollEdgeBy( int dx, int dy )
1410 return Internal::Adaptor::GetImplementation( *this ).ScrollEdgeBy( dx, dy );
1413 void WebEngine::SetScrollPosition( int x, int y )
1415 Internal::Adaptor::GetImplementation( *this ).SetScrollPosition( x, y );
1418 Dali::Vector2 WebEngine::GetScrollPosition() const
1420 return Internal::Adaptor::GetImplementation( *this ).GetScrollPosition();
1423 Dali::Vector2 WebEngine::GetScrollSize() const
1425 return Internal::Adaptor::GetImplementation( *this ).GetScrollSize();
1428 Dali::Vector2 WebEngine::GetContentSize() const
1430 return Internal::Adaptor::GetImplementation( *this ).GetContentSize();
1433 void WebEngine::SetSize( int width, int height )
1437 void WebEngine::SetDocumentBackgroundColor(Dali::Vector4 color)
1441 void WebEngine::ClearTilesWhenHidden(bool cleared)
1445 void WebEngine::SetTileCoverAreaMultiplier(float multiplier)
1449 void WebEngine::EnableCursorByClient(bool enabled)
1453 std::string WebEngine::GetSelectedText() const
1458 bool WebEngine::SendTouchEvent( const TouchEvent& touch )
1463 bool WebEngine::SendKeyEvent( const KeyEvent& event )
1468 bool WebEngine::SendHoverEvent( const HoverEvent& event )
1473 bool WebEngine::SendWheelEvent( const WheelEvent& event )
1478 void WebEngine::SetFocus( bool focused )
1482 void WebEngine::SetPageZoomFactor(float zoomFactor)
1484 Internal::Adaptor::GetImplementation( *this ).SetPageZoomFactor(zoomFactor);
1487 float WebEngine::GetPageZoomFactor() const
1489 return Internal::Adaptor::GetImplementation( *this ).GetPageZoomFactor();
1492 void WebEngine::SetTextZoomFactor(float zoomFactor)
1494 Internal::Adaptor::GetImplementation( *this ).SetTextZoomFactor(zoomFactor);
1497 float WebEngine::GetTextZoomFactor() const
1499 return Internal::Adaptor::GetImplementation( *this ).GetTextZoomFactor();
1502 float WebEngine::GetLoadProgressPercentage() const
1504 return Internal::Adaptor::GetImplementation( *this ).GetLoadProgressPercentage();
1507 void WebEngine::UpdateDisplayArea( Dali::Rect< int > displayArea )
1511 void WebEngine::EnableVideoHole( bool enabled )
1515 void WebEngine::EnableMouseEvents( bool enabled )
1519 void WebEngine::EnableKeyEvents( bool enabled )
1523 Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadStartedSignal()
1525 return Internal::Adaptor::GetImplementation( *this ).PageLoadStartedSignal();
1528 Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadInProgressSignal()
1530 return Internal::Adaptor::GetImplementation( *this ).PageLoadInProgressSignal();
1533 Dali::WebEnginePlugin::WebEnginePageLoadSignalType& WebEngine::PageLoadFinishedSignal()
1535 return Internal::Adaptor::GetImplementation( *this ).PageLoadFinishedSignal();
1538 Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& WebEngine::PageLoadErrorSignal()
1540 return Internal::Adaptor::GetImplementation( *this ).PageLoadErrorSignal();
1543 Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& WebEngine::ScrollEdgeReachedSignal()
1545 return Internal::Adaptor::GetImplementation( *this ).ScrollEdgeReachedSignal();
1548 Dali::WebEnginePlugin::WebEngineUrlChangedSignalType& WebEngine::UrlChangedSignal()
1550 return Internal::Adaptor::GetImplementation( *this ).UrlChangedSignal();
1553 Dali::WebEnginePlugin::WebEngineFormRepostDecisionSignalType& WebEngine::FormRepostDecisionSignal()
1555 return Internal::Adaptor::GetImplementation( *this ).FormRepostDecisionSignal();
1558 Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& WebEngine::FrameRenderedSignal()
1560 return Internal::Adaptor::GetImplementation(*this).FrameRenderedSignal();
1563 Dali::WebEnginePlugin::WebEngineRequestInterceptorSignalType& WebEngine::RequestInterceptorSignal()
1565 return Internal::Adaptor::GetImplementation(*this).RequestInterceptorSignal();
1568 Dali::WebEnginePlugin::WebEngineConsoleMessageSignalType& WebEngine::ConsoleMessageSignal()
1570 return Internal::Adaptor::GetImplementation(*this).ConsoleMessageSignal();
1573 } // namespace Dali;