2 * Copyright (c) 2023 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/web-engine.h>
21 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-back-forward-list.h>
22 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-back-forward-list-item.h>
23 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-certificate.h>
24 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-console-message.h>
25 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-context.h>
26 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-context-menu.h>
27 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-context-menu-item.h>
28 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-cookie-manager.h>
29 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-form-repost-decision.h>
30 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-frame.h>
31 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-hit-test.h>
32 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-http-auth-handler.h>
33 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-load-error.h>
34 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-policy-decision.h>
35 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-request-interceptor.h>
36 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-security-origin.h>
37 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-settings.h>
38 #include <dali/public-api/adaptor-framework/native-image-source.h>
39 #include <dali/public-api/images/pixel-data.h>
40 #include <dali/public-api/object/any.h>
41 #include <dali/public-api/object/base-object.h>
42 #include <dali/public-api/object/property-map.h>
45 #include <toolkit-application.h>
57 class MockWebEngineContext;
58 class MockWebEngineCookieManager;
62 // Generally only one WebEngine instance exists.
63 // If > 1, a new web engine has been created by CreateWindowSignal.
64 WebEngine* gInstance = nullptr;
65 int gInstanceCount = 0;
66 MockWebEngineContext* gWebEngineContextInstance = nullptr;
67 MockWebEngineCookieManager* gMockWebEngineCookieManager = nullptr;
72 bool OnEvaluteJavaScript();
73 bool OnJavaScriptAlert();
74 bool OnJavaScriptConfirm();
75 bool OnJavaScriptPrompt();
76 bool OnHitTestCreated();
78 bool OnScreenshotCaptured();
79 bool OnVideoPlaying();
80 bool OnGeolocationPermission();
81 bool OnClearHistory();
82 bool OnSecurityOriginAcquired();
83 bool OnStorageUsageAcquired();
84 bool OnFormPasswordAcquired();
85 bool OnDownloadStarted();
86 bool OnMimeOverridden();
87 bool OnRequestIntercepted();
88 bool OnChangesWatch();
89 bool OnPlainTextReceived();
91 static void ConnectToGlobalSignal( bool ( *func )() )
93 Dali::Timer timer = Dali::Timer::New( 0 );
94 timer.TickSignal().Connect( func );
97 static void DisconnectFromGlobalSignal( bool ( *func )() )
99 Dali::Timer timer = Dali::Timer::New( 0 );
100 timer.TickSignal().Disconnect( func );
102 } // namespace anonymous
104 class MockWebEngineContext : public Dali::WebEngineContext
107 MockWebEngineContext()
108 : mockModel( Dali::WebEngineContext::CacheModel::DOCUMENT_VIEWER )
112 Dali::WebEngineContext::CacheModel GetCacheModel() const override
117 void SetCacheModel( Dali::WebEngineContext::CacheModel cacheModel ) override
119 mockModel = cacheModel;
122 void SetProxyUri( const std::string& uri ) override
127 std::string GetProxyUri() const override
132 void SetProxyBypassRule(const std::string& proxy, const std::string& bypass) override
134 mockBypassRule = bypass;
137 std::string GetProxyBypassRule() const override
139 return mockBypassRule;
142 void SetDefaultProxyAuth( const std::string& username, const std::string& password ) override
146 void SetCertificateFilePath( const std::string& certificatePath ) override
148 mockCertificateFilePath = certificatePath;
151 std::string GetCertificateFilePath() const override
153 return mockCertificateFilePath;
156 void DeleteAllWebDatabase() override
160 bool GetWebDatabaseOrigins(Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback callback) override
164 ConnectToGlobalSignal(&OnSecurityOriginAcquired);
165 mSecurityOriginAcquiredCallback = callback;
170 bool DeleteWebDatabase(Dali::WebEngineSecurityOrigin& origin) override
175 bool GetWebStorageOrigins(Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback callback) override
179 ConnectToGlobalSignal(&OnSecurityOriginAcquired);
180 mSecurityOriginAcquiredCallback = callback;
185 bool GetWebStorageUsageForOrigin(Dali::WebEngineSecurityOrigin& origin, Dali::WebEngineContext::WebEngineStorageUsageAcquiredCallback callback) override
189 ConnectToGlobalSignal(&OnStorageUsageAcquired);
190 mStorageUsageAcquiredCallback = callback;
195 void DeleteAllWebStorage() override
199 bool DeleteWebStorage(Dali::WebEngineSecurityOrigin& origin) override
204 void DeleteLocalFileSystem() override
208 void ClearCache() override
212 bool DeleteApplicationCache(Dali::WebEngineSecurityOrigin& origin) override
217 void GetFormPasswordList(Dali::WebEngineContext::WebEngineFormPasswordAcquiredCallback callback) override
221 ConnectToGlobalSignal(&OnFormPasswordAcquired);
222 mFormPasswordAcquiredCallback = callback;
226 void RegisterDownloadStartedCallback(Dali::WebEngineContext::WebEngineDownloadStartedCallback callback) override
230 ConnectToGlobalSignal(&OnDownloadStarted);
231 mDownloadStartedCallback = callback;
235 void RegisterMimeOverriddenCallback(Dali::WebEngineContext::WebEngineMimeOverriddenCallback callback) override
239 ConnectToGlobalSignal(&OnMimeOverridden);
240 mMimeOverriddenCallback = callback;
244 void RegisterRequestInterceptedCallback(Dali::WebEngineContext::WebEngineRequestInterceptedCallback callback) override
248 ConnectToGlobalSignal(&OnRequestIntercepted);
249 mRequestInterceptedCallback = callback;
253 void EnableCache( bool cacheEnabled ) override
255 mockCacheEnabled = cacheEnabled;
258 bool IsCacheEnabled() const override
260 return mockCacheEnabled;
263 void SetAppId(const std::string& appID) override
267 bool SetAppVersion(const std::string& appVersion) override
272 void SetApplicationType(const Dali::WebEngineContext::ApplicationType applicationType) override
276 void SetTimeOffset(float timeOffset) override
280 void SetTimeZoneOffset(float timeZoneOffset, float daylightSavingTime) override
284 void RegisterUrlSchemesAsCorsEnabled(const std::vector<std::string>& schemes) override
288 void RegisterJsPluginMimeTypes(const std::vector<std::string>& mimeTypes) override
292 void SetDefaultZoomFactor(float zoomFactor) override
294 mockZoomFactor = zoomFactor;
297 float GetDefaultZoomFactor() const override
299 return mockZoomFactor;
302 bool DeleteAllApplicationCache() override
307 bool DeleteAllWebIndexedDatabase() override
312 void DeleteFormPasswordDataList(const std::vector<std::string>& list) override
316 void DeleteAllFormPasswordData() override
320 void DeleteAllFormCandidateData() override
324 bool FreeUnusedMemory() override
330 Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback mSecurityOriginAcquiredCallback;
331 Dali::WebEngineContext::WebEngineStorageUsageAcquiredCallback mStorageUsageAcquiredCallback;
332 Dali::WebEngineContext::WebEngineFormPasswordAcquiredCallback mFormPasswordAcquiredCallback;
333 Dali::WebEngineContext::WebEngineDownloadStartedCallback mDownloadStartedCallback;
334 Dali::WebEngineContext::WebEngineMimeOverriddenCallback mMimeOverriddenCallback;
335 Dali::WebEngineContext::WebEngineRequestInterceptedCallback mRequestInterceptedCallback;
338 Dali::WebEngineContext::CacheModel mockModel;
339 std::string mockProxyUri;
340 std::string mockBypassRule;
341 std::string mockCertificateFilePath;
342 bool mockCacheEnabled;
343 float mockZoomFactor;
346 Dali::WebEngineContext* GetContext()
348 if (!gWebEngineContextInstance)
350 gWebEngineContextInstance = new MockWebEngineContext();
352 return gWebEngineContextInstance;
355 class MockWebEngineCookieManager : public Dali::WebEngineCookieManager
358 MockWebEngineCookieManager()
359 : mockCookieAcceptPolicy( Dali::WebEngineCookieManager::CookieAcceptPolicy::NO_THIRD_PARTY )
363 void SetCookieAcceptPolicy( Dali::WebEngineCookieManager::CookieAcceptPolicy policy ) override
365 mockCookieAcceptPolicy = policy;
368 Dali::WebEngineCookieManager::CookieAcceptPolicy GetCookieAcceptPolicy() const override
370 return mockCookieAcceptPolicy;
373 void ClearCookies() override
377 void SetPersistentStorage( const std::string& path, Dali::WebEngineCookieManager::CookiePersistentStorage storage ) override
381 void ChangesWatch( Dali::WebEngineCookieManager::WebEngineCookieManagerChangesWatchCallback callback ) override
385 ConnectToGlobalSignal( &OnChangesWatch );
386 mChangesWatchCallback = callback;
391 Dali::WebEngineCookieManager::WebEngineCookieManagerChangesWatchCallback mChangesWatchCallback;
394 Dali::WebEngineCookieManager::CookieAcceptPolicy mockCookieAcceptPolicy;
397 Dali::WebEngineCookieManager* GetCookieManager()
399 if (!gMockWebEngineCookieManager)
401 gMockWebEngineCookieManager = new MockWebEngineCookieManager();
403 return gMockWebEngineCookieManager;
406 class MockWebEngineBackForwardListItem : public Dali::WebEngineBackForwardListItem
409 MockWebEngineBackForwardListItem()
410 : mockUrl( "http://url" ),
411 mockTitle( "title" ),
412 mockOriginalUrl( "http://originalurl" )
416 std::string GetUrl() const override
421 std::string GetTitle() const override
426 std::string GetOriginalUrl() const override
428 return mockOriginalUrl;
433 std::string mockTitle;
434 std::string mockOriginalUrl;
437 class MockWebEngineBackForwardList : public Dali::WebEngineBackForwardList
440 MockWebEngineBackForwardList()
444 std::unique_ptr<Dali::WebEngineBackForwardListItem> GetCurrentItem() const override
446 std::unique_ptr<Dali::WebEngineBackForwardListItem> ret(new MockWebEngineBackForwardListItem());
450 std::unique_ptr<Dali::WebEngineBackForwardListItem> GetPreviousItem() const override
452 std::unique_ptr<Dali::WebEngineBackForwardListItem> ret(new MockWebEngineBackForwardListItem());
456 std::unique_ptr<Dali::WebEngineBackForwardListItem> GetNextItem() const override
458 std::unique_ptr<Dali::WebEngineBackForwardListItem> ret(new MockWebEngineBackForwardListItem());
462 std::unique_ptr<Dali::WebEngineBackForwardListItem> GetItemAtIndex( uint32_t index ) const override
464 std::unique_ptr<Dali::WebEngineBackForwardListItem> ret(new MockWebEngineBackForwardListItem());
468 uint32_t GetItemCount() const override
473 std::vector<std::unique_ptr<Dali::WebEngineBackForwardListItem>> GetBackwardItems(int limit) override
475 std::vector<std::unique_ptr<Dali::WebEngineBackForwardListItem>> ret;
476 std::unique_ptr<Dali::WebEngineBackForwardListItem> item(new MockWebEngineBackForwardListItem());
477 ret.push_back(std::move(item));
481 std::vector<std::unique_ptr<Dali::WebEngineBackForwardListItem>> GetForwardItems(int limit) override
483 std::vector<std::unique_ptr<Dali::WebEngineBackForwardListItem>> ret;
484 std::unique_ptr<Dali::WebEngineBackForwardListItem> item(new MockWebEngineBackForwardListItem());
485 ret.push_back(std::move(item));
490 class MockWebEngineCertificate : public Dali::WebEngineCertificate
493 MockWebEngineCertificate()
497 void Allow(bool allowed) override
501 bool IsFromMainFrame() const override
506 std::string GetPem() const override
511 bool IsContextSecure() const override
517 class MockWebEngineHttpAuthHandler : public Dali::WebEngineHttpAuthHandler
520 MockWebEngineHttpAuthHandler()
524 std::string GetRealm() const override
529 void Suspend() override
533 void UseCredential(const std::string& user, const std::string& password) override
537 void CancelCredential() override
542 class MockWebEngineFormRepostDecision : public WebEngineFormRepostDecision
545 MockWebEngineFormRepostDecision()
549 void Reply(bool allowed) override {}
552 class MockWebEngineFrame : public Dali::WebEngineFrame
559 bool IsMainFrame() const override
565 class MockWebEnginePolicyDecision : public Dali::WebEnginePolicyDecision
568 MockWebEnginePolicyDecision()
572 std::string GetUrl() const override
574 return "http://test.html";
577 std::string GetCookie() const override
582 Dali::WebEnginePolicyDecision::DecisionType GetDecisionType() const
584 return Dali::WebEnginePolicyDecision::DecisionType::USE;
587 std::string GetResponseMime() const
592 int32_t GetResponseStatusCode() const
597 Dali::WebEnginePolicyDecision::NavigationType GetNavigationType() const
599 return Dali::WebEnginePolicyDecision::NavigationType::LINK_CLICKED;
602 Dali::WebEngineFrame& GetFrame() const
604 return *(Dali::WebEngineFrame*)(&mockWebFrame);
607 std::string GetScheme() const
628 MockWebEngineFrame mockWebFrame;
631 class MockWebEngineConsoleMessage : public Dali::WebEngineConsoleMessage
634 MockWebEngineConsoleMessage()
638 std::string GetSource() const override
643 uint32_t GetLine() const override
648 SeverityLevel GetSeverityLevel() const override
650 return SeverityLevel::EMPTY;
653 std::string GetText() const override
655 return "This is a text.";
659 class MockWebEngineLoadError : public Dali::WebEngineLoadError
662 MockWebEngineLoadError(const std::string& url)
667 std::string GetUrl() const override
672 ErrorCode GetCode() const override
674 return ErrorCode::UNKNOWN;
677 std::string GetDescription() const override
679 return "This is an error.";
682 ErrorType GetType() const override
684 return ErrorType::NONE;
691 class MockWebEngineContextMenuItem : public Dali::WebEngineContextMenuItem
694 MockWebEngineContextMenuItem()
698 ItemTag GetTag() const override
700 return ItemTag::NO_ACTION;
703 ItemType GetType() const override
705 return ItemType::ACTION;
708 bool IsEnabled() const override
713 std::string GetLinkUrl() const override
715 return "http://test.html";
718 std::string GetImageUrl() const override
720 return "http://test.jpg";
723 std::string GetTitle() const override
728 std::unique_ptr<Dali::WebEngineContextMenu> GetParentMenu() const override
730 std::unique_ptr<Dali::WebEngineContextMenu> result;
735 class MockWebEngineContextMenu : public Dali::WebEngineContextMenu
738 MockWebEngineContextMenu()
742 uint32_t GetItemCount() const override
747 std::unique_ptr<Dali::WebEngineContextMenuItem> GetItemAt(uint32_t index) const override
749 std::unique_ptr<Dali::WebEngineContextMenuItem> webitem(new MockWebEngineContextMenuItem());
753 std::vector<std::unique_ptr<WebEngineContextMenuItem>> GetItemList() const override
755 std::vector<std::unique_ptr<WebEngineContextMenuItem>> result;
756 std::unique_ptr<Dali::WebEngineContextMenuItem> webitem(new MockWebEngineContextMenuItem());
757 result.push_back(std::move(webitem));
761 bool RemoveItem(WebEngineContextMenuItem& item) override
766 bool AppendItemAsAction(WebEngineContextMenuItem::ItemTag tag, const std::string& title, bool enabled) override
771 bool AppendItem(WebEngineContextMenuItem::ItemTag tag, const std::string& title, const std::string& iconFile, bool enabled) override
776 bool SelectItem(WebEngineContextMenuItem& item) override
787 class MockWebEngineHitTest : public Dali::WebEngineHitTest
790 MockWebEngineHitTest()
794 ResultContext GetResultContext() const override
796 return ResultContext::DOCUMENT;
799 std::string GetLinkUri() const override
801 return "http://test.html";
804 std::string GetLinkTitle() const override
809 std::string GetLinkLabel() const override
814 std::string GetImageUri() const override
816 return "http://test.jpg";
819 std::string GetMediaUri() const override
821 return "http://test.mp4";
824 std::string GetTagName() const override
829 std::string GetNodeValue() const override
834 Dali::Property::Map GetAttributes() const override
836 return mockAttributesMap;
839 std::string GetImageFileNameExtension() const override
844 Dali::PixelData GetImageBuffer() override
846 uint8_t* imageData = new uint8_t[16];
847 memset(imageData, 0xff, 16);
848 return Dali::PixelData::New(imageData, 16, 2, 2,
849 Dali::Pixel::Format::RGBA8888,
850 Dali::PixelData::ReleaseFunction::DELETE_ARRAY);
854 mutable Dali::Property::Map mockAttributesMap;
857 class MockWebEngineSecurityOrigin : public Dali::WebEngineSecurityOrigin
860 MockWebEngineSecurityOrigin()
861 : mockUrl("https://test.html")
862 , mockPotocol("https")
866 std::string GetHost() const
871 std::string GetProtocol() const
878 std::string mockPotocol;
881 class MockWebEngineSettings : public WebEngineSettings
884 MockWebEngineSettings()
885 : mockDefaultFontSize( 16 ),
886 mockJavaScriptEnabled( true ),
887 mockAutoFittingEnabled ( true ),
888 mockPluginsEnabled ( true ),
889 mockPrivateBrowsingEnabled( true ),
890 mockLinkMagnifierEnabled( true ),
891 mockKeypadWithoutUserActionUsed( true ),
892 mockAutofillPasswordFormEnabled( true ),
893 mockFormCandidateDataEnabled( true ),
894 mockTextSelectionEnabled( true ),
895 mockTextAutosizingEnable( true ),
896 mockArrowScrollEnable( true ),
897 mockClipboardEnabled( true ),
898 mockImePanelEnabled( true ),
899 mockImageLoadedAutomatically( true ),
900 mockDefaultTextEncodingName()
904 uint32_t GetDefaultFontSize() const override
906 return mockDefaultFontSize;
909 void SetDefaultFontSize( uint32_t size ) override
911 mockDefaultFontSize = size;
914 bool IsJavaScriptEnabled() const override
916 return mockJavaScriptEnabled;
919 void EnableJavaScript( bool enabled ) override
921 mockJavaScriptEnabled = enabled;
924 bool IsAutoFittingEnabled() const override
926 return mockAutoFittingEnabled;
929 void EnableAutoFitting( bool enabled ) override
931 mockAutoFittingEnabled = enabled;
934 bool ArePluginsEnabled() const override
936 return mockPluginsEnabled;
939 void EnablePlugins( bool enabled ) override
941 mockPluginsEnabled = enabled;
944 bool IsPrivateBrowsingEnabled() const override
946 return mockPrivateBrowsingEnabled;
949 void EnablePrivateBrowsing( bool enabled ) override
951 mockPrivateBrowsingEnabled = enabled;
954 bool IsLinkMagnifierEnabled() const override
956 return mockLinkMagnifierEnabled;
959 void EnableLinkMagnifier( bool enabled ) override
961 mockLinkMagnifierEnabled = enabled;
964 bool IsKeypadWithoutUserActionUsed() const override
966 return mockKeypadWithoutUserActionUsed;
969 void UseKeypadWithoutUserAction( bool used ) override
971 mockKeypadWithoutUserActionUsed = used;
974 bool IsAutofillPasswordFormEnabled() const override
976 return mockAutofillPasswordFormEnabled;
979 void EnableAutofillPasswordForm( bool enabled ) override
981 mockAutofillPasswordFormEnabled = enabled;
984 bool IsFormCandidateDataEnabled() const override
986 return mockFormCandidateDataEnabled;
989 void EnableFormCandidateData( bool enabled ) override
991 mockFormCandidateDataEnabled = enabled;
994 bool IsTextSelectionEnabled() const override
996 return mockTextSelectionEnabled;
999 void EnableTextSelection( bool enabled ) override
1001 mockTextSelectionEnabled = enabled;
1004 bool IsTextAutosizingEnabled() const override
1006 return mockTextAutosizingEnable;
1009 void EnableTextAutosizing( bool enabled ) override
1011 mockTextAutosizingEnable = enabled;
1014 bool IsArrowScrollEnabled() const override
1016 return mockArrowScrollEnable;
1019 void EnableArrowScroll( bool enabled ) override
1021 mockArrowScrollEnable = enabled;
1024 bool IsClipboardEnabled() const override
1026 return mockClipboardEnabled;
1029 void EnableClipboard( bool enabled ) override
1031 mockClipboardEnabled = enabled;
1034 bool IsImePanelEnabled() const override
1036 return mockImePanelEnabled;
1039 void EnableImePanel( bool enabled ) override
1041 mockImePanelEnabled = enabled;
1044 bool AreImagesLoadedAutomatically() const override
1046 return mockImageLoadedAutomatically;
1049 void AllowImagesLoadAutomatically( bool automatic ) override
1051 mockImageLoadedAutomatically = automatic;
1054 std::string GetDefaultTextEncodingName() const override
1056 return mockDefaultTextEncodingName;
1059 void SetDefaultTextEncodingName( const std::string& defaultTextEncodingName ) override
1061 mockDefaultTextEncodingName = defaultTextEncodingName;
1064 void AllowMixedContents( bool allowed ) override
1068 void EnableSpatialNavigation( bool enabled ) override
1072 void EnableWebSecurity( bool enabled ) override
1076 void EnableCacheBuilder( bool enabled ) override
1080 void UseScrollbarThumbFocusNotifications( bool used ) override
1084 void EnableDoNotTrack( bool enabled ) override
1088 void AllowFileAccessFromExternalUrl( bool allowed ) override
1092 void AllowScriptsOpenWindows( bool allowed ) override
1096 bool SetViewportMetaTag(bool enable) override
1101 bool SetForceZoom(bool enable) override
1106 bool IsZoomForced() const override
1111 bool SetTextZoomEnabled(bool enable) override
1116 bool IsTextZoomEnabled() const override
1121 void SetExtraFeature(const std::string& feature, bool enable) override
1125 bool IsExtraFeatureEnabled(const std::string& feature) const override
1131 int mockDefaultFontSize;
1132 bool mockJavaScriptEnabled;
1133 bool mockAutoFittingEnabled;
1134 bool mockPluginsEnabled;
1135 bool mockPrivateBrowsingEnabled;
1136 bool mockLinkMagnifierEnabled;
1137 bool mockKeypadWithoutUserActionUsed;
1138 bool mockAutofillPasswordFormEnabled;
1139 bool mockFormCandidateDataEnabled;
1140 bool mockTextSelectionEnabled;
1141 bool mockTextAutosizingEnable;
1142 bool mockArrowScrollEnable;
1143 bool mockClipboardEnabled;
1144 bool mockImePanelEnabled;
1145 bool mockImageLoadedAutomatically;
1146 std::string mockDefaultTextEncodingName;
1149 class MockWebEnginePlugin : public Dali::WebEnginePlugin
1152 MockWebEnginePlugin(){}
1153 void Create(uint32_t width, uint32_t height, const std::string& locale, const std::string& timezoneId) override {}
1154 void Create(uint32_t width, uint32_t height, uint32_t argc, char** argv) override {}
1155 void Destroy() override {}
1156 WebEngineSettings& GetSettings() const override { return *((WebEngineSettings*)&settings); }
1157 WebEngineBackForwardList& GetBackForwardList() const override { return *((WebEngineBackForwardList*)&backForwardList); }
1158 void LoadUrl(const std::string& url) override {}
1159 std::string GetTitle() const override { return std::string(); }
1160 Dali::PixelData GetFavicon() const override { return Dali::PixelData(); }
1161 NativeImageSourcePtr GetNativeImageSource() override { return nullptr; }
1162 std::string GetUrl() const override { return std::string(); }
1163 void LoadHtmlString(const std::string& htmlString) override {}
1164 bool LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl) override { return false; }
1165 bool LoadContents(const int8_t* contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri) override { return false; }
1166 void Reload() override {}
1167 bool ReloadWithoutCache() override { return false; }
1168 void StopLoading() override {}
1169 void Suspend() override {}
1170 void Resume() override {}
1171 void SuspendNetworkLoading() override {}
1172 void ResumeNetworkLoading() override {}
1173 bool AddCustomHeader(const std::string& name, const std::string& value) override { return false; }
1174 bool RemoveCustomHeader(const std::string& name) override { return false; }
1175 uint32_t StartInspectorServer(uint32_t port) override { return 0; }
1176 bool StopInspectorServer() override { return false; }
1177 void ScrollBy(int32_t deltaX, int32_t deltaY) override {}
1178 bool ScrollEdgeBy(int32_t deltaX, int32_t deltaY) override { return false; }
1179 void SetScrollPosition(int32_t x, int32_t y) override {}
1180 Dali::Vector2 GetScrollPosition() const override { return Dali::Vector2(); }
1181 Dali::Vector2 GetScrollSize() const override { return Dali::Vector2(); }
1182 Dali::Vector2 GetContentSize() const override { return Dali::Vector2(); }
1183 bool CanGoForward() override { return false; }
1184 void GoForward() override {}
1185 bool CanGoBack() override { return false; }
1186 void GoBack() override {}
1187 void EvaluateJavaScript(const std::string& script, JavaScriptMessageHandlerCallback resultHandler) override {}
1188 void AddJavaScriptMessageHandler(const std::string& exposedObjectName, JavaScriptMessageHandlerCallback handler) override {}
1189 void RegisterJavaScriptAlertCallback(JavaScriptAlertCallback callback) override {}
1190 void JavaScriptAlertReply() override {}
1191 void RegisterJavaScriptConfirmCallback(JavaScriptConfirmCallback callback) override {}
1192 void JavaScriptConfirmReply(bool confirmed) override {}
1193 void RegisterJavaScriptPromptCallback(JavaScriptPromptCallback callback) override {}
1194 void JavaScriptPromptReply(const std::string& result) override {}
1195 std::unique_ptr<Dali::WebEngineHitTest> CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode) override { return nullptr; }
1196 bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, WebEngineHitTestCreatedCallback callback) override { return false; }
1197 void ClearHistory() override {}
1198 void ClearAllTilesResources() override {}
1199 std::string GetUserAgent() const override { return std::string(); }
1200 void SetUserAgent(const std::string& userAgent) override {}
1201 void SetSize(uint32_t width, uint32_t height) override {}
1202 void SetDocumentBackgroundColor(Dali::Vector4 color) override {}
1203 void ClearTilesWhenHidden(bool cleared) override {}
1204 void SetTileCoverAreaMultiplier(float multiplier) override {}
1205 void EnableCursorByClient(bool enabled) override {}
1206 std::string GetSelectedText() const override { return std::string(); }
1207 bool SendTouchEvent(const TouchEvent& touch) override { return false; }
1208 bool SendKeyEvent(const KeyEvent& event) override { return false; }
1209 void EnableMouseEvents(bool enabled) override {}
1210 void EnableKeyEvents(bool enabled) override {}
1211 void SetFocus(bool focused) override {}
1212 void SetPageZoomFactor(float zoomFactor) override {}
1213 float GetPageZoomFactor() const override { return 0.0f; }
1214 void SetTextZoomFactor(float zoomFactor) override {}
1215 float GetTextZoomFactor() const override { return 0.0f; }
1216 float GetLoadProgressPercentage() const override { return 0.0f; }
1217 void SetScaleFactor(float scaleFactor, Dali::Vector2 point) override {}
1218 float GetScaleFactor() const override { return 0.0f; }
1219 void ActivateAccessibility(bool activated) override {}
1220 Accessibility::Address GetAccessibilityAddress() override { return Accessibility::Address(); }
1221 bool SetVisibility(bool visible) override { return false; }
1222 bool HighlightText(const std::string& text, FindOption options, uint32_t maxMatchCount) override { return false; }
1223 void AddDynamicCertificatePath(const std::string& host, const std::string& certPath) override {}
1224 Dali::PixelData GetScreenshot(Dali::Rect<int32_t> viewArea, float scaleFactor) override { return Dali::PixelData(); }
1225 bool GetScreenshotAsynchronously(Dali::Rect<int32_t> viewArea, float scaleFactor, ScreenshotCapturedCallback callback) override { return false; }
1226 bool CheckVideoPlayingAsynchronously(VideoPlayingCallback callback) override { return false; }
1227 void RegisterGeolocationPermissionCallback(GeolocationPermissionCallback callback) override {}
1228 void UpdateDisplayArea(Dali::Rect<int32_t> displayArea) override {}
1229 void EnableVideoHole(bool enabled) override {}
1230 bool SendHoverEvent(const HoverEvent& event) override { return false; }
1231 bool SendWheelEvent(const WheelEvent& event) override { return false; }
1232 void RegisterFrameRenderedCallback(WebEngineFrameRenderedCallback callback) override {}
1233 void RegisterPageLoadStartedCallback(WebEnginePageLoadCallback callback) override {}
1234 void RegisterPageLoadInProgressCallback(WebEnginePageLoadCallback callback) override {}
1235 void RegisterPageLoadFinishedCallback(WebEnginePageLoadCallback callback) override {}
1236 void RegisterPageLoadErrorCallback(WebEnginePageLoadErrorCallback callback) override {}
1237 void RegisterScrollEdgeReachedCallback(WebEngineScrollEdgeReachedCallback callback) override {}
1238 void RegisterUrlChangedCallback(WebEngineUrlChangedCallback callback) override {}
1239 void RegisterFormRepostDecidedCallback(WebEngineFormRepostDecidedCallback callback) override {}
1240 void RegisterConsoleMessageReceivedCallback(WebEngineConsoleMessageReceivedCallback callback) override {}
1241 void RegisterResponsePolicyDecidedCallback(WebEngineResponsePolicyDecidedCallback callback) override {}
1242 void RegisterNavigationPolicyDecidedCallback(WebEngineNavigationPolicyDecidedCallback callback) override {}
1243 void RegisterNewWindowCreatedCallback(WebEngineNewWindowCreatedCallback callback) override {}
1244 void RegisterCertificateConfirmedCallback(WebEngineCertificateCallback callback) override {}
1245 void RegisterSslCertificateChangedCallback(WebEngineCertificateCallback callback) override {}
1246 void RegisterHttpAuthHandlerCallback(WebEngineHttpAuthHandlerCallback callback) override {}
1247 void RegisterContextMenuShownCallback(WebEngineContextMenuShownCallback callback) override {}
1248 void RegisterContextMenuHiddenCallback(WebEngineContextMenuHiddenCallback callback) override {}
1249 void GetPlainTextAsynchronously(PlainTextReceivedCallback callback) override {}
1251 MockWebEngineSettings settings;
1252 MockWebEngineBackForwardList backForwardList;
1255 Dali::WebEnginePlugin* GetWebEnginePlugin()
1257 static MockWebEnginePlugin plugin;
1261 class MockWebEngineRequestInterceptor : public WebEngineRequestInterceptor
1264 MockWebEngineRequestInterceptor()
1268 Dali::WebEnginePlugin* GetWebEngine() const
1270 return GetWebEnginePlugin();
1273 std::string GetUrl() const override
1275 return "http://test.html";
1278 Dali::Property::Map GetHeaders() const override
1280 return mockHeadersMap;
1283 std::string GetMethod() const override
1288 bool Ignore() override
1293 bool SetResponseStatus(int statusCode, const std::string& customedStatusText) override
1298 bool AddResponseHeader(const std::string& fieldName, const std::string& fieldValue) override
1300 mockHeadersMap.Add(fieldName, fieldValue);
1304 bool AddResponseHeaders(const Dali::Property::Map& headers) override
1306 mockHeadersMap.Merge(headers);
1310 bool AddResponseBody(const int8_t* body, uint32_t length) override
1315 bool AddResponse(const std::string& headers, const int8_t* body, uint32_t length) override
1320 bool WriteResponseChunk(const int8_t* chunk, uint32_t length) override
1326 Dali::Property::Map mockHeadersMap;
1329 class WebEngine: public Dali::BaseObject
1335 , mCurrentPlusOnePos( 0 )
1337 , mEvaluating( false )
1338 , mScrollPosition( 0, 0 )
1339 , mScrollSize( 500, 500 )
1340 , mContentSize( 500, 500 )
1343 if ( gInstanceCount == 1 ) // only first web engine need be saved.
1348 mockWebEngineSettings = new MockWebEngineSettings();
1349 mockWebEngineBackForwardList = new MockWebEngineBackForwardList();
1352 virtual ~WebEngine()
1355 if( !gInstanceCount )
1357 gInstance = nullptr;
1360 delete mockWebEngineSettings;
1361 delete mockWebEngineBackForwardList;
1364 Dali::WebEngineSettings& GetSettings() const
1366 return *mockWebEngineSettings;
1369 Dali::WebEngineBackForwardList& GetBackForwardList() const
1371 return *mockWebEngineBackForwardList;
1374 void LoadUrl( const std::string& url )
1377 ConnectToGlobalSignal( &OnLoadUrl );
1380 std::string GetUrl() const
1385 std::string GetTitle() const
1387 return std::string("title");
1390 Dali::PixelData GetFavicon() const
1392 static int testGetFaviconCount = 0;
1393 if (testGetFaviconCount == 0)
1395 testGetFaviconCount++;
1396 uint8_t* faviconData = new uint8_t[16];
1397 memset(faviconData, 0xff, 16);
1398 return Dali::PixelData::New(faviconData, 16, 2, 2,
1399 Dali::Pixel::Format::RGBA8888,
1400 Dali::PixelData::ReleaseFunction::DELETE_ARRAY);
1404 return Dali::PixelData();
1408 bool CanGoForward() const
1410 return mHistory.size() > mCurrentPlusOnePos;
1415 ConnectToGlobalSignal( &OnGoForward );
1418 bool CanGoBack() const
1420 return mCurrentPlusOnePos > 1;
1425 ConnectToGlobalSignal( &OnGoBack );
1428 void EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler )
1434 ConnectToGlobalSignal( &OnEvaluteJavaScript );
1436 mResultCallbacks.push_back( resultHandler );
1440 void RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback )
1444 ConnectToGlobalSignal( &OnJavaScriptAlert );
1445 mJavaScriptAlertCallback = callback;
1449 void RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback )
1453 ConnectToGlobalSignal( &OnJavaScriptConfirm );
1454 mJavaScriptConfirmCallback = callback;
1458 void RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback )
1462 ConnectToGlobalSignal( &OnJavaScriptPrompt );
1463 mJavaScriptPromptCallback = callback;
1467 std::unique_ptr<Dali::WebEngineHitTest> CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode)
1469 std::unique_ptr<Dali::WebEngineHitTest> hitTest(new MockWebEngineHitTest());
1473 bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback)
1477 ConnectToGlobalSignal( &OnHitTestCreated );
1478 mHitTestCreatedCallback = callback;
1485 ConnectToGlobalSignal( &OnClearHistory );
1488 std::string GetUserAgent() const
1493 void SetUserAgent( const std::string& userAgent )
1495 mUserAgent = userAgent;
1498 void ScrollBy( int32_t dx, int32_t dy )
1500 mScrollPosition += Dali::Vector2( dx, dy );
1501 if ( mScrollPosition.y + mScrollSize.height > mContentSize.height )
1503 ConnectToGlobalSignal( &OnScrollEdge );
1507 bool ScrollEdgeBy( int32_t dx, int32_t dy )
1509 mScrollPosition += Dali::Vector2( dx, dy );
1510 if ( mScrollPosition.y + mScrollSize.height > mContentSize.height )
1512 ConnectToGlobalSignal( &OnScrollEdge );
1517 void SetScrollPosition( int32_t x, int32_t y )
1519 mScrollPosition.x = x;
1520 mScrollPosition.y = y;
1523 Dali::Vector2 GetScrollPosition() const
1525 return mScrollPosition;
1528 Dali::Vector2 GetScrollSize() const
1533 Dali::Vector2 GetContentSize() const
1535 return mContentSize;
1538 void SetPageZoomFactor(float zoomFactor)
1540 mPageZoomFactor = zoomFactor;
1543 float GetPageZoomFactor() const
1545 return mPageZoomFactor;
1548 void SetTextZoomFactor(float zoomFactor)
1550 mTextZoomFactor = zoomFactor;
1553 float GetTextZoomFactor() const
1555 return mTextZoomFactor;
1558 float GetLoadProgressPercentage() const
1563 void SetScaleFactor(float scaleFactor, Dali::Vector2 point)
1565 mScaleFactor = scaleFactor;
1568 float GetScaleFactor() const
1570 return mScaleFactor;
1573 Dali::Accessibility::Address GetAccessibilityAddress()
1575 return {":9.99", "root"};
1578 Dali::PixelData GetScreenshot(Dali::Rect<int32_t> viewArea, float scaleFactor)
1580 uint32_t bufferSize = viewArea.width * viewArea.height * 4 ;
1581 uint8_t* pixel = new uint8_t[ bufferSize ];
1582 memset(pixel, 0xff, bufferSize);
1583 return Dali::PixelData::New( pixel, bufferSize, viewArea.width, viewArea.height,
1584 Dali::Pixel::Format::RGBA8888,
1585 Dali::PixelData::ReleaseFunction::DELETE_ARRAY );
1588 bool GetScreenshotAsynchronously(Dali::Rect<int32_t> viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback)
1592 ConnectToGlobalSignal( &OnScreenshotCaptured );
1593 mScreenshotCapturedCallback = callback;
1598 bool CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback)
1602 ConnectToGlobalSignal( &OnVideoPlaying );
1603 mVideoPlayingCallback = callback;
1608 void RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback)
1612 ConnectToGlobalSignal( &OnGeolocationPermission );
1613 mGeolocationPermissionCallback = callback;
1617 void RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback)
1619 mFrameRenderedCallback = callback;
1622 void RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
1624 mPageLoadStartedCallback = callback;
1627 void RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
1629 mPageLoadInProgressCallback = callback;
1632 void RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
1634 mPageLoadFinishedCallback = callback;
1637 void RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback)
1639 mPageLoadErrorCallback = callback;
1642 void RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback)
1644 mScrollEdgeReachedCallback = callback;
1647 void RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback)
1649 mUrlChangedCallback = callback;
1652 void RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback)
1654 mFormRepostDecidedCallback = callback;
1657 void RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback)
1659 mConsoleMessageCallback = callback;
1662 void RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback)
1664 mResponsePolicyDecisionCallback = callback;
1667 void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback)
1669 mNavigationPolicyDecisionCallback = callback;
1672 void RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback)
1674 mNewWindowCreatedCallback = callback;
1677 void RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
1679 mCertificateConfirmCallback = callback;
1682 void RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
1684 mSslCertificateChangedCallback = callback;
1687 void RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback)
1689 mHttpAuthHandlerCallback = callback;
1692 void RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback)
1694 mContextMenuShownCallback = callback;
1697 void RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback)
1699 mContextMenuHiddenCallback = callback;
1702 void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback)
1706 ConnectToGlobalSignal(&OnPlainTextReceived);
1707 mPlainTextReceivedCallback = callback;
1712 std::vector<std::string> mHistory;
1713 size_t mCurrentPlusOnePos;
1714 std::string mUserAgent;
1717 float mPageZoomFactor;
1718 float mTextZoomFactor;
1721 Dali::Vector2 mScrollPosition;
1722 Dali::Vector2 mScrollSize;
1723 Dali::Vector2 mContentSize;
1724 WebEngineBackForwardList* mockWebEngineBackForwardList;
1725 WebEngineSettings* mockWebEngineSettings;
1727 std::vector<Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback> mResultCallbacks;
1729 Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadStartedCallback;
1730 Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadInProgressCallback;
1731 Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadFinishedCallback;
1732 Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback mPageLoadErrorCallback;
1733 Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback mScrollEdgeReachedCallback;
1734 Dali::WebEnginePlugin::WebEngineUrlChangedCallback mUrlChangedCallback;
1735 Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback mFormRepostDecidedCallback;
1736 Dali::WebEnginePlugin::WebEngineFrameRenderedCallback mFrameRenderedCallback;
1737 Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback mConsoleMessageCallback;
1738 Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback mResponsePolicyDecisionCallback;
1739 Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback mNavigationPolicyDecisionCallback;
1740 Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback mNewWindowCreatedCallback;
1741 Dali::WebEnginePlugin::WebEngineCertificateCallback mCertificateConfirmCallback;
1742 Dali::WebEnginePlugin::WebEngineCertificateCallback mSslCertificateChangedCallback;
1743 Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback mHttpAuthHandlerCallback;
1744 Dali::WebEnginePlugin::WebEngineContextMenuShownCallback mContextMenuShownCallback;
1745 Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback mContextMenuHiddenCallback;
1746 Dali::WebEnginePlugin::JavaScriptAlertCallback mJavaScriptAlertCallback;
1747 Dali::WebEnginePlugin::JavaScriptConfirmCallback mJavaScriptConfirmCallback;
1748 Dali::WebEnginePlugin::JavaScriptPromptCallback mJavaScriptPromptCallback;
1749 Dali::WebEnginePlugin::ScreenshotCapturedCallback mScreenshotCapturedCallback;
1750 Dali::WebEnginePlugin::VideoPlayingCallback mVideoPlayingCallback;
1751 Dali::WebEnginePlugin::GeolocationPermissionCallback mGeolocationPermissionCallback;
1752 Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback mHitTestCreatedCallback;
1753 Dali::WebEnginePlugin::PlainTextReceivedCallback mPlainTextReceivedCallback;
1762 DisconnectFromGlobalSignal( &OnGoBack );
1764 if( gInstance && gInstance->CanGoBack() )
1766 gInstance->mCurrentPlusOnePos--;
1773 DisconnectFromGlobalSignal( &OnGoForward );
1775 if( gInstance && gInstance->CanGoForward() )
1777 gInstance->mCurrentPlusOnePos++;
1784 DisconnectFromGlobalSignal( &OnLoadUrl );
1788 if( gInstance->mHistory.size() > gInstance->mCurrentPlusOnePos )
1790 gInstance->mHistory.erase( gInstance->mHistory.begin() + gInstance->mCurrentPlusOnePos, gInstance->mHistory.end() );
1792 gInstance->mHistory.push_back( gInstance->mUrl );
1793 gInstance->mCurrentPlusOnePos++;
1794 if (gInstance->mPageLoadStartedCallback)
1796 gInstance->mPageLoadStartedCallback( gInstance->mUrl );
1798 if (gInstance->mPageLoadInProgressCallback)
1800 gInstance->mPageLoadInProgressCallback( gInstance->mUrl );
1802 if (gInstance->mPageLoadFinishedCallback)
1804 gInstance->mPageLoadFinishedCallback( gInstance->mUrl );
1806 if (gInstance->mPageLoadErrorCallback)
1808 std::unique_ptr<Dali::WebEngineLoadError> error(new MockWebEngineLoadError(gInstance->mUrl));
1809 gInstance->mPageLoadErrorCallback(std::move(error));
1811 if (gInstance->mUrlChangedCallback)
1813 gInstance->mUrlChangedCallback( "http://new-test" );
1815 if (gInstance->mFormRepostDecidedCallback)
1817 std::unique_ptr<Dali::WebEngineFormRepostDecision> repostDecision(new MockWebEngineFormRepostDecision());
1818 gInstance->mFormRepostDecidedCallback(std::move(repostDecision));
1820 if (gInstance->mFrameRenderedCallback)
1822 gInstance->mFrameRenderedCallback();
1824 if (gInstance->mConsoleMessageCallback)
1826 std::unique_ptr<Dali::WebEngineConsoleMessage> message(new MockWebEngineConsoleMessage());
1827 gInstance->mConsoleMessageCallback(std::move(message));
1829 if (gInstance->mResponsePolicyDecisionCallback)
1831 std::unique_ptr<Dali::WebEnginePolicyDecision> policyDecision(new MockWebEnginePolicyDecision());
1832 gInstance->mResponsePolicyDecisionCallback(std::move(policyDecision));
1834 if (gInstance->mNavigationPolicyDecisionCallback)
1836 std::unique_ptr<Dali::WebEnginePolicyDecision> policyDecision(new MockWebEnginePolicyDecision());
1837 gInstance->mNavigationPolicyDecisionCallback(std::move(policyDecision));
1839 if (gInstance->mNewWindowCreatedCallback)
1841 Dali::WebEnginePlugin* plugin = 0;
1842 gInstance->mNewWindowCreatedCallback(plugin);
1844 if (gInstance->mCertificateConfirmCallback)
1846 std::unique_ptr<Dali::WebEngineCertificate> certificate(new MockWebEngineCertificate());
1847 gInstance->mCertificateConfirmCallback(std::move(certificate));
1849 if (gInstance->mSslCertificateChangedCallback)
1851 std::unique_ptr<Dali::WebEngineCertificate> sslCertificate(new MockWebEngineCertificate());
1852 gInstance->mSslCertificateChangedCallback(std::move(sslCertificate));
1854 if (gInstance->mHttpAuthHandlerCallback)
1856 std::unique_ptr<Dali::WebEngineHttpAuthHandler> handler(new MockWebEngineHttpAuthHandler());
1857 gInstance->mHttpAuthHandlerCallback(std::move(handler));
1859 if (gInstance->mContextMenuShownCallback)
1861 std::unique_ptr<Dali::WebEngineContextMenu> menu(new MockWebEngineContextMenu());
1862 gInstance->mContextMenuShownCallback(std::move(menu));
1864 if (gInstance->mContextMenuHiddenCallback)
1866 std::unique_ptr<Dali::WebEngineContextMenu> hiddenMenu(new MockWebEngineContextMenu());
1867 gInstance->mContextMenuHiddenCallback(std::move(hiddenMenu));
1875 DisconnectFromGlobalSignal( &OnScrollEdge );
1877 if( gInstance && gInstance->mScrollEdgeReachedCallback )
1879 gInstance->mScrollEdgeReachedCallback( Dali::WebEnginePlugin::ScrollEdge::BOTTOM );
1885 bool OnEvaluteJavaScript()
1887 DisconnectFromGlobalSignal( &OnEvaluteJavaScript );
1891 for( auto& func : gInstance->mResultCallbacks )
1895 gInstance->mResultCallbacks.clear();
1900 bool OnJavaScriptAlert()
1902 DisconnectFromGlobalSignal( &OnJavaScriptAlert );
1905 gInstance->mJavaScriptAlertCallback( "this is an alert popup." );
1910 bool OnJavaScriptConfirm()
1912 DisconnectFromGlobalSignal( &OnJavaScriptConfirm );
1915 gInstance->mJavaScriptConfirmCallback( "this is a confirm popup." );
1920 bool OnJavaScriptPrompt()
1922 DisconnectFromGlobalSignal( &OnJavaScriptPrompt );
1925 gInstance->mJavaScriptPromptCallback( "this is a prompt pompt.", "" );
1930 bool OnScreenshotCaptured()
1932 DisconnectFromGlobalSignal( &OnScreenshotCaptured );
1935 uint8_t* pixel = new uint8_t[ 2 * 2 * 4 ];
1936 memset(pixel, 0xff, 2 * 2 * 4);
1937 Dali::PixelData data = Dali::PixelData::New( pixel, 2 * 2 * 4, 2, 2,
1938 Dali::Pixel::Format::RGBA8888,
1939 Dali::PixelData::ReleaseFunction::DELETE_ARRAY );
1940 gInstance->mScreenshotCapturedCallback( data );
1945 bool OnVideoPlaying()
1947 DisconnectFromGlobalSignal( &OnVideoPlaying );
1950 gInstance->mVideoPlayingCallback( true );
1955 bool OnGeolocationPermission()
1957 DisconnectFromGlobalSignal( &OnGeolocationPermission );
1960 gInstance->mGeolocationPermissionCallback( "", "" );
1965 bool OnHitTestCreated()
1967 DisconnectFromGlobalSignal(&OnHitTestCreated);
1970 std::unique_ptr<Dali::WebEngineHitTest> test(new MockWebEngineHitTest());
1971 gInstance->mHitTestCreatedCallback(std::move(test));
1976 bool OnClearHistory()
1978 DisconnectFromGlobalSignal( &OnClearHistory );
1980 if( gInstance && gInstance->mCurrentPlusOnePos )
1982 std::string url = gInstance->mHistory[ gInstance->mCurrentPlusOnePos - 1 ];
1983 std::vector< std::string >().swap( gInstance->mHistory );
1984 gInstance->mHistory.push_back( url );
1985 gInstance->mCurrentPlusOnePos = 1;
1990 bool OnSecurityOriginAcquired()
1992 DisconnectFromGlobalSignal(&OnSecurityOriginAcquired);
1993 if (gWebEngineContextInstance)
1995 std::vector<std::unique_ptr<Dali::WebEngineSecurityOrigin>> securityOriginList;
1996 std::unique_ptr<Dali::WebEngineSecurityOrigin> origin(new MockWebEngineSecurityOrigin());
1997 securityOriginList.push_back(std::move(origin));
1998 gWebEngineContextInstance->mSecurityOriginAcquiredCallback(securityOriginList);
2003 bool OnStorageUsageAcquired()
2005 DisconnectFromGlobalSignal(&OnStorageUsageAcquired);
2006 if (gWebEngineContextInstance)
2008 gWebEngineContextInstance->mStorageUsageAcquiredCallback(0);
2013 bool OnFormPasswordAcquired()
2015 DisconnectFromGlobalSignal(&OnFormPasswordAcquired);
2016 if (gWebEngineContextInstance)
2018 std::vector<std::unique_ptr<Dali::WebEngineContext::PasswordData>> formPasswordList;
2019 std::unique_ptr<Dali::WebEngineContext::PasswordData> data(new Dali::WebEngineContext::PasswordData());
2020 data->url = "http://test.html";
2021 data->useFingerprint = false;
2022 formPasswordList.push_back(std::move(data));
2023 gWebEngineContextInstance->mFormPasswordAcquiredCallback(formPasswordList);
2028 bool OnDownloadStarted()
2030 DisconnectFromGlobalSignal(&OnDownloadStarted);
2031 if (gWebEngineContextInstance)
2033 gWebEngineContextInstance->mDownloadStartedCallback("http://test.html");
2038 bool OnMimeOverridden()
2040 DisconnectFromGlobalSignal(&OnMimeOverridden);
2041 if (gWebEngineContextInstance)
2043 std::string newMime;
2044 gWebEngineContextInstance->mMimeOverriddenCallback("http://test.html", "txt/xml", newMime);
2049 bool OnRequestIntercepted()
2051 DisconnectFromGlobalSignal(&OnRequestIntercepted);
2052 if (gWebEngineContextInstance)
2054 Dali::WebEngineRequestInterceptorPtr interceptor = new MockWebEngineRequestInterceptor();
2055 gWebEngineContextInstance->mRequestInterceptedCallback(interceptor);
2060 bool OnChangesWatch()
2062 DisconnectFromGlobalSignal(&OnChangesWatch);
2063 if (gMockWebEngineCookieManager)
2065 gMockWebEngineCookieManager->mChangesWatchCallback();
2070 bool OnPlainTextReceived()
2072 DisconnectFromGlobalSignal(&OnPlainTextReceived);
2075 std::string dummyResultText;
2076 gInstance->mPlainTextReceivedCallback(dummyResultText);
2083 inline WebEngine& GetImplementation( Dali::WebEngine& webEngine )
2085 DALI_ASSERT_ALWAYS( webEngine && "WebEngine handle is empty." );
2086 BaseObject& handle = webEngine.GetBaseObject();
2087 return static_cast< Internal::Adaptor::WebEngine& >( handle );
2090 inline const WebEngine& GetImplementation( const Dali::WebEngine& webEngine )
2092 DALI_ASSERT_ALWAYS( webEngine && "WebEngine handle is empty." );
2093 const BaseObject& handle = webEngine.GetBaseObject();
2094 return static_cast< const Internal::Adaptor::WebEngine& >( handle );
2097 } // namespace Adaptor
2099 } // namespace Internal
2101 // Dali::WebEngine Implementation
2102 WebEngine::WebEngine()
2106 WebEngine::WebEngine( Internal::Adaptor::WebEngine* internal )
2107 : BaseHandle( internal )
2111 WebEngine::~WebEngine()
2115 WebEngine WebEngine::New()
2117 Internal::Adaptor::WebEngine* baseObject = new Internal::Adaptor::WebEngine();
2119 return WebEngine( baseObject );
2122 Dali::WebEngineContext* WebEngine::GetContext()
2124 return Internal::Adaptor::GetContext();
2127 Dali::WebEngineCookieManager* WebEngine::GetCookieManager()
2129 return Internal::Adaptor::GetCookieManager();
2132 WebEngine::WebEngine( const WebEngine& WebEngine )
2133 : BaseHandle( WebEngine )
2137 WebEngine& WebEngine::operator=( const WebEngine& webEngine )
2139 BaseHandle::operator=( webEngine );
2143 WebEngine WebEngine::DownCast( BaseHandle handle )
2145 return WebEngine( dynamic_cast< Internal::Adaptor::WebEngine* >( handle.GetObjectPtr() ) );
2148 void WebEngine::Create( uint32_t width, uint32_t height, const std::string& locale, const std::string& timezoneId )
2152 void WebEngine::Create( uint32_t width, uint32_t height, uint32_t argc, char** argv )
2156 void WebEngine::Destroy()
2160 WebEngineSettings& WebEngine::GetSettings() const
2162 return Internal::Adaptor::GetImplementation( *this ).GetSettings();
2165 WebEngineBackForwardList& WebEngine::GetBackForwardList() const
2167 return Internal::Adaptor::GetImplementation( *this ).GetBackForwardList();
2170 void WebEngine::LoadUrl( const std::string& url )
2172 return Internal::Adaptor::GetImplementation( *this ).LoadUrl( url );
2175 std::string WebEngine::GetTitle() const
2177 return Internal::Adaptor::GetImplementation( *this ).GetTitle();
2180 Dali::PixelData WebEngine::GetFavicon() const
2182 return Internal::Adaptor::GetImplementation( *this ).GetFavicon();
2185 std::string WebEngine::GetUrl() const
2187 return Internal::Adaptor::GetImplementation( *this ).GetUrl();
2190 Dali::WebEnginePlugin* WebEngine::GetPlugin() const
2192 return Internal::Adaptor::GetWebEnginePlugin();
2195 NativeImageSourcePtr WebEngine::GetNativeImageSource()
2198 Dali::NativeImageSourcePtr sourcePtr = Dali::NativeImageSource::New( source );
2202 void WebEngine::LoadHtmlString( const std::string& htmlString )
2206 bool WebEngine::LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl)
2211 bool WebEngine::LoadContents(const int8_t* contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri)
2216 void WebEngine::Reload()
2220 bool WebEngine::ReloadWithoutCache()
2225 void WebEngine::StopLoading()
2229 void WebEngine::Suspend()
2233 void WebEngine::Resume()
2237 void WebEngine::SuspendNetworkLoading()
2241 void WebEngine::ResumeNetworkLoading()
2245 bool WebEngine::AddCustomHeader(const std::string& name, const std::string& value)
2250 bool WebEngine::RemoveCustomHeader(const std::string& name)
2255 uint32_t WebEngine::StartInspectorServer(uint32_t port)
2260 bool WebEngine::StopInspectorServer()
2265 bool WebEngine::CanGoForward()
2267 return Internal::Adaptor::GetImplementation( *this ).CanGoForward();
2270 void WebEngine::GoForward()
2272 Internal::Adaptor::GetImplementation( *this ).GoForward();
2275 bool WebEngine::CanGoBack()
2277 return Internal::Adaptor::GetImplementation( *this ).CanGoBack();
2280 void WebEngine::GoBack()
2282 Internal::Adaptor::GetImplementation( *this ).GoBack();
2285 void WebEngine::EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler )
2287 Internal::Adaptor::GetImplementation( *this ).EvaluateJavaScript( script, resultHandler );
2290 void WebEngine::AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void(const std::string&) > handler )
2294 void WebEngine::RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback )
2296 Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptAlertCallback( callback );
2299 void WebEngine::JavaScriptAlertReply()
2303 void WebEngine::RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback )
2305 Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptConfirmCallback( callback );
2308 void WebEngine::JavaScriptConfirmReply( bool confirmed )
2312 void WebEngine::RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback )
2314 Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptPromptCallback( callback );
2317 void WebEngine::JavaScriptPromptReply( const std::string& result )
2321 std::unique_ptr<Dali::WebEngineHitTest> WebEngine::CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode)
2323 return Internal::Adaptor::GetImplementation(*this).CreateHitTest(x, y, mode);
2326 bool WebEngine::CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback)
2328 return Internal::Adaptor::GetImplementation(*this).CreateHitTestAsynchronously(x, y, mode, callback);
2331 void WebEngine::ClearAllTilesResources()
2335 void WebEngine::ClearHistory()
2337 Internal::Adaptor::GetImplementation( *this ).ClearHistory();
2340 void WebEngine::SetScaleFactor(float scaleFactor, Dali::Vector2 point)
2342 Internal::Adaptor::GetImplementation( *this ).SetScaleFactor(scaleFactor, point);
2345 float WebEngine::GetScaleFactor() const
2347 return Internal::Adaptor::GetImplementation( *this ).GetScaleFactor();
2350 void WebEngine::ActivateAccessibility(bool activated)
2354 Accessibility::Address WebEngine::GetAccessibilityAddress()
2356 return Internal::Adaptor::GetImplementation(*this).GetAccessibilityAddress();
2359 bool WebEngine::HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount)
2364 void WebEngine::AddDynamicCertificatePath(const std::string& host, const std::string& certPath)
2368 Dali::PixelData WebEngine::GetScreenshot(Dali::Rect<int32_t> viewArea, float scaleFactor)
2370 return Internal::Adaptor::GetImplementation( *this ).GetScreenshot(viewArea, scaleFactor);
2373 bool WebEngine::GetScreenshotAsynchronously(Dali::Rect<int32_t> viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback)
2375 return Internal::Adaptor::GetImplementation( *this ).GetScreenshotAsynchronously(viewArea, scaleFactor, callback);
2378 bool WebEngine::CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback)
2380 return Internal::Adaptor::GetImplementation( *this ).CheckVideoPlayingAsynchronously(callback);
2383 void WebEngine::RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback)
2385 Internal::Adaptor::GetImplementation( *this ).RegisterGeolocationPermissionCallback(callback);
2388 std::string WebEngine::GetUserAgent() const
2390 return Internal::Adaptor::GetImplementation( *this ).GetUserAgent();
2393 void WebEngine::SetUserAgent( const std::string& userAgent )
2395 Internal::Adaptor::GetImplementation( *this ).SetUserAgent( userAgent );
2398 void WebEngine::ScrollBy( int32_t dx, int32_t dy )
2400 Internal::Adaptor::GetImplementation( *this ).ScrollBy( dx, dy );
2403 bool WebEngine::ScrollEdgeBy( int32_t dx, int32_t dy )
2405 return Internal::Adaptor::GetImplementation( *this ).ScrollEdgeBy( dx, dy );
2408 void WebEngine::SetScrollPosition( int32_t x, int32_t y )
2410 Internal::Adaptor::GetImplementation( *this ).SetScrollPosition( x, y );
2413 Dali::Vector2 WebEngine::GetScrollPosition() const
2415 return Internal::Adaptor::GetImplementation( *this ).GetScrollPosition();
2418 Dali::Vector2 WebEngine::GetScrollSize() const
2420 return Internal::Adaptor::GetImplementation( *this ).GetScrollSize();
2423 Dali::Vector2 WebEngine::GetContentSize() const
2425 return Internal::Adaptor::GetImplementation( *this ).GetContentSize();
2428 void WebEngine::SetSize( uint32_t width, uint32_t height )
2432 void WebEngine::SetDocumentBackgroundColor(Dali::Vector4 color)
2436 void WebEngine::ClearTilesWhenHidden(bool cleared)
2440 void WebEngine::SetTileCoverAreaMultiplier(float multiplier)
2444 void WebEngine::EnableCursorByClient(bool enabled)
2448 std::string WebEngine::GetSelectedText() const
2453 bool WebEngine::SendTouchEvent( const TouchEvent& touch )
2458 bool WebEngine::SendKeyEvent( const KeyEvent& event )
2463 bool WebEngine::SendHoverEvent( const HoverEvent& event )
2468 bool WebEngine::SendWheelEvent( const WheelEvent& event )
2473 void WebEngine::SetFocus( bool focused )
2477 void WebEngine::SetPageZoomFactor(float zoomFactor)
2479 Internal::Adaptor::GetImplementation( *this ).SetPageZoomFactor(zoomFactor);
2482 float WebEngine::GetPageZoomFactor() const
2484 return Internal::Adaptor::GetImplementation( *this ).GetPageZoomFactor();
2487 void WebEngine::SetTextZoomFactor(float zoomFactor)
2489 Internal::Adaptor::GetImplementation( *this ).SetTextZoomFactor(zoomFactor);
2492 float WebEngine::GetTextZoomFactor() const
2494 return Internal::Adaptor::GetImplementation( *this ).GetTextZoomFactor();
2497 float WebEngine::GetLoadProgressPercentage() const
2499 return Internal::Adaptor::GetImplementation( *this ).GetLoadProgressPercentage();
2502 void WebEngine::UpdateDisplayArea( Dali::Rect< int32_t > displayArea )
2506 void WebEngine::EnableVideoHole( bool enabled )
2510 void WebEngine::EnableMouseEvents( bool enabled )
2514 void WebEngine::EnableKeyEvents( bool enabled )
2518 void WebEngine::RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback)
2520 Internal::Adaptor::GetImplementation(*this).RegisterFrameRenderedCallback(callback);
2523 void WebEngine::RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
2525 Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadStartedCallback(callback);
2528 void WebEngine::RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
2530 Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadInProgressCallback(callback);
2533 void WebEngine::RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
2535 Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadFinishedCallback(callback);
2538 void WebEngine::RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback)
2540 Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadErrorCallback(callback);
2543 void WebEngine::RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback)
2545 Internal::Adaptor::GetImplementation( *this ).RegisterScrollEdgeReachedCallback(callback);
2548 void WebEngine::RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback)
2550 Internal::Adaptor::GetImplementation( *this ).RegisterUrlChangedCallback(callback);
2553 void WebEngine::RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback)
2555 Internal::Adaptor::GetImplementation( *this ).RegisterFormRepostDecidedCallback(callback);
2558 void WebEngine::RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback)
2560 Internal::Adaptor::GetImplementation( *this ).RegisterConsoleMessageReceivedCallback(callback);
2563 void WebEngine::RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback)
2565 Internal::Adaptor::GetImplementation( *this ).RegisterResponsePolicyDecidedCallback(callback);
2568 void WebEngine::RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback)
2570 Internal::Adaptor::GetImplementation(*this).RegisterNavigationPolicyDecidedCallback(callback);
2573 void WebEngine::RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback)
2575 Internal::Adaptor::GetImplementation(*this).RegisterNewWindowCreatedCallback(callback);
2578 void WebEngine::RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
2580 Internal::Adaptor::GetImplementation( *this ).RegisterCertificateConfirmedCallback(callback);
2583 void WebEngine::RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
2585 Internal::Adaptor::GetImplementation( *this ).RegisterSslCertificateChangedCallback(callback);
2588 void WebEngine::RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback)
2590 Internal::Adaptor::GetImplementation( *this ).RegisterHttpAuthHandlerCallback(callback);
2593 void WebEngine::RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback)
2595 Internal::Adaptor::GetImplementation( *this ).RegisterContextMenuShownCallback(callback);
2598 void WebEngine::RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback)
2600 Internal::Adaptor::GetImplementation( *this ).RegisterContextMenuHiddenCallback(callback);
2603 void WebEngine::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback)
2605 Internal::Adaptor::GetImplementation(*this).GetPlainTextAsynchronously(callback);
2608 } // namespace Dali;