1 #ifndef DALI_WEB_ENGINE_IMPL_H
2 #define DALI_WEB_ENGINE_IMPL_H
5 * Copyright (c) 2023 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::GetPlugin()
88 Dali::WebEnginePlugin* GetPlugin() const;
91 * @copydoc Dali::WebEngine::GetNativeImageSource()
93 Dali::NativeImageSourcePtr GetNativeImageSource();
96 * @copydoc Dali::WebEngine::GetSettings()
98 Dali::WebEngineSettings& GetSettings() const;
101 * @copydoc Dali::WebEngine::GetBackForwardList()
103 Dali::WebEngineBackForwardList& GetBackForwardList() const;
106 * @copydoc Dali::WebEngine::LoadUrl()
108 void LoadUrl(const std::string& url);
111 * @copydoc Dali::WebEngine::GetTitle()
113 std::string GetTitle() const;
116 * @copydoc Dali::WebEngine::GetFavicon()
118 Dali::PixelData GetFavicon() const;
121 * @copydoc Dali::WebEngine::GetUrl()
123 std::string GetUrl() const;
126 * @copydoc Dali::WebEngine::GetUserAgent()
128 std::string GetUserAgent() const;
131 * @copydoc Dali::WebEngine::SetUserAgent()
133 void SetUserAgent(const std::string& userAgent);
136 * @copydoc Dali::WebEngine::LoadHtmlString()
138 void LoadHtmlString(const std::string& htmlString);
141 * @copydoc Dali::WebEngine::LoadHtmlStringOverrideCurrentEntry()
143 bool LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl);
146 * @copydoc Dali::WebEngine::LoadContents()
148 bool LoadContents(const int8_t* contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri);
151 * @copydoc Dali::WebEngine::Reload()
156 * @copydoc Dali::WebEngine::ReloadWithoutCache()
158 bool ReloadWithoutCache();
161 * @copydoc Dali::WebEngine::StopLoading()
166 * @copydoc Dali::WebEngine::Suspend()
171 * @copydoc Dali::WebEngine::Resume()
176 * @copydoc Dali::WebEngine::SuspendNetworkLoading()
178 void SuspendNetworkLoading();
181 * @copydoc Dali::WebEngine::ResumeNetworkLoading()
183 void ResumeNetworkLoading();
186 * @copydoc Dali::WebEngine::AddCustomHeader()
188 bool AddCustomHeader(const std::string& name, const std::string& value);
191 * @copydoc Dali::WebEngine::RemoveCustomHeader()
193 bool RemoveCustomHeader(const std::string& name);
196 * @copydoc Dali::WebEngine::StartInspectorServer()
198 uint32_t StartInspectorServer(uint32_t port);
201 * @copydoc Dali::WebEngine::StopInspectorServer()
203 bool StopInspectorServer();
206 * @copydoc Dali::WebEngine::ScrollBy()
208 void ScrollBy(int32_t deltaX, int32_t deltaY);
211 * @copydoc Dali::WebEngine::ScrollEdgeBy()
213 bool ScrollEdgeBy(int32_t deltaX, int32_t deltaY);
216 * @copydoc Dali::WebEngine::SetScrollPosition()
218 void SetScrollPosition(int32_t x, int32_t y);
221 * @copydoc Dali::WebEngine::GetScrollPosition()
223 Dali::Vector2 GetScrollPosition() const;
226 * @copydoc Dali::WebEngine::GetScrollSize()
228 Dali::Vector2 GetScrollSize() const;
231 * @copydoc Dali::WebEngine::GetContentSize()
233 Dali::Vector2 GetContentSize() const;
236 * @copydoc Dali::WebEngine::RegisterJavaScriptAlertCallback()
238 void RegisterJavaScriptAlertCallback(Dali::WebEnginePlugin::JavaScriptAlertCallback callback);
241 * @copydoc Dali::WebEngine::JavaScriptAlertReply()
243 void JavaScriptAlertReply();
246 * @copydoc Dali::WebEngine::RegisterJavaScriptConfirmCallback()
248 void RegisterJavaScriptConfirmCallback(Dali::WebEnginePlugin::JavaScriptConfirmCallback callback);
251 * @copydoc Dali::WebEngine::JavaScriptConfirmReply()
253 void JavaScriptConfirmReply(bool confirmed);
256 * @copydoc Dali::WebEngine::RegisterJavaScriptPromptCallback()
258 void RegisterJavaScriptPromptCallback(Dali::WebEnginePlugin::JavaScriptPromptCallback callback);
261 * @copydoc Dali::WebEngine::JavaScriptPromptReply()
263 void JavaScriptPromptReply(const std::string& result);
266 * @copydoc Dali::WebEngine::CreateHitTest()
268 std::unique_ptr<Dali::WebEngineHitTest> CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode);
271 * @copydoc Dali::WebEngine::CreateHitTestAsynchronously()
273 bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback);
276 * @copydoc Dali::WebEngine::CanGoForward()
281 * @copydoc Dali::WebEngine::GoForward()
286 * @copydoc Dali::WebEngine::CanGoBack()
291 * @copydoc Dali::WebEngine::GoBack()
296 * @copydoc Dali::WebEngine::EvaluateJavaScript()
298 void EvaluateJavaScript(const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler);
301 * @copydoc Dali::WebEngine::AddJavaScriptMessageHandler()
303 void AddJavaScriptMessageHandler(const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler);
306 * @copydoc Dali::WebEngine::ClearAllTilesResources()
308 void ClearAllTilesResources();
311 * @copydoc Dali::WebEngine::ClearHistory()
316 * @copydoc Dali::WebEngine::SetSize()
318 void SetSize(uint32_t width, uint32_t height);
321 * @copydoc Dali::WebEngine::EnableMouseEvents()
323 void EnableMouseEvents(bool enabled);
326 * @copydoc Dali::WebEngine::EnableKeyEvents()
328 void EnableKeyEvents(bool enabled);
331 * @copydoc Dali::WebEngine::SetDocumentBackgroundColor()
333 void SetDocumentBackgroundColor(Dali::Vector4 color);
336 * @copydoc Dali::WebEngine::ClearTilesWhenHidden()
338 void ClearTilesWhenHidden(bool cleared);
341 * @copydoc Dali::WebEngine::SetTileCoverAreaMultiplier()
343 void SetTileCoverAreaMultiplier(float multiplier);
346 * @copydoc Dali::WebEngine::EnableCursorByClient()
348 void EnableCursorByClient(bool enabled);
351 * @copydoc Dali::WebEngine::GetSelectedText()
353 std::string GetSelectedText() const;
356 * @copydoc Dali::WebEngine::SendTouchEvent()
358 bool SendTouchEvent(const Dali::TouchEvent& touch);
361 * @copydoc Dali::WebEngine::SendKeyEvent()
363 bool SendKeyEvent(const Dali::KeyEvent& event);
366 * @copydoc Dali::WebEngine::SetFocus()
368 void SetFocus(bool focused);
371 * @copydoc Dali::WebEngine::SetPageZoomFactor()
373 void SetPageZoomFactor(float zoomFactor);
376 * @copydoc Dali::WebEngine::GetPageZoomFactor()
378 float GetPageZoomFactor() const;
381 * @copydoc Dali::WebEngine::SetTextZoomFactor()
383 void SetTextZoomFactor(float zoomFactor);
386 * @copydoc Dali::WebEngine::GetTextZoomFactor()
388 float GetTextZoomFactor() const;
391 * @copydoc Dali::WebEngine::GetLoadProgressPercentage()
393 float GetLoadProgressPercentage() const;
396 * @copydoc Dali::WebEngine::SetScaleFactor()
398 void SetScaleFactor(float scaleFactor, Dali::Vector2 point);
401 * @copydoc Dali::WebEngine::GetScaleFactor()
403 float GetScaleFactor() const;
406 * @copydoc Dali::WebEngine::ActivateAccessibility()
408 void ActivateAccessibility(bool activated);
411 * @copydoc Dali::WebEngine::GetAccessibilityAddress()
413 Accessibility::Address GetAccessibilityAddress();
416 * @copydoc Dali::WebEngine::SetVisibility()
418 bool SetVisibility(bool visible);
421 * @copydoc Dali::WebEngine::HighlightText()
423 bool HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount);
426 * @copydoc Dali::WebEngine::AddDynamicCertificatePath()
428 void AddDynamicCertificatePath(const std::string& host, const std::string& certPath);
431 * @copydoc Dali::WebEngine::GetScreenshot()
433 Dali::PixelData GetScreenshot(Dali::Rect<int32_t> viewArea, float scaleFactor);
436 * @copydoc Dali::WebEngine::GetScreenshotAsync()
438 bool GetScreenshotAsynchronously(Dali::Rect<int32_t> viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback);
441 * @copydoc Dali::WebEngine::IsVideoPlaying()
443 bool CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback);
446 * @copydoc Dali::WebEngine::RegisterGeolocationPermissionCallback()
448 void RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback);
451 * @copydoc Dali::WebEngine::UpdateDisplayArea()
453 void UpdateDisplayArea(Dali::Rect<int32_t> displayArea);
456 * @copydoc Dali::WebEngine::EnableVideoHole()
458 void EnableVideoHole(bool enabled);
461 * @copydoc Dali::WebEngine::SendHoverEvent()
463 bool SendHoverEvent(const Dali::HoverEvent& event);
466 * @copydoc Dali::WebEngine::SendWheelEvent()
468 bool SendWheelEvent(const Dali::WheelEvent& event);
471 @copydoc Dali::WebEngine::RegisterFrameRenderedCallback()
473 void RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback);
476 * @copydoc Dali::WebEngine::RegisterPageLoadStartedCallback()
478 void RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
481 * @copydoc Dali::WebEngine::RegisterPageLoadInProgressCallback()
483 void RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
486 * @copydoc Dali::WebEngine::RegisterPageLoadFinishedCallback()
488 void RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
491 * @copydoc Dali::WebEngine::RegisterPageLoadErrorCallback()
493 void RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback);
496 * @copydoc Dali::WebEngine::RegisterScrollEdgeReachedCallback()
498 void RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback);
501 * @copydoc Dali::WebEngine::RegisterUrlChangedCallback()
503 void RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback);
506 * @copydoc Dali::WebEngine::RegisterFormRepostDecidedCallback()
508 void RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback);
511 @copydoc Dali::WebEngine::RegisterConsoleMessageReceivedCallback()
513 void RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback);
516 @copydoc Dali::WebEngine::RegisterResponsePolicyDecidedCallback()
518 void RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback);
521 @copydoc Dali::WebEngine::RegisterNavigationPolicyDecidedCallback()
523 void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback);
526 @copydoc Dali::WebEngine::RegisterNewWindowCreatedCallback()
528 void RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback);
531 * @copydoc Dali::WebEngine::RegisterCertificateConfirmedCallback()
533 void RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback);
536 * @copydoc Dali::WebEngine::RegisterSslCertificateChangedCallback()
538 void RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback);
541 * @copydoc Dali::WebEngine::RegisterHttpAuthHandlerCallback()
543 void RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback);
546 * @copydoc Dali::WebEngine::RegisterContextMenuShownCallback()
548 void RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback);
551 * @copydoc Dali::WebEngine::RegisterContextMenuHiddenCallback()
553 void RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback);
556 * @copydoc Dali::WebEngine::GetPlainTextAsynchronously()
558 void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback);
562 * @brief Constructor.
569 virtual ~WebEngine();
571 // Undefined copy constructor
572 WebEngine(const WebEngine& WebEngine);
574 // Undefined assignment operator
575 WebEngine& operator=(const WebEngine& WebEngine);
578 * @brief Initialize member data.
580 * @return Whether the initialization succeed or not.
585 Dali::WebEnginePlugin* mPlugin; ///< WebEnginePlugin instance
588 } // namespace Adaptor
589 } // namespace Internal
591 inline static Internal::Adaptor::WebEngine& GetImplementation(Dali::WebEngine& webEngine)
593 DALI_ASSERT_ALWAYS(webEngine && "WebEngine handle is empty.");
595 BaseObject& handle = webEngine.GetBaseObject();
597 return static_cast<Internal::Adaptor::WebEngine&>(handle);
600 inline static const Internal::Adaptor::WebEngine& GetImplementation(const Dali::WebEngine& webEngine)
602 DALI_ASSERT_ALWAYS(webEngine && "WebEngine handle is empty.");
604 const BaseObject& handle = webEngine.GetBaseObject();
606 return static_cast<const Internal::Adaptor::WebEngine&>(handle);