1 #ifndef DALI_WEB_ENGINE_IMPL_H
2 #define DALI_WEB_ENGINE_IMPL_H
5 * Copyright (c) 2021 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-plugin.h>
27 #include <dali/devel-api/adaptor-framework/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 * @copydoc Dali::WebEngine::Create()
61 void Create(uint32_t width, uint32_t height, const std::string& locale, const std::string& timezoneId);
64 * @copydoc Dali::WebEngine::Create()
66 void Create(uint32_t width, uint32_t height, uint32_t argc, char** argv);
69 * @copydoc Dali::WebEngine::Destroy()
74 * @copydoc Dali::WebEngine::GetNativeImageSource()
76 Dali::NativeImageSourcePtr GetNativeImageSource();
79 * @copydoc Dali::WebEngine::GetSettings()
81 Dali::WebEngineSettings& GetSettings() const;
84 * @copydoc Dali::WebEngine::GetContext()
86 Dali::WebEngineContext& GetContext() const;
89 * @copydoc Dali::WebEngine::GetCookieManager()
91 Dali::WebEngineCookieManager& GetCookieManager() const;
94 * @copydoc Dali::WebEngine::GetBackForwardList()
96 Dali::WebEngineBackForwardList& GetBackForwardList() const;
99 * @copydoc Dali::WebEngine::LoadUrl()
101 void LoadUrl(const std::string& url);
104 * @copydoc Dali::WebEngine::GetTitle()
106 std::string GetTitle() const;
109 * @copydoc Dali::WebEngine::GetFavicon()
111 Dali::PixelData GetFavicon() const;
114 * @copydoc Dali::WebEngine::GetUrl()
116 std::string GetUrl() const;
119 * @copydoc Dali::WebEngine::GetUserAgent()
121 std::string GetUserAgent() const;
124 * @copydoc Dali::WebEngine::SetUserAgent()
126 void SetUserAgent(const std::string& userAgent);
129 * @copydoc Dali::WebEngine::LoadHtmlString()
131 void LoadHtmlString(const std::string& htmlString);
134 * @copydoc Dali::WebEngine::LoadHtmlStringOverrideCurrentEntry()
136 bool LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl);
139 * @copydoc Dali::WebEngine::LoadContents()
141 bool LoadContents(const std::string& contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri);
144 * @copydoc Dali::WebEngine::Reload()
149 * @copydoc Dali::WebEngine::ReloadWithoutCache()
151 bool ReloadWithoutCache();
154 * @copydoc Dali::WebEngine::StopLoading()
159 * @copydoc Dali::WebEngine::Suspend()
164 * @copydoc Dali::WebEngine::Resume()
169 * @copydoc Dali::WebEngine::SuspendNetworkLoading()
171 void SuspendNetworkLoading();
174 * @copydoc Dali::WebEngine::ResumeNetworkLoading()
176 void ResumeNetworkLoading();
179 * @copydoc Dali::WebEngine::AddCustomHeader()
181 bool AddCustomHeader(const std::string& name, const std::string& value);
184 * @copydoc Dali::WebEngine::RemoveCustomHeader()
186 bool RemoveCustomHeader(const std::string& name);
189 * @copydoc Dali::WebEngine::StartInspectorServer()
191 uint32_t StartInspectorServer(uint32_t port);
194 * @copydoc Dali::WebEngine::StopInspectorServer()
196 bool StopInspectorServer();
199 * @copydoc Dali::WebEngine::ScrollBy()
201 void ScrollBy(int32_t deltaX, int32_t deltaY);
204 * @copydoc Dali::WebEngine::ScrollEdgeBy()
206 bool ScrollEdgeBy(int32_t deltaX, int32_t deltaY);
209 * @copydoc Dali::WebEngine::SetScrollPosition()
211 void SetScrollPosition(int32_t x, int32_t y);
214 * @copydoc Dali::WebEngine::GetScrollPosition()
216 Dali::Vector2 GetScrollPosition() const;
219 * @copydoc Dali::WebEngine::GetScrollSize()
221 Dali::Vector2 GetScrollSize() const;
224 * @copydoc Dali::WebEngine::GetContentSize()
226 Dali::Vector2 GetContentSize() const;
229 * @copydoc Dali::WebEngine::RegisterJavaScriptAlertCallback()
231 void RegisterJavaScriptAlertCallback(Dali::WebEnginePlugin::JavaScriptAlertCallback callback);
234 * @copydoc Dali::WebEngine::JavaScriptAlertReply()
236 void JavaScriptAlertReply();
239 * @copydoc Dali::WebEngine::RegisterJavaScriptConfirmCallback()
241 void RegisterJavaScriptConfirmCallback(Dali::WebEnginePlugin::JavaScriptConfirmCallback callback);
244 * @copydoc Dali::WebEngine::JavaScriptConfirmReply()
246 void JavaScriptConfirmReply(bool confirmed);
249 * @copydoc Dali::WebEngine::RegisterJavaScriptPromptCallback()
251 void RegisterJavaScriptPromptCallback(Dali::WebEnginePlugin::JavaScriptPromptCallback callback);
254 * @copydoc Dali::WebEngine::JavaScriptPromptReply()
256 void JavaScriptPromptReply(const std::string& result);
259 * @copydoc Dali::WebEngine::CreateHitTest()
261 std::unique_ptr<Dali::WebEngineHitTest> CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode);
264 * @copydoc Dali::WebEngine::CreateHitTestAsynchronously()
266 bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback);
269 * @copydoc Dali::WebEngine::CanGoForward()
274 * @copydoc Dali::WebEngine::GoForward()
279 * @copydoc Dali::WebEngine::CanGoBack()
284 * @copydoc Dali::WebEngine::GoBack()
289 * @copydoc Dali::WebEngine::EvaluateJavaScript()
291 void EvaluateJavaScript(const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler);
294 * @copydoc Dali::WebEngine::AddJavaScriptMessageHandler()
296 void AddJavaScriptMessageHandler(const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler);
299 * @copydoc Dali::WebEngine::ClearAllTilesResources()
301 void ClearAllTilesResources();
304 * @copydoc Dali::WebEngine::ClearHistory()
309 * @copydoc Dali::WebEngine::SetSize()
311 void SetSize(uint32_t width, uint32_t height);
314 * @copydoc Dali::WebEngine::EnableMouseEvents()
316 void EnableMouseEvents(bool enabled);
319 * @copydoc Dali::WebEngine::EnableKeyEvents()
321 void EnableKeyEvents(bool enabled);
324 * @copydoc Dali::WebEngine::SetDocumentBackgroundColor()
326 void SetDocumentBackgroundColor(Dali::Vector4 color);
329 * @copydoc Dali::WebEngine::ClearTilesWhenHidden()
331 void ClearTilesWhenHidden(bool cleared);
334 * @copydoc Dali::WebEngine::SetTileCoverAreaMultiplier()
336 void SetTileCoverAreaMultiplier(float multiplier);
339 * @copydoc Dali::WebEngine::EnableCursorByClient()
341 void EnableCursorByClient(bool enabled);
344 * @copydoc Dali::WebEngine::GetSelectedText()
346 std::string GetSelectedText() const;
349 * @copydoc Dali::WebEngine::SendTouchEvent()
351 bool SendTouchEvent(const Dali::TouchEvent& touch);
354 * @copydoc Dali::WebEngine::SendKeyEvent()
356 bool SendKeyEvent(const Dali::KeyEvent& event);
359 * @copydoc Dali::WebEngine::SetFocus()
361 void SetFocus(bool focused);
364 * @copydoc Dali::WebEngine::SetPageZoomFactor()
366 void SetPageZoomFactor(float zoomFactor);
369 * @copydoc Dali::WebEngine::GetPageZoomFactor()
371 float GetPageZoomFactor() const;
374 * @copydoc Dali::WebEngine::SetTextZoomFactor()
376 void SetTextZoomFactor(float zoomFactor);
379 * @copydoc Dali::WebEngine::GetTextZoomFactor()
381 float GetTextZoomFactor() const;
384 * @copydoc Dali::WebEngine::GetLoadProgressPercentage()
386 float GetLoadProgressPercentage() const;
389 * @copydoc Dali::WebEngine::SetScaleFactor()
391 void SetScaleFactor(float scaleFactor, Dali::Vector2 point);
394 * @copydoc Dali::WebEngine::GetScaleFactor()
396 float GetScaleFactor() const;
399 * @copydoc Dali::WebEngine::ActivateAccessibility()
401 void ActivateAccessibility(bool activated);
404 * @copydoc Dali::WebEngine::GetAccessibilityAddress()
406 Accessibility::Address GetAccessibilityAddress();
409 * @copydoc Dali::WebEngine::SetVisibility()
411 bool SetVisibility(bool visible);
414 * @copydoc Dali::WebEngine::HighlightText()
416 bool HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount);
419 * @copydoc Dali::WebEngine::AddDynamicCertificatePath()
421 void AddDynamicCertificatePath(const std::string& host, const std::string& certPath);
424 * @copydoc Dali::WebEngine::GetScreenshot()
426 Dali::PixelData GetScreenshot(Dali::Rect<int32_t> viewArea, float scaleFactor);
429 * @copydoc Dali::WebEngine::GetScreenshotAsync()
431 bool GetScreenshotAsynchronously(Dali::Rect<int32_t> viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback);
434 * @copydoc Dali::WebEngine::IsVideoPlaying()
436 bool CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback);
439 * @copydoc Dali::WebEngine::RegisterGeolocationPermissionCallback()
441 void RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback);
444 * @copydoc Dali::WebEngine::UpdateDisplayArea()
446 void UpdateDisplayArea(Dali::Rect<int32_t> displayArea);
449 * @copydoc Dali::WebEngine::EnableVideoHole()
451 void EnableVideoHole(bool enabled);
454 * @copydoc Dali::WebEngine::SendHoverEvent()
456 bool SendHoverEvent(const Dali::HoverEvent& event);
459 * @copydoc Dali::WebEngine::SendWheelEvent()
461 bool SendWheelEvent(const Dali::WheelEvent& event);
464 * @copydoc Dali::WebEngine::FrameRenderedSignal()
466 Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& FrameRenderedSignal();
469 * @copydoc Dali::WebEngine::RegisterPageLoadStartedCallback()
471 void RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
474 * @copydoc Dali::WebEngine::RegisterPageLoadInProgressCallback()
476 void RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
479 * @copydoc Dali::WebEngine::RegisterPageLoadFinishedCallback()
481 void RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback);
484 * @copydoc Dali::WebEngine::RegisterPageLoadErrorCallback()
486 void RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback);
489 * @copydoc Dali::WebEngine::RegisterScrollEdgeReachedCallback()
491 void RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback);
494 * @copydoc Dali::WebEngine::RegisterUrlChangedCallback()
496 void RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback);
499 * @copydoc Dali::WebEngine::RegisterFormRepostDecidedCallback()
501 void RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback);
504 @copydoc Dali::WebEngine::RegisterConsoleMessageReceivedCallback()
506 void RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback);
509 @copydoc Dali::WebEngine::RegisterResponsePolicyDecidedCallback()
511 void RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback);
514 @copydoc Dali::WebEngine::RegisterNavigationPolicyDecidedCallback()
516 void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback);
519 * @copydoc Dali::WebEngine::RegisterCertificateConfirmedCallback()
521 void RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback);
524 * @copydoc Dali::WebEngine::RegisterSslCertificateChangedCallback()
526 void RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback);
529 * @copydoc Dali::WebEngine::RegisterHttpAuthHandlerCallback()
531 void RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback);
534 * @copydoc Dali::WebEngine::RegisterContextMenuShownCallback()
536 void RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback);
539 * @copydoc Dali::WebEngine::RegisterContextMenuHiddenCallback()
541 void RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback);
544 * @copydoc Dali::WebEngine::GetPlainTextAsynchronously()
546 void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback);
550 * @brief Constructor.
557 virtual ~WebEngine();
559 // Undefined copy constructor
560 WebEngine(const WebEngine& WebEngine);
562 // Undefined assignment operator
563 WebEngine& operator=(const WebEngine& WebEngine);
566 * @brief Initialize member data.
568 * @return Whether the initialization succeed or not.
573 * @brief Initialize library handle by loading web engine plugin.
575 * @return Whether the initialization succeed or not.
577 bool InitializePluginHandle();
580 typedef Dali::WebEnginePlugin* (*CreateWebEngineFunction)();
581 typedef void (*DestroyWebEngineFunction)(Dali::WebEnginePlugin* plugin);
583 Dali::WebEnginePlugin* mPlugin; ///< WebEnginePlugin instance
584 void* mHandle; ///< Handle for the loaded library
585 CreateWebEngineFunction mCreateWebEnginePtr; ///< Function to create plugin instance
586 DestroyWebEngineFunction mDestroyWebEnginePtr; ///< Function to destroy plugin instance
589 } // namespace Adaptor
590 } // namespace Internal
592 inline static Internal::Adaptor::WebEngine& GetImplementation(Dali::WebEngine& webEngine)
594 DALI_ASSERT_ALWAYS(webEngine && "WebEngine handle is empty.");
596 BaseObject& handle = webEngine.GetBaseObject();
598 return static_cast<Internal::Adaptor::WebEngine&>(handle);
601 inline static const Internal::Adaptor::WebEngine& GetImplementation(const Dali::WebEngine& webEngine)
603 DALI_ASSERT_ALWAYS(webEngine && "WebEngine handle is empty.");
605 const BaseObject& handle = webEngine.GetBaseObject();
607 return static_cast<const Internal::Adaptor::WebEngine&>(handle);