1 #ifndef DALI_WEB_ENGINE_IMPL_H
2 #define DALI_WEB_ENGINE_IMPL_H
5 * Copyright (c) 2022 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/public-api/object/base-object.h>
25 #include <dali/devel-api/adaptor-framework/accessibility.h>
26 #include <dali/devel-api/adaptor-framework/web-engine/web-engine-plugin.h>
27 #include <dali/devel-api/adaptor-framework/web-engine/web-engine.h>
31 // forward declaration
32 class WebEngineBackForwardList;
33 class WebEngineContext;
34 class WebEngineCookieManager;
35 class WebEngineSettings;
43 typedef IntrusivePtr<WebEngine> WebEnginePtr;
46 * @brief WebEngine class is used for Web.
48 class WebEngine : public Dali::BaseObject
52 * @brief Create a new WebEngine handle
54 * @return WebEngine pointer
56 static WebEnginePtr New();
59 * @brief Get context of web engine
62 static Dali::WebEngineContext* GetContext();
65 * @brief Get cookie manager of web engine
68 static Dali::WebEngineCookieManager* GetCookieManager();
71 * @copydoc Dali::WebEngine::Create()
73 void Create(uint32_t width, uint32_t height, const std::string& locale, const std::string& timezoneId);
76 * @copydoc Dali::WebEngine::Create()
78 void Create(uint32_t width, uint32_t height, uint32_t argc, char** argv);
81 * @copydoc Dali::WebEngine::Destroy()
86 * @copydoc Dali::WebEngine::GetNativeImageSource()
88 Dali::NativeImageSourcePtr GetNativeImageSource();
91 * @copydoc Dali::WebEngine::GetSettings()
93 Dali::WebEngineSettings& GetSettings() const;
96 * @copydoc Dali::WebEngine::GetBackForwardList()
98 Dali::WebEngineBackForwardList& GetBackForwardList() const;
101 * @copydoc Dali::WebEngine::LoadUrl()
103 void LoadUrl(const std::string& url);
106 * @copydoc Dali::WebEngine::GetTitle()
108 std::string GetTitle() const;
111 * @copydoc Dali::WebEngine::GetFavicon()
113 Dali::PixelData GetFavicon() const;
116 * @copydoc Dali::WebEngine::GetUrl()
118 std::string GetUrl() const;
121 * @copydoc Dali::WebEngine::GetUserAgent()
123 std::string GetUserAgent() const;
126 * @copydoc Dali::WebEngine::SetUserAgent()
128 void SetUserAgent(const std::string& userAgent);
131 * @copydoc Dali::WebEngine::LoadHtmlString()
133 void LoadHtmlString(const std::string& htmlString);
136 * @copydoc Dali::WebEngine::LoadHtmlStringOverrideCurrentEntry()
138 bool LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl);
141 * @copydoc Dali::WebEngine::LoadContents()
143 bool LoadContents(const std::string& contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri);
146 * @copydoc Dali::WebEngine::Reload()
151 * @copydoc Dali::WebEngine::ReloadWithoutCache()
153 bool ReloadWithoutCache();
156 * @copydoc Dali::WebEngine::StopLoading()
161 * @copydoc Dali::WebEngine::Suspend()
166 * @copydoc Dali::WebEngine::Resume()
171 * @copydoc Dali::WebEngine::SuspendNetworkLoading()
173 void SuspendNetworkLoading();
176 * @copydoc Dali::WebEngine::ResumeNetworkLoading()
178 void ResumeNetworkLoading();
181 * @copydoc Dali::WebEngine::AddCustomHeader()
183 bool AddCustomHeader(const std::string& name, const std::string& value);
186 * @copydoc Dali::WebEngine::RemoveCustomHeader()
188 bool RemoveCustomHeader(const std::string& name);
191 * @copydoc Dali::WebEngine::StartInspectorServer()
193 uint32_t StartInspectorServer(uint32_t port);
196 * @copydoc Dali::WebEngine::StopInspectorServer()
198 bool StopInspectorServer();
201 * @copydoc Dali::WebEngine::ScrollBy()
203 void ScrollBy(int32_t deltaX, int32_t deltaY);
206 * @copydoc Dali::WebEngine::ScrollEdgeBy()
208 bool ScrollEdgeBy(int32_t deltaX, int32_t deltaY);
211 * @copydoc Dali::WebEngine::SetScrollPosition()
213 void SetScrollPosition(int32_t x, int32_t y);
216 * @copydoc Dali::WebEngine::GetScrollPosition()
218 Dali::Vector2 GetScrollPosition() const;
221 * @copydoc Dali::WebEngine::GetScrollSize()
223 Dali::Vector2 GetScrollSize() const;
226 * @copydoc Dali::WebEngine::GetContentSize()
228 Dali::Vector2 GetContentSize() const;
231 * @copydoc Dali::WebEngine::RegisterJavaScriptAlertCallback()
233 void RegisterJavaScriptAlertCallback(Dali::WebEnginePlugin::JavaScriptAlertCallback callback);
236 * @copydoc Dali::WebEngine::JavaScriptAlertReply()
238 void JavaScriptAlertReply();
241 * @copydoc Dali::WebEngine::RegisterJavaScriptConfirmCallback()
243 void RegisterJavaScriptConfirmCallback(Dali::WebEnginePlugin::JavaScriptConfirmCallback callback);
246 * @copydoc Dali::WebEngine::JavaScriptConfirmReply()
248 void JavaScriptConfirmReply(bool confirmed);
251 * @copydoc Dali::WebEngine::RegisterJavaScriptPromptCallback()
253 void RegisterJavaScriptPromptCallback(Dali::WebEnginePlugin::JavaScriptPromptCallback callback);
256 * @copydoc Dali::WebEngine::JavaScriptPromptReply()
258 void JavaScriptPromptReply(const std::string& result);
261 * @copydoc Dali::WebEngine::CreateHitTest()
263 std::unique_ptr<Dali::WebEngineHitTest> CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode);
266 * @copydoc Dali::WebEngine::CreateHitTestAsynchronously()
268 bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback);
271 * @copydoc Dali::WebEngine::CanGoForward()
276 * @copydoc Dali::WebEngine::GoForward()
281 * @copydoc Dali::WebEngine::CanGoBack()
286 * @copydoc Dali::WebEngine::GoBack()
291 * @copydoc Dali::WebEngine::EvaluateJavaScript()
293 void EvaluateJavaScript(const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler);
296 * @copydoc Dali::WebEngine::AddJavaScriptMessageHandler()
298 void AddJavaScriptMessageHandler(const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler);
301 * @copydoc Dali::WebEngine::ClearAllTilesResources()
303 void ClearAllTilesResources();
306 * @copydoc Dali::WebEngine::ClearHistory()
311 * @copydoc Dali::WebEngine::SetSize()
313 void SetSize(uint32_t width, uint32_t height);
316 * @copydoc Dali::WebEngine::EnableMouseEvents()
318 void EnableMouseEvents(bool enabled);
321 * @copydoc Dali::WebEngine::EnableKeyEvents()
323 void EnableKeyEvents(bool enabled);
326 * @copydoc Dali::WebEngine::SetDocumentBackgroundColor()
328 void SetDocumentBackgroundColor(Dali::Vector4 color);
331 * @copydoc Dali::WebEngine::ClearTilesWhenHidden()
333 void ClearTilesWhenHidden(bool cleared);
336 * @copydoc Dali::WebEngine::SetTileCoverAreaMultiplier()
338 void SetTileCoverAreaMultiplier(float multiplier);
341 * @copydoc Dali::WebEngine::EnableCursorByClient()
343 void EnableCursorByClient(bool enabled);
346 * @copydoc Dali::WebEngine::GetSelectedText()
348 std::string GetSelectedText() const;
351 * @copydoc Dali::WebEngine::SendTouchEvent()
353 bool SendTouchEvent(const Dali::TouchEvent& touch);
356 * @copydoc Dali::WebEngine::SendKeyEvent()
358 bool SendKeyEvent(const Dali::KeyEvent& event);
361 * @copydoc Dali::WebEngine::SetFocus()
363 void SetFocus(bool focused);
366 * @copydoc Dali::WebEngine::SetPageZoomFactor()
368 void SetPageZoomFactor(float zoomFactor);
371 * @copydoc Dali::WebEngine::GetPageZoomFactor()
373 float GetPageZoomFactor() const;
376 * @copydoc Dali::WebEngine::SetTextZoomFactor()
378 void SetTextZoomFactor(float zoomFactor);
381 * @copydoc Dali::WebEngine::GetTextZoomFactor()
383 float GetTextZoomFactor() const;
386 * @copydoc Dali::WebEngine::GetLoadProgressPercentage()
388 float GetLoadProgressPercentage() const;
391 * @copydoc Dali::WebEngine::SetScaleFactor()
393 void SetScaleFactor(float scaleFactor, Dali::Vector2 point);
396 * @copydoc Dali::WebEngine::GetScaleFactor()
398 float GetScaleFactor() const;
401 * @copydoc Dali::WebEngine::ActivateAccessibility()
403 void ActivateAccessibility(bool activated);
406 * @copydoc Dali::WebEngine::GetAccessibilityAddress()
408 Accessibility::Address GetAccessibilityAddress();
411 * @copydoc Dali::WebEngine::SetVisibility()
413 bool SetVisibility(bool visible);
416 * @copydoc Dali::WebEngine::HighlightText()
418 bool HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount);
421 * @copydoc Dali::WebEngine::AddDynamicCertificatePath()
423 void AddDynamicCertificatePath(const std::string& host, const std::string& certPath);
426 * @copydoc Dali::WebEngine::GetScreenshot()
428 Dali::PixelData GetScreenshot(Dali::Rect<int32_t> viewArea, float scaleFactor);
431 * @copydoc Dali::WebEngine::GetScreenshotAsync()
433 bool GetScreenshotAsynchronously(Dali::Rect<int32_t> viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback);
436 * @copydoc Dali::WebEngine::IsVideoPlaying()
438 bool CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback);
441 * @copydoc Dali::WebEngine::RegisterGeolocationPermissionCallback()
443 void RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback);
446 * @copydoc Dali::WebEngine::UpdateDisplayArea()
448 void UpdateDisplayArea(Dali::Rect<int32_t> displayArea);
451 * @copydoc Dali::WebEngine::EnableVideoHole()
453 void EnableVideoHole(bool enabled);
456 * @copydoc Dali::WebEngine::SendHoverEvent()
458 bool SendHoverEvent(const Dali::HoverEvent& event);
461 * @copydoc Dali::WebEngine::SendWheelEvent()
463 bool SendWheelEvent(const Dali::WheelEvent& event);
466 * @copydoc Dali::WebEngine::FrameRenderedSignal()
468 Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& FrameRenderedSignal();
471 * @copydoc Dali::WebEngine::RegisterPageLoadStartedCallback()
473 void RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
476 * @copydoc Dali::WebEngine::RegisterPageLoadInProgressCallback()
478 void RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
481 * @copydoc Dali::WebEngine::RegisterPageLoadFinishedCallback()
483 void RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
486 * @copydoc Dali::WebEngine::RegisterPageLoadErrorCallback()
488 void RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback);
491 * @copydoc Dali::WebEngine::RegisterScrollEdgeReachedCallback()
493 void RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback);
496 * @copydoc Dali::WebEngine::RegisterUrlChangedCallback()
498 void RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback);
501 * @copydoc Dali::WebEngine::RegisterFormRepostDecidedCallback()
503 void RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback);
506 @copydoc Dali::WebEngine::RegisterConsoleMessageReceivedCallback()
508 void RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback);
511 @copydoc Dali::WebEngine::RegisterResponsePolicyDecidedCallback()
513 void RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback);
516 @copydoc Dali::WebEngine::RegisterNavigationPolicyDecidedCallback()
518 void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback);
521 * @copydoc Dali::WebEngine::RegisterCertificateConfirmedCallback()
523 void RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback);
526 * @copydoc Dali::WebEngine::RegisterSslCertificateChangedCallback()
528 void RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback);
531 * @copydoc Dali::WebEngine::RegisterHttpAuthHandlerCallback()
533 void RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback);
536 * @copydoc Dali::WebEngine::RegisterContextMenuShownCallback()
538 void RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback);
541 * @copydoc Dali::WebEngine::RegisterContextMenuHiddenCallback()
543 void RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback);
546 * @copydoc Dali::WebEngine::GetPlainTextAsynchronously()
548 void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback);
552 * @brief Constructor.
559 virtual ~WebEngine();
561 // Undefined copy constructor
562 WebEngine(const WebEngine& WebEngine);
564 // Undefined assignment operator
565 WebEngine& operator=(const WebEngine& WebEngine);
568 * @brief Initialize member data.
570 * @return Whether the initialization succeed or not.
575 * @brief Initialize library handle by loading web engine plugin.
577 * @return Whether the initialization succeed or not.
579 static bool InitializePluginHandle();
582 * @brief Close library handle.
584 static void ClosePluginHandle();
587 using CreateWebEngineFunction = Dali::WebEnginePlugin* (*)();
588 using DestroyWebEngineFunction = void (*)(Dali::WebEnginePlugin* plugin);
590 Dali::WebEnginePlugin* mPlugin; ///< WebEnginePlugin instance
592 static void* mHandle; ///< Handle for the loaded library
593 static CreateWebEngineFunction mCreateWebEnginePtr; ///< Function to create plugin instance
594 static DestroyWebEngineFunction mDestroyWebEnginePtr; ///< Function to destroy plugin instance
597 } // namespace Adaptor
598 } // namespace Internal
600 inline static Internal::Adaptor::WebEngine& GetImplementation(Dali::WebEngine& webEngine)
602 DALI_ASSERT_ALWAYS(webEngine && "WebEngine handle is empty.");
604 BaseObject& handle = webEngine.GetBaseObject();
606 return static_cast<Internal::Adaptor::WebEngine&>(handle);
609 inline static const Internal::Adaptor::WebEngine& GetImplementation(const Dali::WebEngine& webEngine)
611 DALI_ASSERT_ALWAYS(webEngine && "WebEngine handle is empty.");
613 const BaseObject& handle = webEngine.GetBaseObject();
615 return static_cast<const Internal::Adaptor::WebEngine&>(handle);