2 * Copyright (c) 2022 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 std::string& 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 WebEngineFrameRenderedSignalType& FrameRenderedSignal() override { return frameRenderedSignal; }
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 RegisterCertificateConfirmedCallback(WebEngineCertificateCallback callback) override {}
1244 void RegisterSslCertificateChangedCallback(WebEngineCertificateCallback callback) override {}
1245 void RegisterHttpAuthHandlerCallback(WebEngineHttpAuthHandlerCallback callback) override {}
1246 void RegisterContextMenuShownCallback(WebEngineContextMenuShownCallback callback) override {}
1247 void RegisterContextMenuHiddenCallback(WebEngineContextMenuHiddenCallback callback) override {}
1248 void GetPlainTextAsynchronously(PlainTextReceivedCallback callback) override {}
1250 MockWebEngineSettings settings;
1251 MockWebEngineBackForwardList backForwardList;
1252 WebEngineFrameRenderedSignalType frameRenderedSignal;
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 Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& FrameRenderedSignal()
1619 return mFrameRenderedSignal;
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 RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
1674 mCertificateConfirmCallback = callback;
1677 void RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
1679 mSslCertificateChangedCallback = callback;
1682 void RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback)
1684 mHttpAuthHandlerCallback = callback;
1687 void RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback)
1689 mContextMenuShownCallback = callback;
1692 void RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback)
1694 mContextMenuHiddenCallback = callback;
1697 void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback)
1701 ConnectToGlobalSignal(&OnPlainTextReceived);
1702 mPlainTextReceivedCallback = callback;
1707 std::vector<std::string> mHistory;
1708 size_t mCurrentPlusOnePos;
1709 std::string mUserAgent;
1711 Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType mFrameRenderedSignal;
1714 float mPageZoomFactor;
1715 float mTextZoomFactor;
1718 Dali::Vector2 mScrollPosition;
1719 Dali::Vector2 mScrollSize;
1720 Dali::Vector2 mContentSize;
1721 WebEngineBackForwardList* mockWebEngineBackForwardList;
1722 WebEngineSettings* mockWebEngineSettings;
1724 std::vector<Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback> mResultCallbacks;
1726 Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadStartedCallback;
1727 Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadInProgressCallback;
1728 Dali::WebEnginePlugin::WebEnginePageLoadCallback mPageLoadFinishedCallback;
1729 Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback mPageLoadErrorCallback;
1730 Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback mScrollEdgeReachedCallback;
1731 Dali::WebEnginePlugin::WebEngineUrlChangedCallback mUrlChangedCallback;
1732 Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback mFormRepostDecidedCallback;
1733 Dali::WebEnginePlugin::WebEngineFrameRenderedCallback mFrameRenderedCallback;
1734 Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback mConsoleMessageCallback;
1735 Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback mResponsePolicyDecisionCallback;
1736 Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback mNavigationPolicyDecisionCallback;
1737 Dali::WebEnginePlugin::WebEngineCertificateCallback mCertificateConfirmCallback;
1738 Dali::WebEnginePlugin::WebEngineCertificateCallback mSslCertificateChangedCallback;
1739 Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback mHttpAuthHandlerCallback;
1740 Dali::WebEnginePlugin::WebEngineContextMenuShownCallback mContextMenuShownCallback;
1741 Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback mContextMenuHiddenCallback;
1742 Dali::WebEnginePlugin::JavaScriptAlertCallback mJavaScriptAlertCallback;
1743 Dali::WebEnginePlugin::JavaScriptConfirmCallback mJavaScriptConfirmCallback;
1744 Dali::WebEnginePlugin::JavaScriptPromptCallback mJavaScriptPromptCallback;
1745 Dali::WebEnginePlugin::ScreenshotCapturedCallback mScreenshotCapturedCallback;
1746 Dali::WebEnginePlugin::VideoPlayingCallback mVideoPlayingCallback;
1747 Dali::WebEnginePlugin::GeolocationPermissionCallback mGeolocationPermissionCallback;
1748 Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback mHitTestCreatedCallback;
1749 Dali::WebEnginePlugin::PlainTextReceivedCallback mPlainTextReceivedCallback;
1758 DisconnectFromGlobalSignal( &OnGoBack );
1760 if( gInstance && gInstance->CanGoBack() )
1762 gInstance->mCurrentPlusOnePos--;
1769 DisconnectFromGlobalSignal( &OnGoForward );
1771 if( gInstance && gInstance->CanGoForward() )
1773 gInstance->mCurrentPlusOnePos++;
1780 DisconnectFromGlobalSignal( &OnLoadUrl );
1784 if( gInstance->mHistory.size() > gInstance->mCurrentPlusOnePos )
1786 gInstance->mHistory.erase( gInstance->mHistory.begin() + gInstance->mCurrentPlusOnePos, gInstance->mHistory.end() );
1788 gInstance->mHistory.push_back( gInstance->mUrl );
1789 gInstance->mCurrentPlusOnePos++;
1790 if (gInstance->mPageLoadStartedCallback)
1792 gInstance->mPageLoadStartedCallback( gInstance->mUrl );
1794 if (gInstance->mPageLoadInProgressCallback)
1796 gInstance->mPageLoadInProgressCallback( gInstance->mUrl );
1798 if (gInstance->mPageLoadFinishedCallback)
1800 gInstance->mPageLoadFinishedCallback( gInstance->mUrl );
1802 if (gInstance->mPageLoadErrorCallback)
1804 std::unique_ptr<Dali::WebEngineLoadError> error(new MockWebEngineLoadError(gInstance->mUrl));
1805 gInstance->mPageLoadErrorCallback(std::move(error));
1807 if (gInstance->mUrlChangedCallback)
1809 gInstance->mUrlChangedCallback( "http://new-test" );
1811 if (gInstance->mFormRepostDecidedCallback)
1813 std::unique_ptr<Dali::WebEngineFormRepostDecision> repostDecision(new MockWebEngineFormRepostDecision());
1814 gInstance->mFormRepostDecidedCallback(std::move(repostDecision));
1816 gInstance->mFrameRenderedSignal.Emit();
1817 if (gInstance->mFrameRenderedCallback)
1819 gInstance->mFrameRenderedCallback();
1821 if (gInstance->mConsoleMessageCallback)
1823 std::unique_ptr<Dali::WebEngineConsoleMessage> message(new MockWebEngineConsoleMessage());
1824 gInstance->mConsoleMessageCallback(std::move(message));
1826 if (gInstance->mResponsePolicyDecisionCallback)
1828 std::unique_ptr<Dali::WebEnginePolicyDecision> policyDecision(new MockWebEnginePolicyDecision());
1829 gInstance->mResponsePolicyDecisionCallback(std::move(policyDecision));
1831 if (gInstance->mNavigationPolicyDecisionCallback)
1833 std::unique_ptr<Dali::WebEnginePolicyDecision> policyDecision(new MockWebEnginePolicyDecision());
1834 gInstance->mNavigationPolicyDecisionCallback(std::move(policyDecision));
1836 if (gInstance->mCertificateConfirmCallback)
1838 std::unique_ptr<Dali::WebEngineCertificate> certificate(new MockWebEngineCertificate());
1839 gInstance->mCertificateConfirmCallback(std::move(certificate));
1841 if (gInstance->mSslCertificateChangedCallback)
1843 std::unique_ptr<Dali::WebEngineCertificate> sslCertificate(new MockWebEngineCertificate());
1844 gInstance->mSslCertificateChangedCallback(std::move(sslCertificate));
1846 if (gInstance->mHttpAuthHandlerCallback)
1848 std::unique_ptr<Dali::WebEngineHttpAuthHandler> handler(new MockWebEngineHttpAuthHandler());
1849 gInstance->mHttpAuthHandlerCallback(std::move(handler));
1851 if (gInstance->mContextMenuShownCallback)
1853 std::unique_ptr<Dali::WebEngineContextMenu> menu(new MockWebEngineContextMenu());
1854 gInstance->mContextMenuShownCallback(std::move(menu));
1856 if (gInstance->mContextMenuHiddenCallback)
1858 std::unique_ptr<Dali::WebEngineContextMenu> hiddenMenu(new MockWebEngineContextMenu());
1859 gInstance->mContextMenuHiddenCallback(std::move(hiddenMenu));
1867 DisconnectFromGlobalSignal( &OnScrollEdge );
1869 if( gInstance && gInstance->mScrollEdgeReachedCallback )
1871 gInstance->mScrollEdgeReachedCallback( Dali::WebEnginePlugin::ScrollEdge::BOTTOM );
1877 bool OnEvaluteJavaScript()
1879 DisconnectFromGlobalSignal( &OnEvaluteJavaScript );
1883 for( auto& func : gInstance->mResultCallbacks )
1887 gInstance->mResultCallbacks.clear();
1892 bool OnJavaScriptAlert()
1894 DisconnectFromGlobalSignal( &OnJavaScriptAlert );
1897 gInstance->mJavaScriptAlertCallback( "this is an alert popup." );
1902 bool OnJavaScriptConfirm()
1904 DisconnectFromGlobalSignal( &OnJavaScriptConfirm );
1907 gInstance->mJavaScriptConfirmCallback( "this is a confirm popup." );
1912 bool OnJavaScriptPrompt()
1914 DisconnectFromGlobalSignal( &OnJavaScriptPrompt );
1917 gInstance->mJavaScriptPromptCallback( "this is a prompt pompt.", "" );
1922 bool OnScreenshotCaptured()
1924 DisconnectFromGlobalSignal( &OnScreenshotCaptured );
1927 uint8_t* pixel = new uint8_t[ 2 * 2 * 4 ];
1928 memset(pixel, 0xff, 2 * 2 * 4);
1929 Dali::PixelData data = Dali::PixelData::New( pixel, 2 * 2 * 4, 2, 2,
1930 Dali::Pixel::Format::RGBA8888,
1931 Dali::PixelData::ReleaseFunction::DELETE_ARRAY );
1932 gInstance->mScreenshotCapturedCallback( data );
1937 bool OnVideoPlaying()
1939 DisconnectFromGlobalSignal( &OnVideoPlaying );
1942 gInstance->mVideoPlayingCallback( true );
1947 bool OnGeolocationPermission()
1949 DisconnectFromGlobalSignal( &OnGeolocationPermission );
1952 gInstance->mGeolocationPermissionCallback( "", "" );
1957 bool OnHitTestCreated()
1959 DisconnectFromGlobalSignal(&OnHitTestCreated);
1962 std::unique_ptr<Dali::WebEngineHitTest> test(new MockWebEngineHitTest());
1963 gInstance->mHitTestCreatedCallback(std::move(test));
1968 bool OnClearHistory()
1970 DisconnectFromGlobalSignal( &OnClearHistory );
1972 if( gInstance && gInstance->mCurrentPlusOnePos )
1974 std::string url = gInstance->mHistory[ gInstance->mCurrentPlusOnePos - 1 ];
1975 std::vector< std::string >().swap( gInstance->mHistory );
1976 gInstance->mHistory.push_back( url );
1977 gInstance->mCurrentPlusOnePos = 1;
1982 bool OnSecurityOriginAcquired()
1984 DisconnectFromGlobalSignal(&OnSecurityOriginAcquired);
1985 if (gWebEngineContextInstance)
1987 std::vector<std::unique_ptr<Dali::WebEngineSecurityOrigin>> securityOriginList;
1988 std::unique_ptr<Dali::WebEngineSecurityOrigin> origin(new MockWebEngineSecurityOrigin());
1989 securityOriginList.push_back(std::move(origin));
1990 gWebEngineContextInstance->mSecurityOriginAcquiredCallback(securityOriginList);
1995 bool OnStorageUsageAcquired()
1997 DisconnectFromGlobalSignal(&OnStorageUsageAcquired);
1998 if (gWebEngineContextInstance)
2000 gWebEngineContextInstance->mStorageUsageAcquiredCallback(0);
2005 bool OnFormPasswordAcquired()
2007 DisconnectFromGlobalSignal(&OnFormPasswordAcquired);
2008 if (gWebEngineContextInstance)
2010 std::vector<std::unique_ptr<Dali::WebEngineContext::PasswordData>> formPasswordList;
2011 std::unique_ptr<Dali::WebEngineContext::PasswordData> data(new Dali::WebEngineContext::PasswordData());
2012 data->url = "http://test.html";
2013 data->useFingerprint = false;
2014 formPasswordList.push_back(std::move(data));
2015 gWebEngineContextInstance->mFormPasswordAcquiredCallback(formPasswordList);
2020 bool OnDownloadStarted()
2022 DisconnectFromGlobalSignal(&OnDownloadStarted);
2023 if (gWebEngineContextInstance)
2025 gWebEngineContextInstance->mDownloadStartedCallback("http://test.html");
2030 bool OnMimeOverridden()
2032 DisconnectFromGlobalSignal(&OnMimeOverridden);
2033 if (gWebEngineContextInstance)
2035 std::string newMime;
2036 gWebEngineContextInstance->mMimeOverriddenCallback("http://test.html", "txt/xml", newMime);
2041 bool OnRequestIntercepted()
2043 DisconnectFromGlobalSignal(&OnRequestIntercepted);
2044 if (gWebEngineContextInstance)
2046 Dali::WebEngineRequestInterceptorPtr interceptor = new MockWebEngineRequestInterceptor();
2047 gWebEngineContextInstance->mRequestInterceptedCallback(interceptor);
2052 bool OnChangesWatch()
2054 DisconnectFromGlobalSignal(&OnChangesWatch);
2055 if (gMockWebEngineCookieManager)
2057 gMockWebEngineCookieManager->mChangesWatchCallback();
2062 bool OnPlainTextReceived()
2064 DisconnectFromGlobalSignal(&OnPlainTextReceived);
2067 std::string dummyResultText;
2068 gInstance->mPlainTextReceivedCallback(dummyResultText);
2075 inline WebEngine& GetImplementation( Dali::WebEngine& webEngine )
2077 DALI_ASSERT_ALWAYS( webEngine && "WebEngine handle is empty." );
2078 BaseObject& handle = webEngine.GetBaseObject();
2079 return static_cast< Internal::Adaptor::WebEngine& >( handle );
2082 inline const WebEngine& GetImplementation( const Dali::WebEngine& webEngine )
2084 DALI_ASSERT_ALWAYS( webEngine && "WebEngine handle is empty." );
2085 const BaseObject& handle = webEngine.GetBaseObject();
2086 return static_cast< const Internal::Adaptor::WebEngine& >( handle );
2089 } // namespace Adaptor
2091 } // namespace Internal
2093 // Dali::WebEngine Implementation
2094 WebEngine::WebEngine()
2098 WebEngine::WebEngine( Internal::Adaptor::WebEngine* internal )
2099 : BaseHandle( internal )
2103 WebEngine::~WebEngine()
2107 WebEngine WebEngine::New()
2109 Internal::Adaptor::WebEngine* baseObject = new Internal::Adaptor::WebEngine();
2111 return WebEngine( baseObject );
2114 Dali::WebEngineContext* WebEngine::GetContext()
2116 return Internal::Adaptor::GetContext();
2119 Dali::WebEngineCookieManager* WebEngine::GetCookieManager()
2121 return Internal::Adaptor::GetCookieManager();
2124 WebEngine::WebEngine( const WebEngine& WebEngine )
2125 : BaseHandle( WebEngine )
2129 WebEngine& WebEngine::operator=( const WebEngine& webEngine )
2131 BaseHandle::operator=( webEngine );
2135 WebEngine WebEngine::DownCast( BaseHandle handle )
2137 return WebEngine( dynamic_cast< Internal::Adaptor::WebEngine* >( handle.GetObjectPtr() ) );
2140 void WebEngine::Create( uint32_t width, uint32_t height, const std::string& locale, const std::string& timezoneId )
2144 void WebEngine::Create( uint32_t width, uint32_t height, uint32_t argc, char** argv )
2148 void WebEngine::Destroy()
2152 WebEngineSettings& WebEngine::GetSettings() const
2154 return Internal::Adaptor::GetImplementation( *this ).GetSettings();
2157 WebEngineBackForwardList& WebEngine::GetBackForwardList() const
2159 return Internal::Adaptor::GetImplementation( *this ).GetBackForwardList();
2162 void WebEngine::LoadUrl( const std::string& url )
2164 return Internal::Adaptor::GetImplementation( *this ).LoadUrl( url );
2167 std::string WebEngine::GetTitle() const
2169 return Internal::Adaptor::GetImplementation( *this ).GetTitle();
2172 Dali::PixelData WebEngine::GetFavicon() const
2174 return Internal::Adaptor::GetImplementation( *this ).GetFavicon();
2177 std::string WebEngine::GetUrl() const
2179 return Internal::Adaptor::GetImplementation( *this ).GetUrl();
2182 Dali::WebEnginePlugin* WebEngine::GetPlugin() const
2184 return Internal::Adaptor::GetWebEnginePlugin();
2187 NativeImageSourcePtr WebEngine::GetNativeImageSource()
2190 Dali::NativeImageSourcePtr sourcePtr = Dali::NativeImageSource::New( source );
2194 void WebEngine::LoadHtmlString( const std::string& htmlString )
2198 bool WebEngine::LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl)
2203 bool WebEngine::LoadContents(const std::string& contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri)
2208 void WebEngine::Reload()
2212 bool WebEngine::ReloadWithoutCache()
2217 void WebEngine::StopLoading()
2221 void WebEngine::Suspend()
2225 void WebEngine::Resume()
2229 void WebEngine::SuspendNetworkLoading()
2233 void WebEngine::ResumeNetworkLoading()
2237 bool WebEngine::AddCustomHeader(const std::string& name, const std::string& value)
2242 bool WebEngine::RemoveCustomHeader(const std::string& name)
2247 uint32_t WebEngine::StartInspectorServer(uint32_t port)
2252 bool WebEngine::StopInspectorServer()
2257 bool WebEngine::CanGoForward()
2259 return Internal::Adaptor::GetImplementation( *this ).CanGoForward();
2262 void WebEngine::GoForward()
2264 Internal::Adaptor::GetImplementation( *this ).GoForward();
2267 bool WebEngine::CanGoBack()
2269 return Internal::Adaptor::GetImplementation( *this ).CanGoBack();
2272 void WebEngine::GoBack()
2274 Internal::Adaptor::GetImplementation( *this ).GoBack();
2277 void WebEngine::EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler )
2279 Internal::Adaptor::GetImplementation( *this ).EvaluateJavaScript( script, resultHandler );
2282 void WebEngine::AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void(const std::string&) > handler )
2286 void WebEngine::RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback )
2288 Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptAlertCallback( callback );
2291 void WebEngine::JavaScriptAlertReply()
2295 void WebEngine::RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback )
2297 Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptConfirmCallback( callback );
2300 void WebEngine::JavaScriptConfirmReply( bool confirmed )
2304 void WebEngine::RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback )
2306 Internal::Adaptor::GetImplementation( *this ).RegisterJavaScriptPromptCallback( callback );
2309 void WebEngine::JavaScriptPromptReply( const std::string& result )
2313 std::unique_ptr<Dali::WebEngineHitTest> WebEngine::CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode)
2315 return Internal::Adaptor::GetImplementation(*this).CreateHitTest(x, y, mode);
2318 bool WebEngine::CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback)
2320 return Internal::Adaptor::GetImplementation(*this).CreateHitTestAsynchronously(x, y, mode, callback);
2323 void WebEngine::ClearAllTilesResources()
2327 void WebEngine::ClearHistory()
2329 Internal::Adaptor::GetImplementation( *this ).ClearHistory();
2332 void WebEngine::SetScaleFactor(float scaleFactor, Dali::Vector2 point)
2334 Internal::Adaptor::GetImplementation( *this ).SetScaleFactor(scaleFactor, point);
2337 float WebEngine::GetScaleFactor() const
2339 return Internal::Adaptor::GetImplementation( *this ).GetScaleFactor();
2342 void WebEngine::ActivateAccessibility(bool activated)
2346 Accessibility::Address WebEngine::GetAccessibilityAddress()
2348 return Internal::Adaptor::GetImplementation(*this).GetAccessibilityAddress();
2351 bool WebEngine::HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount)
2356 void WebEngine::AddDynamicCertificatePath(const std::string& host, const std::string& certPath)
2360 Dali::PixelData WebEngine::GetScreenshot(Dali::Rect<int32_t> viewArea, float scaleFactor)
2362 return Internal::Adaptor::GetImplementation( *this ).GetScreenshot(viewArea, scaleFactor);
2365 bool WebEngine::GetScreenshotAsynchronously(Dali::Rect<int32_t> viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback)
2367 return Internal::Adaptor::GetImplementation( *this ).GetScreenshotAsynchronously(viewArea, scaleFactor, callback);
2370 bool WebEngine::CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback)
2372 return Internal::Adaptor::GetImplementation( *this ).CheckVideoPlayingAsynchronously(callback);
2375 void WebEngine::RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback)
2377 Internal::Adaptor::GetImplementation( *this ).RegisterGeolocationPermissionCallback(callback);
2380 std::string WebEngine::GetUserAgent() const
2382 return Internal::Adaptor::GetImplementation( *this ).GetUserAgent();
2385 void WebEngine::SetUserAgent( const std::string& userAgent )
2387 Internal::Adaptor::GetImplementation( *this ).SetUserAgent( userAgent );
2390 void WebEngine::ScrollBy( int32_t dx, int32_t dy )
2392 Internal::Adaptor::GetImplementation( *this ).ScrollBy( dx, dy );
2395 bool WebEngine::ScrollEdgeBy( int32_t dx, int32_t dy )
2397 return Internal::Adaptor::GetImplementation( *this ).ScrollEdgeBy( dx, dy );
2400 void WebEngine::SetScrollPosition( int32_t x, int32_t y )
2402 Internal::Adaptor::GetImplementation( *this ).SetScrollPosition( x, y );
2405 Dali::Vector2 WebEngine::GetScrollPosition() const
2407 return Internal::Adaptor::GetImplementation( *this ).GetScrollPosition();
2410 Dali::Vector2 WebEngine::GetScrollSize() const
2412 return Internal::Adaptor::GetImplementation( *this ).GetScrollSize();
2415 Dali::Vector2 WebEngine::GetContentSize() const
2417 return Internal::Adaptor::GetImplementation( *this ).GetContentSize();
2420 void WebEngine::SetSize( uint32_t width, uint32_t height )
2424 void WebEngine::SetDocumentBackgroundColor(Dali::Vector4 color)
2428 void WebEngine::ClearTilesWhenHidden(bool cleared)
2432 void WebEngine::SetTileCoverAreaMultiplier(float multiplier)
2436 void WebEngine::EnableCursorByClient(bool enabled)
2440 std::string WebEngine::GetSelectedText() const
2445 bool WebEngine::SendTouchEvent( const TouchEvent& touch )
2450 bool WebEngine::SendKeyEvent( const KeyEvent& event )
2455 bool WebEngine::SendHoverEvent( const HoverEvent& event )
2460 bool WebEngine::SendWheelEvent( const WheelEvent& event )
2465 void WebEngine::SetFocus( bool focused )
2469 void WebEngine::SetPageZoomFactor(float zoomFactor)
2471 Internal::Adaptor::GetImplementation( *this ).SetPageZoomFactor(zoomFactor);
2474 float WebEngine::GetPageZoomFactor() const
2476 return Internal::Adaptor::GetImplementation( *this ).GetPageZoomFactor();
2479 void WebEngine::SetTextZoomFactor(float zoomFactor)
2481 Internal::Adaptor::GetImplementation( *this ).SetTextZoomFactor(zoomFactor);
2484 float WebEngine::GetTextZoomFactor() const
2486 return Internal::Adaptor::GetImplementation( *this ).GetTextZoomFactor();
2489 float WebEngine::GetLoadProgressPercentage() const
2491 return Internal::Adaptor::GetImplementation( *this ).GetLoadProgressPercentage();
2494 void WebEngine::UpdateDisplayArea( Dali::Rect< int32_t > displayArea )
2498 void WebEngine::EnableVideoHole( bool enabled )
2502 void WebEngine::EnableMouseEvents( bool enabled )
2506 void WebEngine::EnableKeyEvents( bool enabled )
2510 Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& WebEngine::FrameRenderedSignal()
2512 return Internal::Adaptor::GetImplementation(*this).FrameRenderedSignal();
2515 void WebEngine::RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
2517 Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadStartedCallback(callback);
2520 void WebEngine::RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
2522 Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadInProgressCallback(callback);
2525 void WebEngine::RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback)
2527 Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadFinishedCallback(callback);
2530 void WebEngine::RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback)
2532 Internal::Adaptor::GetImplementation( *this ).RegisterPageLoadErrorCallback(callback);
2535 void WebEngine::RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback)
2537 Internal::Adaptor::GetImplementation( *this ).RegisterScrollEdgeReachedCallback(callback);
2540 void WebEngine::RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback)
2542 Internal::Adaptor::GetImplementation( *this ).RegisterUrlChangedCallback(callback);
2545 void WebEngine::RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback)
2547 Internal::Adaptor::GetImplementation( *this ).RegisterFormRepostDecidedCallback(callback);
2550 void WebEngine::RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback)
2552 Internal::Adaptor::GetImplementation( *this ).RegisterConsoleMessageReceivedCallback(callback);
2555 void WebEngine::RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback)
2557 Internal::Adaptor::GetImplementation( *this ).RegisterResponsePolicyDecidedCallback(callback);
2560 void WebEngine::RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback)
2562 Internal::Adaptor::GetImplementation(*this).RegisterNavigationPolicyDecidedCallback(callback);
2565 void WebEngine::RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
2567 Internal::Adaptor::GetImplementation( *this ).RegisterCertificateConfirmedCallback(callback);
2570 void WebEngine::RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
2572 Internal::Adaptor::GetImplementation( *this ).RegisterSslCertificateChangedCallback(callback);
2575 void WebEngine::RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback)
2577 Internal::Adaptor::GetImplementation( *this ).RegisterHttpAuthHandlerCallback(callback);
2580 void WebEngine::RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback)
2582 Internal::Adaptor::GetImplementation( *this ).RegisterContextMenuShownCallback(callback);
2585 void WebEngine::RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback)
2587 Internal::Adaptor::GetImplementation( *this ).RegisterContextMenuHiddenCallback(callback);
2590 void WebEngine::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback)
2592 Internal::Adaptor::GetImplementation(*this).GetPlainTextAsynchronously(callback);
2595 } // namespace Dali;