2 * Copyright (c) 2024 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-back-forward-list-item.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-certificate.h>
23 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-console-message.h>
24 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-context-menu-item.h>
25 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-context-menu.h>
26 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-context.h>
27 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-cookie-manager.h>
28 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-form-repost-decision.h>
29 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-frame.h>
30 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-hit-test.h>
31 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-http-auth-handler.h>
32 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-load-error.h>
33 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-policy-decision.h>
34 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-request-interceptor.h>
35 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-security-origin.h>
36 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-settings.h>
37 #include <dali/devel-api/adaptor-framework/web-engine/web-engine.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>
44 #include <toolkit-application.h>
54 class MockWebEngineContext;
55 class MockWebEngineCookieManager;
59 // Generally only one WebEngine instance exists.
60 // If > 1, a new web engine has been created by CreateWindowSignal.
61 WebEngine* gInstance = nullptr;
62 int gInstanceCount = 0;
63 MockWebEngineContext* gWebEngineContextInstance = nullptr;
64 MockWebEngineCookieManager* gMockWebEngineCookieManager = nullptr;
69 bool OnEvaluteJavaScript();
70 bool OnJavaScriptAlert();
71 bool OnJavaScriptConfirm();
72 bool OnJavaScriptPrompt();
73 bool OnHitTestCreated();
75 bool OnScreenshotCaptured();
76 bool OnVideoPlaying();
77 bool OnGeolocationPermission();
78 bool OnClearHistory();
79 bool OnSecurityOriginAcquired();
80 bool OnStorageUsageAcquired();
81 bool OnFormPasswordAcquired();
82 bool OnDownloadStarted();
83 bool OnMimeOverridden();
84 bool OnRequestIntercepted();
85 bool OnChangesWatch();
86 bool OnPlainTextReceived();
88 static void ConnectToGlobalSignal(bool (*func)())
90 Dali::Timer timer = Dali::Timer::New(0);
91 timer.TickSignal().Connect(func);
94 static void DisconnectFromGlobalSignal(bool (*func)())
96 Dali::Timer timer = Dali::Timer::New(0);
97 timer.TickSignal().Disconnect(func);
101 class MockWebEngineContext : public Dali::WebEngineContext
104 MockWebEngineContext()
105 : mockModel(Dali::WebEngineContext::CacheModel::DOCUMENT_VIEWER)
109 Dali::WebEngineContext::CacheModel GetCacheModel() const override
114 void SetCacheModel(Dali::WebEngineContext::CacheModel cacheModel) override
116 mockModel = cacheModel;
119 void SetProxyUri(const std::string& uri) override
124 std::string GetProxyUri() const override
129 void SetProxyBypassRule(const std::string& proxy, const std::string& bypass) override
131 mockBypassRule = bypass;
134 std::string GetProxyBypassRule() const override
136 return mockBypassRule;
139 void SetDefaultProxyAuth(const std::string& username, const std::string& password) override
143 void SetCertificateFilePath(const std::string& certificatePath) override
145 mockCertificateFilePath = certificatePath;
148 std::string GetCertificateFilePath() const override
150 return mockCertificateFilePath;
153 void DeleteAllWebDatabase() override
157 bool GetWebDatabaseOrigins(Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback callback) override
161 ConnectToGlobalSignal(&OnSecurityOriginAcquired);
162 mSecurityOriginAcquiredCallback = callback;
167 bool DeleteWebDatabase(Dali::WebEngineSecurityOrigin& origin) override
172 bool GetWebStorageOrigins(Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback callback) override
176 ConnectToGlobalSignal(&OnSecurityOriginAcquired);
177 mSecurityOriginAcquiredCallback = callback;
182 bool GetWebStorageUsageForOrigin(Dali::WebEngineSecurityOrigin& origin, Dali::WebEngineContext::WebEngineStorageUsageAcquiredCallback callback) override
186 ConnectToGlobalSignal(&OnStorageUsageAcquired);
187 mStorageUsageAcquiredCallback = callback;
192 void DeleteAllWebStorage() override
196 bool DeleteWebStorage(Dali::WebEngineSecurityOrigin& origin) override
201 void DeleteLocalFileSystem() override
205 void ClearCache() override
209 bool DeleteApplicationCache(Dali::WebEngineSecurityOrigin& origin) override
214 void GetFormPasswordList(Dali::WebEngineContext::WebEngineFormPasswordAcquiredCallback callback) override
218 ConnectToGlobalSignal(&OnFormPasswordAcquired);
219 mFormPasswordAcquiredCallback = callback;
223 void RegisterDownloadStartedCallback(Dali::WebEngineContext::WebEngineDownloadStartedCallback callback) override
227 ConnectToGlobalSignal(&OnDownloadStarted);
228 mDownloadStartedCallback = callback;
232 void RegisterMimeOverriddenCallback(Dali::WebEngineContext::WebEngineMimeOverriddenCallback callback) override
236 ConnectToGlobalSignal(&OnMimeOverridden);
237 mMimeOverriddenCallback = callback;
241 void RegisterRequestInterceptedCallback(Dali::WebEngineContext::WebEngineRequestInterceptedCallback callback) override
245 ConnectToGlobalSignal(&OnRequestIntercepted);
246 mRequestInterceptedCallback = callback;
250 void EnableCache(bool cacheEnabled) override
252 mockCacheEnabled = cacheEnabled;
255 bool IsCacheEnabled() const override
257 return mockCacheEnabled;
260 void SetAppId(const std::string& appID) override
264 bool SetAppVersion(const std::string& appVersion) override
269 void SetApplicationType(const Dali::WebEngineContext::ApplicationType applicationType) override
273 void SetTimeOffset(float timeOffset) override
277 void SetTimeZoneOffset(float timeZoneOffset, float daylightSavingTime) override
281 void RegisterUrlSchemesAsCorsEnabled(const std::vector<std::string>& schemes) override
285 void RegisterJsPluginMimeTypes(const std::vector<std::string>& mimeTypes) override
289 void SetDefaultZoomFactor(float zoomFactor) override
291 mockZoomFactor = zoomFactor;
294 float GetDefaultZoomFactor() const override
296 return mockZoomFactor;
299 bool DeleteAllApplicationCache() override
304 bool DeleteAllWebIndexedDatabase() override
309 void DeleteFormPasswordDataList(const std::vector<std::string>& list) override
313 void DeleteAllFormPasswordData() override
317 void DeleteAllFormCandidateData() override
321 bool FreeUnusedMemory() override
327 Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback mSecurityOriginAcquiredCallback;
328 Dali::WebEngineContext::WebEngineStorageUsageAcquiredCallback mStorageUsageAcquiredCallback;
329 Dali::WebEngineContext::WebEngineFormPasswordAcquiredCallback mFormPasswordAcquiredCallback;
330 Dali::WebEngineContext::WebEngineDownloadStartedCallback mDownloadStartedCallback;
331 Dali::WebEngineContext::WebEngineMimeOverriddenCallback mMimeOverriddenCallback;
332 Dali::WebEngineContext::WebEngineRequestInterceptedCallback mRequestInterceptedCallback;
335 Dali::WebEngineContext::CacheModel mockModel;
336 std::string mockProxyUri;
337 std::string mockBypassRule;
338 std::string mockCertificateFilePath;
339 bool mockCacheEnabled;
340 float mockZoomFactor;
343 Dali::WebEngineContext* GetContext()
345 if(!gWebEngineContextInstance)
347 gWebEngineContextInstance = new MockWebEngineContext();
349 return gWebEngineContextInstance;
352 class MockWebEngineCookieManager : public Dali::WebEngineCookieManager
355 MockWebEngineCookieManager()
356 : mockCookieAcceptPolicy(Dali::WebEngineCookieManager::CookieAcceptPolicy::NO_THIRD_PARTY)
360 void SetCookieAcceptPolicy(Dali::WebEngineCookieManager::CookieAcceptPolicy policy) override
362 mockCookieAcceptPolicy = policy;
365 Dali::WebEngineCookieManager::CookieAcceptPolicy GetCookieAcceptPolicy() const override
367 return mockCookieAcceptPolicy;
370 void ClearCookies() override
374 void SetPersistentStorage(const std::string& path, Dali::WebEngineCookieManager::CookiePersistentStorage storage) override
378 void ChangesWatch(Dali::WebEngineCookieManager::WebEngineCookieManagerChangesWatchCallback callback) override
382 ConnectToGlobalSignal(&OnChangesWatch);
383 mChangesWatchCallback = callback;
388 Dali::WebEngineCookieManager::WebEngineCookieManagerChangesWatchCallback mChangesWatchCallback;
391 Dali::WebEngineCookieManager::CookieAcceptPolicy mockCookieAcceptPolicy;
394 Dali::WebEngineCookieManager* GetCookieManager()
396 if(!gMockWebEngineCookieManager)
398 gMockWebEngineCookieManager = new MockWebEngineCookieManager();
400 return gMockWebEngineCookieManager;
403 class MockWebEngineBackForwardListItem : public Dali::WebEngineBackForwardListItem
406 MockWebEngineBackForwardListItem()
407 : mockUrl("http://url"),
409 mockOriginalUrl("http://originalurl")
413 std::string GetUrl() const override
418 std::string GetTitle() const override
423 std::string GetOriginalUrl() const override
425 return mockOriginalUrl;
430 std::string mockTitle;
431 std::string mockOriginalUrl;
434 class MockWebEngineBackForwardList : public Dali::WebEngineBackForwardList
437 MockWebEngineBackForwardList()
441 std::unique_ptr<Dali::WebEngineBackForwardListItem> GetCurrentItem() const override
443 std::unique_ptr<Dali::WebEngineBackForwardListItem> ret(new MockWebEngineBackForwardListItem());
447 std::unique_ptr<Dali::WebEngineBackForwardListItem> GetPreviousItem() const override
449 std::unique_ptr<Dali::WebEngineBackForwardListItem> ret(new MockWebEngineBackForwardListItem());
453 std::unique_ptr<Dali::WebEngineBackForwardListItem> GetNextItem() const override
455 std::unique_ptr<Dali::WebEngineBackForwardListItem> ret(new MockWebEngineBackForwardListItem());
459 std::unique_ptr<Dali::WebEngineBackForwardListItem> GetItemAtIndex(uint32_t index) const override
461 std::unique_ptr<Dali::WebEngineBackForwardListItem> ret(new MockWebEngineBackForwardListItem());
465 uint32_t GetItemCount() const override
470 std::vector<std::unique_ptr<Dali::WebEngineBackForwardListItem>> GetBackwardItems(int limit) override
472 std::vector<std::unique_ptr<Dali::WebEngineBackForwardListItem>> ret;
473 std::unique_ptr<Dali::WebEngineBackForwardListItem> item(new MockWebEngineBackForwardListItem());
474 ret.push_back(std::move(item));
478 std::vector<std::unique_ptr<Dali::WebEngineBackForwardListItem>> GetForwardItems(int limit) override
480 std::vector<std::unique_ptr<Dali::WebEngineBackForwardListItem>> ret;
481 std::unique_ptr<Dali::WebEngineBackForwardListItem> item(new MockWebEngineBackForwardListItem());
482 ret.push_back(std::move(item));
487 class MockWebEngineCertificate : public Dali::WebEngineCertificate
490 MockWebEngineCertificate()
494 void Allow(bool allowed) override
498 bool IsFromMainFrame() const override
503 std::string GetPem() const override
508 bool IsContextSecure() const override
514 class MockWebEngineHttpAuthHandler : public Dali::WebEngineHttpAuthHandler
517 MockWebEngineHttpAuthHandler()
521 std::string GetRealm() const override
526 void Suspend() override
530 void UseCredential(const std::string& user, const std::string& password) override
534 void CancelCredential() override
539 class MockWebEngineFormRepostDecision : public WebEngineFormRepostDecision
542 MockWebEngineFormRepostDecision()
546 void Reply(bool allowed) override
551 class MockWebEngineFrame : public Dali::WebEngineFrame
558 bool IsMainFrame() const override
564 class MockWebEnginePolicyDecision : public Dali::WebEnginePolicyDecision
567 MockWebEnginePolicyDecision()
571 std::string GetUrl() const override
573 return "http://test.html";
576 std::string GetCookie() const override
581 Dali::WebEnginePolicyDecision::DecisionType GetDecisionType() const
583 return Dali::WebEnginePolicyDecision::DecisionType::USE;
586 std::string GetResponseMime() const
591 int32_t GetResponseStatusCode() const
596 Dali::WebEnginePolicyDecision::NavigationType GetNavigationType() const
598 return Dali::WebEnginePolicyDecision::NavigationType::LINK_CLICKED;
601 Dali::WebEngineFrame& GetFrame() const
603 return *(Dali::WebEngineFrame*)(&mockWebFrame);
606 std::string GetScheme() const
627 MockWebEngineFrame mockWebFrame;
630 class MockWebEngineConsoleMessage : public Dali::WebEngineConsoleMessage
633 MockWebEngineConsoleMessage()
637 std::string GetSource() const override
642 uint32_t GetLine() const override
647 SeverityLevel GetSeverityLevel() const override
649 return SeverityLevel::EMPTY;
652 std::string GetText() const override
654 return "This is a text.";
658 class MockWebEngineLoadError : public Dali::WebEngineLoadError
661 MockWebEngineLoadError(const std::string& url)
666 std::string GetUrl() const override
671 ErrorCode GetCode() const override
673 return ErrorCode::UNKNOWN;
676 std::string GetDescription() const override
678 return "This is an error.";
681 ErrorType GetType() const override
683 return ErrorType::NONE;
690 class MockWebEngineContextMenuItem : public Dali::WebEngineContextMenuItem
693 MockWebEngineContextMenuItem()
697 ItemTag GetTag() const override
699 return ItemTag::NO_ACTION;
702 ItemType GetType() const override
704 return ItemType::ACTION;
707 bool IsEnabled() const override
712 std::string GetLinkUrl() const override
714 return "http://test.html";
717 std::string GetImageUrl() const override
719 return "http://test.jpg";
722 std::string GetTitle() const override
727 std::unique_ptr<Dali::WebEngineContextMenu> GetParentMenu() const override
729 std::unique_ptr<Dali::WebEngineContextMenu> result;
734 class MockWebEngineContextMenu : public Dali::WebEngineContextMenu
737 MockWebEngineContextMenu()
741 uint32_t GetItemCount() const override
746 std::unique_ptr<Dali::WebEngineContextMenuItem> GetItemAt(uint32_t index) const override
748 std::unique_ptr<Dali::WebEngineContextMenuItem> webitem(new MockWebEngineContextMenuItem());
752 std::vector<std::unique_ptr<WebEngineContextMenuItem>> GetItemList() const override
754 std::vector<std::unique_ptr<WebEngineContextMenuItem>> result;
755 std::unique_ptr<Dali::WebEngineContextMenuItem> webitem(new MockWebEngineContextMenuItem());
756 result.push_back(std::move(webitem));
760 bool RemoveItem(WebEngineContextMenuItem& item) override
765 bool AppendItemAsAction(WebEngineContextMenuItem::ItemTag tag, const std::string& title, bool enabled) override
770 bool AppendItem(WebEngineContextMenuItem::ItemTag tag, const std::string& title, const std::string& iconFile, bool enabled) override
775 bool SelectItem(WebEngineContextMenuItem& item) override
786 class MockWebEngineHitTest : public Dali::WebEngineHitTest
789 MockWebEngineHitTest()
793 ResultContext GetResultContext() const override
795 return ResultContext::DOCUMENT;
798 std::string GetLinkUri() const override
800 return "http://test.html";
803 std::string GetLinkTitle() const override
808 std::string GetLinkLabel() const override
813 std::string GetImageUri() const override
815 return "http://test.jpg";
818 std::string GetMediaUri() const override
820 return "http://test.mp4";
823 std::string GetTagName() const override
828 std::string GetNodeValue() const override
833 Dali::Property::Map GetAttributes() const override
835 return mockAttributesMap;
838 std::string GetImageFileNameExtension() const override
843 Dali::PixelData GetImageBuffer() override
845 uint8_t* imageData = new uint8_t[16];
846 memset(imageData, 0xff, 16);
847 return Dali::PixelData::New(imageData, 16, 2, 2, Dali::Pixel::Format::RGBA8888, Dali::PixelData::ReleaseFunction::DELETE_ARRAY);
851 mutable Dali::Property::Map mockAttributesMap;
854 class MockWebEngineSecurityOrigin : public Dali::WebEngineSecurityOrigin
857 MockWebEngineSecurityOrigin()
858 : mockUrl("https://test.html"),
863 std::string GetHost() const
868 std::string GetProtocol() const
875 std::string mockPotocol;
878 class MockWebEngineSettings : public WebEngineSettings
881 MockWebEngineSettings()
882 : mockDefaultFontSize(16),
883 mockJavaScriptEnabled(true),
884 mockAutoFittingEnabled(true),
885 mockPluginsEnabled(true),
886 mockPrivateBrowsingEnabled(true),
887 mockLinkMagnifierEnabled(true),
888 mockKeypadWithoutUserActionUsed(true),
889 mockAutofillPasswordFormEnabled(true),
890 mockFormCandidateDataEnabled(true),
891 mockTextSelectionEnabled(true),
892 mockTextAutosizingEnable(true),
893 mockArrowScrollEnable(true),
894 mockClipboardEnabled(true),
895 mockImePanelEnabled(true),
896 mockImageLoadedAutomatically(true),
897 mockDefaultTextEncodingName()
901 uint32_t GetDefaultFontSize() const override
903 return mockDefaultFontSize;
906 void SetDefaultFontSize(uint32_t size) override
908 mockDefaultFontSize = size;
911 bool IsJavaScriptEnabled() const override
913 return mockJavaScriptEnabled;
916 void EnableJavaScript(bool enabled) override
918 mockJavaScriptEnabled = enabled;
921 bool IsAutoFittingEnabled() const override
923 return mockAutoFittingEnabled;
926 void EnableAutoFitting(bool enabled) override
928 mockAutoFittingEnabled = enabled;
931 bool ArePluginsEnabled() const override
933 return mockPluginsEnabled;
936 void EnablePlugins(bool enabled) override
938 mockPluginsEnabled = enabled;
941 bool IsPrivateBrowsingEnabled() const override
943 return mockPrivateBrowsingEnabled;
946 void EnablePrivateBrowsing(bool enabled) override
948 mockPrivateBrowsingEnabled = enabled;
951 bool IsLinkMagnifierEnabled() const override
953 return mockLinkMagnifierEnabled;
956 void EnableLinkMagnifier(bool enabled) override
958 mockLinkMagnifierEnabled = enabled;
961 bool IsKeypadWithoutUserActionUsed() const override
963 return mockKeypadWithoutUserActionUsed;
966 void UseKeypadWithoutUserAction(bool used) override
968 mockKeypadWithoutUserActionUsed = used;
971 bool IsAutofillPasswordFormEnabled() const override
973 return mockAutofillPasswordFormEnabled;
976 void EnableAutofillPasswordForm(bool enabled) override
978 mockAutofillPasswordFormEnabled = enabled;
981 bool IsFormCandidateDataEnabled() const override
983 return mockFormCandidateDataEnabled;
986 void EnableFormCandidateData(bool enabled) override
988 mockFormCandidateDataEnabled = enabled;
991 bool IsTextSelectionEnabled() const override
993 return mockTextSelectionEnabled;
996 void EnableTextSelection(bool enabled) override
998 mockTextSelectionEnabled = enabled;
1001 bool IsTextAutosizingEnabled() const override
1003 return mockTextAutosizingEnable;
1006 void EnableTextAutosizing(bool enabled) override
1008 mockTextAutosizingEnable = enabled;
1011 bool IsArrowScrollEnabled() const override
1013 return mockArrowScrollEnable;
1016 void EnableArrowScroll(bool enabled) override
1018 mockArrowScrollEnable = enabled;
1021 bool IsClipboardEnabled() const override
1023 return mockClipboardEnabled;
1026 void EnableClipboard(bool enabled) override
1028 mockClipboardEnabled = enabled;
1031 bool IsImePanelEnabled() const override
1033 return mockImePanelEnabled;
1036 void EnableImePanel(bool enabled) override
1038 mockImePanelEnabled = enabled;
1041 bool AreImagesLoadedAutomatically() const override
1043 return mockImageLoadedAutomatically;
1046 void AllowImagesLoadAutomatically(bool automatic) override
1048 mockImageLoadedAutomatically = automatic;
1051 std::string GetDefaultTextEncodingName() const override
1053 return mockDefaultTextEncodingName;
1056 void SetDefaultTextEncodingName(const std::string& defaultTextEncodingName) override
1058 mockDefaultTextEncodingName = defaultTextEncodingName;
1061 void AllowMixedContents(bool allowed) override
1065 void EnableSpatialNavigation(bool enabled) override
1069 void EnableWebSecurity(bool enabled) override
1073 void EnableCacheBuilder(bool enabled) override
1077 void UseScrollbarThumbFocusNotifications(bool used) override
1081 void EnableDoNotTrack(bool enabled) override
1085 void AllowFileAccessFromExternalUrl(bool allowed) override
1089 void AllowScriptsOpenWindows(bool allowed) override
1093 bool SetViewportMetaTag(bool enable) override
1098 bool SetForceZoom(bool enable) override
1103 bool IsZoomForced() const override
1108 bool SetTextZoomEnabled(bool enable) override
1113 bool IsTextZoomEnabled() const override
1118 void SetExtraFeature(const std::string& feature, bool enable) override
1122 bool IsExtraFeatureEnabled(const std::string& feature) const override
1128 int mockDefaultFontSize;
1129 bool mockJavaScriptEnabled;
1130 bool mockAutoFittingEnabled;
1131 bool mockPluginsEnabled;
1132 bool mockPrivateBrowsingEnabled;
1133 bool mockLinkMagnifierEnabled;
1134 bool mockKeypadWithoutUserActionUsed;
1135 bool mockAutofillPasswordFormEnabled;
1136 bool mockFormCandidateDataEnabled;
1137 bool mockTextSelectionEnabled;
1138 bool mockTextAutosizingEnable;
1139 bool mockArrowScrollEnable;
1140 bool mockClipboardEnabled;
1141 bool mockImePanelEnabled;
1142 bool mockImageLoadedAutomatically;
1143 std::string mockDefaultTextEncodingName;
1146 class MockWebEnginePlugin : public Dali::WebEnginePlugin
1149 MockWebEnginePlugin()
1152 void Create(uint32_t width, uint32_t height, const std::string& locale, const std::string& timezoneId) override
1155 void Create(uint32_t width, uint32_t height, uint32_t argc, char** argv) override
1158 void Destroy() override
1161 WebEngineSettings& GetSettings() const override
1163 return *((WebEngineSettings*)&settings);
1165 WebEngineBackForwardList& GetBackForwardList() const override
1167 return *((WebEngineBackForwardList*)&backForwardList);
1169 void LoadUrl(const std::string& url) override
1172 std::string GetTitle() const override
1174 return std::string();
1176 Dali::PixelData GetFavicon() const override
1178 return Dali::PixelData();
1180 NativeImageSourcePtr GetNativeImageSource() override
1184 std::string GetUrl() const override
1186 return std::string();
1188 void LoadHtmlString(const std::string& htmlString) override
1191 bool LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl) override
1195 bool LoadContents(const int8_t* contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri) override
1199 void Reload() override
1202 bool ReloadWithoutCache() override
1206 void StopLoading() override
1209 void Suspend() override
1212 void Resume() override
1215 void SuspendNetworkLoading() override
1218 void ResumeNetworkLoading() override
1221 bool AddCustomHeader(const std::string& name, const std::string& value) override
1225 bool RemoveCustomHeader(const std::string& name) override
1229 uint32_t StartInspectorServer(uint32_t port) override
1233 bool StopInspectorServer() override
1237 void ScrollBy(int32_t deltaX, int32_t deltaY) override
1240 bool ScrollEdgeBy(int32_t deltaX, int32_t deltaY) override
1244 void SetScrollPosition(int32_t x, int32_t y) override
1247 Dali::Vector2 GetScrollPosition() const override
1249 return Dali::Vector2();
1251 Dali::Vector2 GetScrollSize() const override
1253 return Dali::Vector2();
1255 Dali::Vector2 GetContentSize() const override
1257 return Dali::Vector2();
1259 bool CanGoForward() override
1263 void GoForward() override
1266 bool CanGoBack() override
1270 void GoBack() override
1273 void EvaluateJavaScript(const std::string& script, JavaScriptMessageHandlerCallback resultHandler) override
1276 void AddJavaScriptMessageHandler(const std::string& exposedObjectName, JavaScriptMessageHandlerCallback handler) override
1279 void RegisterJavaScriptAlertCallback(JavaScriptAlertCallback callback) override
1282 void JavaScriptAlertReply() override
1285 void RegisterJavaScriptConfirmCallback(JavaScriptConfirmCallback callback) override
1288 void JavaScriptConfirmReply(bool confirmed) override
1291 void RegisterJavaScriptPromptCallback(JavaScriptPromptCallback callback) override
1294 void JavaScriptPromptReply(const std::string& result) override
1297 std::unique_ptr<Dali::WebEngineHitTest> CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode) override
1301 bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, WebEngineHitTestCreatedCallback callback) override
1305 void ClearHistory() override
1308 void ClearAllTilesResources() override
1311 std::string GetUserAgent() const override
1313 return std::string();
1315 void SetUserAgent(const std::string& userAgent) override
1318 void SetSize(uint32_t width, uint32_t height) override
1321 void SetDocumentBackgroundColor(Dali::Vector4 color) override
1324 void ClearTilesWhenHidden(bool cleared) override
1327 void SetTileCoverAreaMultiplier(float multiplier) override
1330 void EnableCursorByClient(bool enabled) override
1333 std::string GetSelectedText() const override
1335 return std::string();
1337 bool SendTouchEvent(const TouchEvent& touch) override
1341 bool SendKeyEvent(const KeyEvent& event) override
1345 void EnableMouseEvents(bool enabled) override
1348 void EnableKeyEvents(bool enabled) override
1351 void SetFocus(bool focused) override
1354 void SetPageZoomFactor(float zoomFactor) override
1357 float GetPageZoomFactor() const override
1361 void SetTextZoomFactor(float zoomFactor) override
1364 float GetTextZoomFactor() const override
1368 float GetLoadProgressPercentage() const override
1372 void SetScaleFactor(float scaleFactor, Dali::Vector2 point) override
1375 float GetScaleFactor() const override
1379 void ActivateAccessibility(bool activated) override
1382 Accessibility::Address GetAccessibilityAddress() override
1384 return Accessibility::Address();
1386 bool SetVisibility(bool visible) override
1390 bool HighlightText(const std::string& text, FindOption options, uint32_t maxMatchCount) override
1394 void AddDynamicCertificatePath(const std::string& host, const std::string& certPath) override
1397 Dali::PixelData GetScreenshot(Dali::Rect<int32_t> viewArea, float scaleFactor) override
1399 return Dali::PixelData();
1401 bool GetScreenshotAsynchronously(Dali::Rect<int32_t> viewArea, float scaleFactor, ScreenshotCapturedCallback callback) override
1405 bool CheckVideoPlayingAsynchronously(VideoPlayingCallback callback) override
1409 void RegisterGeolocationPermissionCallback(GeolocationPermissionCallback callback) override
1412 void UpdateDisplayArea(Dali::Rect<int32_t> displayArea) override
1415 void EnableVideoHole(bool enabled) override
1418 bool SendHoverEvent(const HoverEvent& event) override
1422 bool SendWheelEvent(const WheelEvent& event) override
1426 void RegisterFrameRenderedCallback(WebEngineFrameRenderedCallback callback) override
1429 void RegisterPageLoadStartedCallback(WebEnginePageLoadCallback callback) override
1432 void RegisterPageLoadInProgressCallback(WebEnginePageLoadCallback callback) override
1435 void RegisterPageLoadFinishedCallback(WebEnginePageLoadCallback callback) override
1438 void RegisterPageLoadErrorCallback(WebEnginePageLoadErrorCallback callback) override
1441 void RegisterScrollEdgeReachedCallback(WebEngineScrollEdgeReachedCallback callback) override
1444 void RegisterUrlChangedCallback(WebEngineUrlChangedCallback callback) override
1447 void RegisterFormRepostDecidedCallback(WebEngineFormRepostDecidedCallback callback) override
1450 void RegisterConsoleMessageReceivedCallback(WebEngineConsoleMessageReceivedCallback callback) override
1453 void RegisterResponsePolicyDecidedCallback(WebEngineResponsePolicyDecidedCallback callback) override
1456 void RegisterNavigationPolicyDecidedCallback(WebEngineNavigationPolicyDecidedCallback callback) override
1459 void RegisterNewWindowCreatedCallback(WebEngineNewWindowCreatedCallback callback) override
1462 void RegisterCertificateConfirmedCallback(WebEngineCertificateCallback callback) override
1465 void RegisterSslCertificateChangedCallback(WebEngineCertificateCallback callback) override
1468 void RegisterHttpAuthHandlerCallback(WebEngineHttpAuthHandlerCallback callback) override
1471 void RegisterContextMenuShownCallback(WebEngineContextMenuShownCallback callback) override
1474 void RegisterContextMenuHiddenCallback(WebEngineContextMenuHiddenCallback callback) override
1477 void GetPlainTextAsynchronously(PlainTextReceivedCallback callback) override
1482 MockWebEngineSettings settings;
1483 MockWebEngineBackForwardList backForwardList;
1486 Dali::WebEnginePlugin* GetWebEnginePlugin()
1488 static MockWebEnginePlugin plugin;
1492 class MockWebEngineRequestInterceptor : public WebEngineRequestInterceptor
1495 MockWebEngineRequestInterceptor()
1499 Dali::WebEnginePlugin* GetWebEngine() const
1501 return GetWebEnginePlugin();
1504 std::string GetUrl() const override
1506 return "http://test.html";
1509 Dali::Property::Map GetHeaders() const override
1511 return mockHeadersMap;
1514 std::string GetMethod() const override
1519 bool Ignore() override
1524 bool SetResponseStatus(int statusCode, const std::string& customedStatusText) override
1529 bool AddResponseHeader(const std::string& fieldName, const std::string& fieldValue) override
1531 mockHeadersMap.Add(fieldName, fieldValue);
1535 bool AddResponseHeaders(const Dali::Property::Map& headers) override
1537 mockHeadersMap.Merge(headers);
1541 bool AddResponseBody(const int8_t* body, uint32_t length) override
1546 bool AddResponse(const std::string& headers, const int8_t* body, uint32_t length) override
1551 bool WriteResponseChunk(const int8_t* chunk, uint32_t length) override
1557 Dali::Property::Map mockHeadersMap;
1560 class WebEngine : public Dali::BaseObject
1565 mCurrentPlusOnePos(0),
1568 mScrollPosition(0, 0),
1569 mScrollSize(500, 500),
1570 mContentSize(500, 500)
1573 if(gInstanceCount == 1) // only first web engine need be saved.
1578 mockWebEngineSettings = new MockWebEngineSettings();
1579 mockWebEngineBackForwardList = new MockWebEngineBackForwardList();
1582 virtual ~WebEngine()
1587 gInstance = nullptr;
1590 delete mockWebEngineSettings;
1591 delete mockWebEngineBackForwardList;
1594 Dali::WebEngineSettings& GetSettings() const
1596 return *mockWebEngineSettings;
1599 Dali::WebEngineBackForwardList& GetBackForwardList() const
1601 return *mockWebEngineBackForwardList;
1604 void LoadUrl(const std::string& url)
1607 ConnectToGlobalSignal(&OnLoadUrl);
1610 std::string GetUrl() const
1615 std::string GetTitle() const
1617 return std::string("title");
1620 Dali::PixelData GetFavicon() const
1622 static int testGetFaviconCount = 0;
1623 if(testGetFaviconCount == 0)
1625 testGetFaviconCount++;
1626 uint8_t* faviconData = new uint8_t[16];
1627 memset(faviconData, 0xff, 16);
1628 return Dali::PixelData::New(faviconData, 16, 2, 2, Dali::Pixel::Format::RGBA8888, Dali::PixelData::ReleaseFunction::DELETE_ARRAY);
1632 return Dali::PixelData();
1636 bool CanGoForward() const
1638 return mHistory.size() > mCurrentPlusOnePos;
1643 ConnectToGlobalSignal(&OnGoForward);
1646 bool CanGoBack() const
1648 return mCurrentPlusOnePos > 1;
1653 ConnectToGlobalSignal(&OnGoBack);
1656 void EvaluateJavaScript(const std::string& script, std::function<void(const std::string&)> resultHandler)
1662 ConnectToGlobalSignal(&OnEvaluteJavaScript);
1664 mResultCallbacks.push_back(resultHandler);
1668 void RegisterJavaScriptAlertCallback(Dali::WebEnginePlugin::JavaScriptAlertCallback callback)
1672 ConnectToGlobalSignal(&OnJavaScriptAlert);
1673 mJavaScriptAlertCallback = callback;
1677 void RegisterJavaScriptConfirmCallback(Dali::WebEnginePlugin::JavaScriptConfirmCallback callback)
1681 ConnectToGlobalSignal(&OnJavaScriptConfirm);
1682 mJavaScriptConfirmCallback = callback;
1686 void RegisterJavaScriptPromptCallback(Dali::WebEnginePlugin::JavaScriptPromptCallback callback)
1690 ConnectToGlobalSignal(&OnJavaScriptPrompt);
1691 mJavaScriptPromptCallback = callback;
1695 std::unique_ptr<Dali::WebEngineHitTest> CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode)
1697 std::unique_ptr<Dali::WebEngineHitTest> hitTest(new MockWebEngineHitTest());
1701 bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback)
1705 ConnectToGlobalSignal(&OnHitTestCreated);
1706 mHitTestCreatedCallback = callback;
1713 ConnectToGlobalSignal(&OnClearHistory);
1716 std::string GetUserAgent() const
1721 void SetUserAgent(const std::string& userAgent)
1723 mUserAgent = userAgent;
1726 void ScrollBy(int32_t dx, int32_t dy)
1728 mScrollPosition += Dali::Vector2(dx, dy);
1729 if(mScrollPosition.y + mScrollSize.height > mContentSize.height)
1731 ConnectToGlobalSignal(&OnScrollEdge);
1735 bool ScrollEdgeBy(int32_t dx, int32_t dy)
1737 mScrollPosition += Dali::Vector2(dx, dy);
1738 if(mScrollPosition.y + mScrollSize.height > mContentSize.height)
1740 ConnectToGlobalSignal(&OnScrollEdge);
1745 void SetScrollPosition(int32_t x, int32_t y)
1747 mScrollPosition.x = x;
1748 mScrollPosition.y = y;
1751 Dali::Vector2 GetScrollPosition() const
1753 return mScrollPosition;
1756 Dali::Vector2 GetScrollSize() const
1761 Dali::Vector2 GetContentSize() const
1763 return mContentSize;
1766 void SetPageZoomFactor(float zoomFactor)
1768 mPageZoomFactor = zoomFactor;
1771 float GetPageZoomFactor() const
1773 return mPageZoomFactor;
1776 void SetTextZoomFactor(float zoomFactor)
1778 mTextZoomFactor = zoomFactor;
1781 float GetTextZoomFactor() const
1783 return mTextZoomFactor;
1786 float GetLoadProgressPercentage() const
1791 void SetScaleFactor(float scaleFactor, Dali::Vector2 point)
1793 mScaleFactor = scaleFactor;
1796 float GetScaleFactor() const
1798 return mScaleFactor;
1801 bool SetVisibility(bool visible)
1807 Dali::Accessibility::Address GetAccessibilityAddress()
1809 return {":9.99", "root"};
1812 Dali::PixelData GetScreenshot(Dali::Rect<int32_t> viewArea, float scaleFactor)
1814 uint32_t bufferSize = viewArea.width * viewArea.height * 4;
1815 uint8_t* pixel = new uint8_t[bufferSize];
1816 memset(pixel, 0xff, bufferSize);
1817 return Dali::PixelData::New(pixel, bufferSize, viewArea.width, viewArea.height, Dali::Pixel::Format::RGBA8888, Dali::PixelData::ReleaseFunction::DELETE_ARRAY);
1820 bool GetScreenshotAsynchronously(Dali::Rect<int32_t> viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback)
1824 ConnectToGlobalSignal(&OnScreenshotCaptured);
1825 mScreenshotCapturedCallback = callback;
1830 bool CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback)
1834 ConnectToGlobalSignal(&OnVideoPlaying);
1835 mVideoPlayingCallback = callback;
1840 void RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback)
1844 ConnectToGlobalSignal(&OnGeolocationPermission);
1845 mGeolocationPermissionCallback = callback;
1849 void RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback)
1851 mFrameRenderedCallback = callback;
1854 void RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
1856 mPageLoadStartedCallback = callback;
1859 void RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
1861 mPageLoadInProgressCallback = callback;
1864 void RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
1866 mPageLoadFinishedCallback = callback;
1869 void RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback)
1871 mPageLoadErrorCallback = callback;
1874 void RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback)
1876 mScrollEdgeReachedCallback = callback;
1879 void RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback)
1881 mUrlChangedCallback = callback;
1884 void RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback)
1886 mFormRepostDecidedCallback = callback;
1889 void RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback)
1891 mConsoleMessageCallback = callback;
1894 void RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback)
1896 mResponsePolicyDecisionCallback = callback;
1899 void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback)
1901 mNavigationPolicyDecisionCallback = callback;
1904 void RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback)
1906 mNewWindowCreatedCallback = callback;
1909 void RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
1911 mCertificateConfirmCallback = callback;
1914 void RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
1916 mSslCertificateChangedCallback = callback;
1919 void RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback)
1921 mHttpAuthHandlerCallback = callback;
1924 void RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback)
1926 mContextMenuShownCallback = callback;
1929 void RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback)
1931 mContextMenuHiddenCallback = callback;
1934 void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback)
1938 ConnectToGlobalSignal(&OnPlainTextReceived);
1939 mPlainTextReceivedCallback = callback;
1944 std::vector<std::string> mHistory;
1945 size_t mCurrentPlusOnePos;
1946 std::string mUserAgent;
1949 float mPageZoomFactor;
1950 float mTextZoomFactor;
1954 Dali::Vector2 mScrollPosition;
1955 Dali::Vector2 mScrollSize;
1956 Dali::Vector2 mContentSize;
1957 WebEngineBackForwardList* mockWebEngineBackForwardList;
1958 WebEngineSettings* mockWebEngineSettings;
1960 std::vector<Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback> mResultCallbacks;
1962 Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadStartedCallback;
1963 Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadInProgressCallback;
1964 Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadFinishedCallback;
1965 Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback mPageLoadErrorCallback;
1966 Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback mScrollEdgeReachedCallback;
1967 Dali::WebEnginePlugin::WebEngineUrlChangedCallback mUrlChangedCallback;
1968 Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback mFormRepostDecidedCallback;
1969 Dali::WebEnginePlugin::WebEngineFrameRenderedCallback mFrameRenderedCallback;
1970 Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback mConsoleMessageCallback;
1971 Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback mResponsePolicyDecisionCallback;
1972 Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback mNavigationPolicyDecisionCallback;
1973 Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback mNewWindowCreatedCallback;
1974 Dali::WebEnginePlugin::WebEngineCertificateCallback mCertificateConfirmCallback;
1975 Dali::WebEnginePlugin::WebEngineCertificateCallback mSslCertificateChangedCallback;
1976 Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback mHttpAuthHandlerCallback;
1977 Dali::WebEnginePlugin::WebEngineContextMenuShownCallback mContextMenuShownCallback;
1978 Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback mContextMenuHiddenCallback;
1979 Dali::WebEnginePlugin::JavaScriptAlertCallback mJavaScriptAlertCallback;
1980 Dali::WebEnginePlugin::JavaScriptConfirmCallback mJavaScriptConfirmCallback;
1981 Dali::WebEnginePlugin::JavaScriptPromptCallback mJavaScriptPromptCallback;
1982 Dali::WebEnginePlugin::ScreenshotCapturedCallback mScreenshotCapturedCallback;
1983 Dali::WebEnginePlugin::VideoPlayingCallback mVideoPlayingCallback;
1984 Dali::WebEnginePlugin::GeolocationPermissionCallback mGeolocationPermissionCallback;
1985 Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback mHitTestCreatedCallback;
1986 Dali::WebEnginePlugin::PlainTextReceivedCallback mPlainTextReceivedCallback;
1993 DisconnectFromGlobalSignal(&OnGoBack);
1995 if(gInstance && gInstance->CanGoBack())
1997 gInstance->mCurrentPlusOnePos--;
2004 DisconnectFromGlobalSignal(&OnGoForward);
2006 if(gInstance && gInstance->CanGoForward())
2008 gInstance->mCurrentPlusOnePos++;
2015 DisconnectFromGlobalSignal(&OnLoadUrl);
2019 if(gInstance->mHistory.size() > gInstance->mCurrentPlusOnePos)
2021 gInstance->mHistory.erase(gInstance->mHistory.begin() + gInstance->mCurrentPlusOnePos, gInstance->mHistory.end());
2023 gInstance->mHistory.push_back(gInstance->mUrl);
2024 gInstance->mCurrentPlusOnePos++;
2025 if(gInstance->mPageLoadStartedCallback)
2027 gInstance->mPageLoadStartedCallback(gInstance->mUrl);
2029 if(gInstance->mPageLoadInProgressCallback)
2031 gInstance->mPageLoadInProgressCallback(gInstance->mUrl);
2033 if(gInstance->mPageLoadFinishedCallback)
2035 gInstance->mPageLoadFinishedCallback(gInstance->mUrl);
2037 if(gInstance->mPageLoadErrorCallback)
2039 std::unique_ptr<Dali::WebEngineLoadError> error(new MockWebEngineLoadError(gInstance->mUrl));
2040 gInstance->mPageLoadErrorCallback(std::move(error));
2042 if(gInstance->mUrlChangedCallback)
2044 gInstance->mUrlChangedCallback("http://new-test");
2046 if(gInstance->mFormRepostDecidedCallback)
2048 std::unique_ptr<Dali::WebEngineFormRepostDecision> repostDecision(new MockWebEngineFormRepostDecision());
2049 gInstance->mFormRepostDecidedCallback(std::move(repostDecision));
2051 if(gInstance->mFrameRenderedCallback)
2053 gInstance->mFrameRenderedCallback();
2055 if(gInstance->mConsoleMessageCallback)
2057 std::unique_ptr<Dali::WebEngineConsoleMessage> message(new MockWebEngineConsoleMessage());
2058 gInstance->mConsoleMessageCallback(std::move(message));
2060 if(gInstance->mResponsePolicyDecisionCallback)
2062 std::unique_ptr<Dali::WebEnginePolicyDecision> policyDecision(new MockWebEnginePolicyDecision());
2063 gInstance->mResponsePolicyDecisionCallback(std::move(policyDecision));
2065 if(gInstance->mNavigationPolicyDecisionCallback)
2067 std::unique_ptr<Dali::WebEnginePolicyDecision> policyDecision(new MockWebEnginePolicyDecision());
2068 gInstance->mNavigationPolicyDecisionCallback(std::move(policyDecision));
2070 if(gInstance->mNewWindowCreatedCallback)
2072 Dali::WebEnginePlugin* plugin = 0;
2073 gInstance->mNewWindowCreatedCallback(plugin);
2075 if(gInstance->mCertificateConfirmCallback)
2077 std::unique_ptr<Dali::WebEngineCertificate> certificate(new MockWebEngineCertificate());
2078 gInstance->mCertificateConfirmCallback(std::move(certificate));
2080 if(gInstance->mSslCertificateChangedCallback)
2082 std::unique_ptr<Dali::WebEngineCertificate> sslCertificate(new MockWebEngineCertificate());
2083 gInstance->mSslCertificateChangedCallback(std::move(sslCertificate));
2085 if(gInstance->mHttpAuthHandlerCallback)
2087 std::unique_ptr<Dali::WebEngineHttpAuthHandler> handler(new MockWebEngineHttpAuthHandler());
2088 gInstance->mHttpAuthHandlerCallback(std::move(handler));
2090 if(gInstance->mContextMenuShownCallback)
2092 std::unique_ptr<Dali::WebEngineContextMenu> menu(new MockWebEngineContextMenu());
2093 gInstance->mContextMenuShownCallback(std::move(menu));
2095 if(gInstance->mContextMenuHiddenCallback)
2097 std::unique_ptr<Dali::WebEngineContextMenu> hiddenMenu(new MockWebEngineContextMenu());
2098 gInstance->mContextMenuHiddenCallback(std::move(hiddenMenu));
2106 DisconnectFromGlobalSignal(&OnScrollEdge);
2108 if(gInstance && gInstance->mScrollEdgeReachedCallback)
2110 gInstance->mScrollEdgeReachedCallback(Dali::WebEnginePlugin::ScrollEdge::BOTTOM);
2116 bool OnEvaluteJavaScript()
2118 DisconnectFromGlobalSignal(&OnEvaluteJavaScript);
2122 for(auto& func : gInstance->mResultCallbacks)
2126 gInstance->mResultCallbacks.clear();
2131 bool OnJavaScriptAlert()
2133 DisconnectFromGlobalSignal(&OnJavaScriptAlert);
2136 gInstance->mJavaScriptAlertCallback("this is an alert popup.");
2141 bool OnJavaScriptConfirm()
2143 DisconnectFromGlobalSignal(&OnJavaScriptConfirm);
2146 gInstance->mJavaScriptConfirmCallback("this is a confirm popup.");
2151 bool OnJavaScriptPrompt()
2153 DisconnectFromGlobalSignal(&OnJavaScriptPrompt);
2156 gInstance->mJavaScriptPromptCallback("this is a prompt pompt.", "");
2161 bool OnScreenshotCaptured()
2163 DisconnectFromGlobalSignal(&OnScreenshotCaptured);
2166 uint8_t* pixel = new uint8_t[2 * 2 * 4];
2167 memset(pixel, 0xff, 2 * 2 * 4);
2168 Dali::PixelData data = Dali::PixelData::New(pixel, 2 * 2 * 4, 2, 2, Dali::Pixel::Format::RGBA8888, Dali::PixelData::ReleaseFunction::DELETE_ARRAY);
2169 gInstance->mScreenshotCapturedCallback(data);
2174 bool OnVideoPlaying()
2176 DisconnectFromGlobalSignal(&OnVideoPlaying);
2179 gInstance->mVideoPlayingCallback(true);
2184 bool OnGeolocationPermission()
2186 DisconnectFromGlobalSignal(&OnGeolocationPermission);
2189 gInstance->mGeolocationPermissionCallback("", "");
2194 bool OnHitTestCreated()
2196 DisconnectFromGlobalSignal(&OnHitTestCreated);
2199 std::unique_ptr<Dali::WebEngineHitTest> test(new MockWebEngineHitTest());
2200 gInstance->mHitTestCreatedCallback(std::move(test));
2205 bool OnClearHistory()
2207 DisconnectFromGlobalSignal(&OnClearHistory);
2209 if(gInstance && gInstance->mCurrentPlusOnePos)
2211 std::string url = gInstance->mHistory[gInstance->mCurrentPlusOnePos - 1];
2212 std::vector<std::string>().swap(gInstance->mHistory);
2213 gInstance->mHistory.push_back(url);
2214 gInstance->mCurrentPlusOnePos = 1;
2219 bool OnSecurityOriginAcquired()
2221 DisconnectFromGlobalSignal(&OnSecurityOriginAcquired);
2222 if(gWebEngineContextInstance)
2224 std::vector<std::unique_ptr<Dali::WebEngineSecurityOrigin>> securityOriginList;
2225 std::unique_ptr<Dali::WebEngineSecurityOrigin> origin(new MockWebEngineSecurityOrigin());
2226 securityOriginList.push_back(std::move(origin));
2227 gWebEngineContextInstance->mSecurityOriginAcquiredCallback(securityOriginList);
2232 bool OnStorageUsageAcquired()
2234 DisconnectFromGlobalSignal(&OnStorageUsageAcquired);
2235 if(gWebEngineContextInstance)
2237 gWebEngineContextInstance->mStorageUsageAcquiredCallback(0);
2242 bool OnFormPasswordAcquired()
2244 DisconnectFromGlobalSignal(&OnFormPasswordAcquired);
2245 if(gWebEngineContextInstance)
2247 std::vector<std::unique_ptr<Dali::WebEngineContext::PasswordData>> formPasswordList;
2248 std::unique_ptr<Dali::WebEngineContext::PasswordData> data(new Dali::WebEngineContext::PasswordData());
2249 data->url = "http://test.html";
2250 data->useFingerprint = false;
2251 formPasswordList.push_back(std::move(data));
2252 gWebEngineContextInstance->mFormPasswordAcquiredCallback(formPasswordList);
2257 bool OnDownloadStarted()
2259 DisconnectFromGlobalSignal(&OnDownloadStarted);
2260 if(gWebEngineContextInstance)
2262 gWebEngineContextInstance->mDownloadStartedCallback("http://test.html");
2267 bool OnMimeOverridden()
2269 DisconnectFromGlobalSignal(&OnMimeOverridden);
2270 if(gWebEngineContextInstance)
2272 std::string newMime;
2273 gWebEngineContextInstance->mMimeOverriddenCallback("http://test.html", "txt/xml", newMime);
2278 bool OnRequestIntercepted()
2280 DisconnectFromGlobalSignal(&OnRequestIntercepted);
2281 if(gWebEngineContextInstance)
2283 Dali::WebEngineRequestInterceptorPtr interceptor = new MockWebEngineRequestInterceptor();
2284 gWebEngineContextInstance->mRequestInterceptedCallback(interceptor);
2289 bool OnChangesWatch()
2291 DisconnectFromGlobalSignal(&OnChangesWatch);
2292 if(gMockWebEngineCookieManager)
2294 gMockWebEngineCookieManager->mChangesWatchCallback();
2299 bool OnPlainTextReceived()
2301 DisconnectFromGlobalSignal(&OnPlainTextReceived);
2304 std::string dummyResultText;
2305 gInstance->mPlainTextReceivedCallback(dummyResultText);
2312 inline WebEngine& GetImplementation(Dali::WebEngine& webEngine)
2314 DALI_ASSERT_ALWAYS(webEngine && "WebEngine handle is empty.");
2315 BaseObject& handle = webEngine.GetBaseObject();
2316 return static_cast<Internal::Adaptor::WebEngine&>(handle);
2319 inline const WebEngine& GetImplementation(const Dali::WebEngine& webEngine)
2321 DALI_ASSERT_ALWAYS(webEngine && "WebEngine handle is empty.");
2322 const BaseObject& handle = webEngine.GetBaseObject();
2323 return static_cast<const Internal::Adaptor::WebEngine&>(handle);
2326 } // namespace Adaptor
2328 } // namespace Internal
2330 // Dali::WebEngine Implementation
2331 WebEngine::WebEngine()
2335 WebEngine::WebEngine(Internal::Adaptor::WebEngine* internal)
2336 : BaseHandle(internal)
2340 WebEngine::~WebEngine()
2344 WebEngine WebEngine::New()
2346 Internal::Adaptor::WebEngine* baseObject = new Internal::Adaptor::WebEngine();
2348 return WebEngine(baseObject);
2351 Dali::WebEngineContext* WebEngine::GetContext()
2353 return Internal::Adaptor::GetContext();
2356 Dali::WebEngineCookieManager* WebEngine::GetCookieManager()
2358 return Internal::Adaptor::GetCookieManager();
2361 WebEngine::WebEngine(const WebEngine& WebEngine)
2362 : BaseHandle(WebEngine)
2366 WebEngine& WebEngine::operator=(const WebEngine& webEngine)
2368 BaseHandle::operator=(webEngine);
2372 WebEngine WebEngine::DownCast(BaseHandle handle)
2374 return WebEngine(dynamic_cast<Internal::Adaptor::WebEngine*>(handle.GetObjectPtr()));
2377 void WebEngine::Create(uint32_t width, uint32_t height, const std::string& locale, const std::string& timezoneId)
2381 void WebEngine::Create(uint32_t width, uint32_t height, uint32_t argc, char** argv)
2385 void WebEngine::Destroy()
2389 WebEngineSettings& WebEngine::GetSettings() const
2391 return Internal::Adaptor::GetImplementation(*this).GetSettings();
2394 WebEngineBackForwardList& WebEngine::GetBackForwardList() const
2396 return Internal::Adaptor::GetImplementation(*this).GetBackForwardList();
2399 void WebEngine::LoadUrl(const std::string& url)
2401 return Internal::Adaptor::GetImplementation(*this).LoadUrl(url);
2404 std::string WebEngine::GetTitle() const
2406 return Internal::Adaptor::GetImplementation(*this).GetTitle();
2409 Dali::PixelData WebEngine::GetFavicon() const
2411 return Internal::Adaptor::GetImplementation(*this).GetFavicon();
2414 std::string WebEngine::GetUrl() const
2416 return Internal::Adaptor::GetImplementation(*this).GetUrl();
2419 Dali::WebEnginePlugin* WebEngine::GetPlugin() const
2421 return Internal::Adaptor::GetWebEnginePlugin();
2424 NativeImageSourcePtr WebEngine::GetNativeImageSource()
2427 Dali::NativeImageSourcePtr sourcePtr = Dali::NativeImageSource::New(source);
2431 void WebEngine::LoadHtmlString(const std::string& htmlString)
2435 bool WebEngine::LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl)
2440 bool WebEngine::LoadContents(const int8_t* contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri)
2445 void WebEngine::Reload()
2449 bool WebEngine::ReloadWithoutCache()
2454 void WebEngine::StopLoading()
2458 void WebEngine::Suspend()
2462 void WebEngine::Resume()
2466 void WebEngine::SuspendNetworkLoading()
2470 void WebEngine::ResumeNetworkLoading()
2474 bool WebEngine::AddCustomHeader(const std::string& name, const std::string& value)
2479 bool WebEngine::RemoveCustomHeader(const std::string& name)
2484 uint32_t WebEngine::StartInspectorServer(uint32_t port)
2489 bool WebEngine::StopInspectorServer()
2494 bool WebEngine::CanGoForward()
2496 return Internal::Adaptor::GetImplementation(*this).CanGoForward();
2499 void WebEngine::GoForward()
2501 Internal::Adaptor::GetImplementation(*this).GoForward();
2504 bool WebEngine::CanGoBack()
2506 return Internal::Adaptor::GetImplementation(*this).CanGoBack();
2509 void WebEngine::GoBack()
2511 Internal::Adaptor::GetImplementation(*this).GoBack();
2514 void WebEngine::EvaluateJavaScript(const std::string& script, std::function<void(const std::string&)> resultHandler)
2516 Internal::Adaptor::GetImplementation(*this).EvaluateJavaScript(script, resultHandler);
2519 void WebEngine::AddJavaScriptMessageHandler(const std::string& exposedObjectName, std::function<void(const std::string&)> handler)
2523 void WebEngine::RegisterJavaScriptAlertCallback(Dali::WebEnginePlugin::JavaScriptAlertCallback callback)
2525 Internal::Adaptor::GetImplementation(*this).RegisterJavaScriptAlertCallback(callback);
2528 void WebEngine::JavaScriptAlertReply()
2532 void WebEngine::RegisterJavaScriptConfirmCallback(Dali::WebEnginePlugin::JavaScriptConfirmCallback callback)
2534 Internal::Adaptor::GetImplementation(*this).RegisterJavaScriptConfirmCallback(callback);
2537 void WebEngine::JavaScriptConfirmReply(bool confirmed)
2541 void WebEngine::RegisterJavaScriptPromptCallback(Dali::WebEnginePlugin::JavaScriptPromptCallback callback)
2543 Internal::Adaptor::GetImplementation(*this).RegisterJavaScriptPromptCallback(callback);
2546 void WebEngine::JavaScriptPromptReply(const std::string& result)
2550 std::unique_ptr<Dali::WebEngineHitTest> WebEngine::CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode)
2552 return Internal::Adaptor::GetImplementation(*this).CreateHitTest(x, y, mode);
2555 bool WebEngine::CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback)
2557 return Internal::Adaptor::GetImplementation(*this).CreateHitTestAsynchronously(x, y, mode, callback);
2560 void WebEngine::ClearAllTilesResources()
2564 void WebEngine::ClearHistory()
2566 Internal::Adaptor::GetImplementation(*this).ClearHistory();
2569 void WebEngine::SetScaleFactor(float scaleFactor, Dali::Vector2 point)
2571 Internal::Adaptor::GetImplementation(*this).SetScaleFactor(scaleFactor, point);
2574 float WebEngine::GetScaleFactor() const
2576 return Internal::Adaptor::GetImplementation(*this).GetScaleFactor();
2579 bool WebEngine::SetVisibility(bool visible)
2581 return Internal::Adaptor::GetImplementation(*this).SetVisibility(visible);
2584 void WebEngine::ActivateAccessibility(bool activated)
2588 Accessibility::Address WebEngine::GetAccessibilityAddress()
2590 return Internal::Adaptor::GetImplementation(*this).GetAccessibilityAddress();
2593 bool WebEngine::HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount)
2598 void WebEngine::AddDynamicCertificatePath(const std::string& host, const std::string& certPath)
2602 Dali::PixelData WebEngine::GetScreenshot(Dali::Rect<int32_t> viewArea, float scaleFactor)
2604 return Internal::Adaptor::GetImplementation(*this).GetScreenshot(viewArea, scaleFactor);
2607 bool WebEngine::GetScreenshotAsynchronously(Dali::Rect<int32_t> viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback)
2609 return Internal::Adaptor::GetImplementation(*this).GetScreenshotAsynchronously(viewArea, scaleFactor, callback);
2612 bool WebEngine::CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback)
2614 return Internal::Adaptor::GetImplementation(*this).CheckVideoPlayingAsynchronously(callback);
2617 void WebEngine::RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback)
2619 Internal::Adaptor::GetImplementation(*this).RegisterGeolocationPermissionCallback(callback);
2622 std::string WebEngine::GetUserAgent() const
2624 return Internal::Adaptor::GetImplementation(*this).GetUserAgent();
2627 void WebEngine::SetUserAgent(const std::string& userAgent)
2629 Internal::Adaptor::GetImplementation(*this).SetUserAgent(userAgent);
2632 void WebEngine::ScrollBy(int32_t dx, int32_t dy)
2634 Internal::Adaptor::GetImplementation(*this).ScrollBy(dx, dy);
2637 bool WebEngine::ScrollEdgeBy(int32_t dx, int32_t dy)
2639 return Internal::Adaptor::GetImplementation(*this).ScrollEdgeBy(dx, dy);
2642 void WebEngine::SetScrollPosition(int32_t x, int32_t y)
2644 Internal::Adaptor::GetImplementation(*this).SetScrollPosition(x, y);
2647 Dali::Vector2 WebEngine::GetScrollPosition() const
2649 return Internal::Adaptor::GetImplementation(*this).GetScrollPosition();
2652 Dali::Vector2 WebEngine::GetScrollSize() const
2654 return Internal::Adaptor::GetImplementation(*this).GetScrollSize();
2657 Dali::Vector2 WebEngine::GetContentSize() const
2659 return Internal::Adaptor::GetImplementation(*this).GetContentSize();
2662 void WebEngine::SetSize(uint32_t width, uint32_t height)
2666 void WebEngine::SetDocumentBackgroundColor(Dali::Vector4 color)
2670 void WebEngine::ClearTilesWhenHidden(bool cleared)
2674 void WebEngine::SetTileCoverAreaMultiplier(float multiplier)
2678 void WebEngine::EnableCursorByClient(bool enabled)
2682 std::string WebEngine::GetSelectedText() const
2687 bool WebEngine::SendTouchEvent(const TouchEvent& touch)
2692 bool WebEngine::SendKeyEvent(const KeyEvent& event)
2697 bool WebEngine::SendHoverEvent(const HoverEvent& event)
2702 bool WebEngine::SendWheelEvent(const WheelEvent& event)
2707 void WebEngine::SetFocus(bool focused)
2711 void WebEngine::SetPageZoomFactor(float zoomFactor)
2713 Internal::Adaptor::GetImplementation(*this).SetPageZoomFactor(zoomFactor);
2716 float WebEngine::GetPageZoomFactor() const
2718 return Internal::Adaptor::GetImplementation(*this).GetPageZoomFactor();
2721 void WebEngine::SetTextZoomFactor(float zoomFactor)
2723 Internal::Adaptor::GetImplementation(*this).SetTextZoomFactor(zoomFactor);
2726 float WebEngine::GetTextZoomFactor() const
2728 return Internal::Adaptor::GetImplementation(*this).GetTextZoomFactor();
2731 float WebEngine::GetLoadProgressPercentage() const
2733 return Internal::Adaptor::GetImplementation(*this).GetLoadProgressPercentage();
2736 void WebEngine::UpdateDisplayArea(Dali::Rect<int32_t> displayArea)
2740 void WebEngine::EnableVideoHole(bool enabled)
2744 void WebEngine::EnableMouseEvents(bool enabled)
2748 void WebEngine::EnableKeyEvents(bool enabled)
2752 void WebEngine::RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback)
2754 Internal::Adaptor::GetImplementation(*this).RegisterFrameRenderedCallback(callback);
2757 void WebEngine::RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
2759 Internal::Adaptor::GetImplementation(*this).RegisterPageLoadStartedCallback(callback);
2762 void WebEngine::RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
2764 Internal::Adaptor::GetImplementation(*this).RegisterPageLoadInProgressCallback(callback);
2767 void WebEngine::RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
2769 Internal::Adaptor::GetImplementation(*this).RegisterPageLoadFinishedCallback(callback);
2772 void WebEngine::RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback)
2774 Internal::Adaptor::GetImplementation(*this).RegisterPageLoadErrorCallback(callback);
2777 void WebEngine::RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback)
2779 Internal::Adaptor::GetImplementation(*this).RegisterScrollEdgeReachedCallback(callback);
2782 void WebEngine::RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback)
2784 Internal::Adaptor::GetImplementation(*this).RegisterUrlChangedCallback(callback);
2787 void WebEngine::RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback)
2789 Internal::Adaptor::GetImplementation(*this).RegisterFormRepostDecidedCallback(callback);
2792 void WebEngine::RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback)
2794 Internal::Adaptor::GetImplementation(*this).RegisterConsoleMessageReceivedCallback(callback);
2797 void WebEngine::RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback)
2799 Internal::Adaptor::GetImplementation(*this).RegisterResponsePolicyDecidedCallback(callback);
2802 void WebEngine::RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback)
2804 Internal::Adaptor::GetImplementation(*this).RegisterNavigationPolicyDecidedCallback(callback);
2807 void WebEngine::RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback)
2809 Internal::Adaptor::GetImplementation(*this).RegisterNewWindowCreatedCallback(callback);
2812 void WebEngine::RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
2814 Internal::Adaptor::GetImplementation(*this).RegisterCertificateConfirmedCallback(callback);
2817 void WebEngine::RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
2819 Internal::Adaptor::GetImplementation(*this).RegisterSslCertificateChangedCallback(callback);
2822 void WebEngine::RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback)
2824 Internal::Adaptor::GetImplementation(*this).RegisterHttpAuthHandlerCallback(callback);
2827 void WebEngine::RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback)
2829 Internal::Adaptor::GetImplementation(*this).RegisterContextMenuShownCallback(callback);
2832 void WebEngine::RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback)
2834 Internal::Adaptor::GetImplementation(*this).RegisterContextMenuHiddenCallback(callback);
2837 void WebEngine::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback)
2839 Internal::Adaptor::GetImplementation(*this).GetPlainTextAsynchronously(callback);