X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fweb-view%2Fweb-view-impl.h;h=4031ee6a17873891772eee7f09ed01669f7e5393;hp=0769bad7c2597f5063e0c511d7a82fe23ba07c87;hb=HEAD;hpb=542e587d36cb500e0c3b36635cf22b81b6608697 diff --git a/dali-toolkit/internal/controls/web-view/web-view-impl.h b/dali-toolkit/internal/controls/web-view/web-view-impl.h old mode 100755 new mode 100644 index 0769bad..6415a8b --- a/dali-toolkit/internal/controls/web-view/web-view-impl.h +++ b/dali-toolkit/internal/controls/web-view/web-view-impl.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_INTERNAL_WEB_VIEW_H /* - * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * Copyright (c) 2024 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,39 +19,44 @@ */ // EXTERNAL INCLUDES -#include +#include +#include +#include #include +#include +#include // INTERNAL INCLUDES +#include +#include #include #include -#include +#include namespace Dali { - namespace Toolkit { - class KeyEvent; class TouchEvent; +class WebBackForwardList; +class WebSettings; class WebView; namespace Internal { - class WebView : public Control { protected: - WebView(); - WebView( const std::string& locale, const std::string& timezoneId ); + WebView(const std::string& locale, const std::string& timezoneId); + + WebView(uint32_t argc, char** argv); virtual ~WebView(); public: - /** * @copydoc Dali::Toolkit::WebView::New() */ @@ -60,17 +65,67 @@ public: /** * @copydoc Dali::Toolkit::WebView::New( const std::string&, const std::string& ) */ - static Toolkit::WebView New( const std::string& locale, const std::string& timezoneId ); + static Toolkit::WebView New(const std::string& locale, const std::string& timezoneId); + + /** + * @copydoc Dali::Toolkit::WebView::New( uint32_t, char** ) + */ + static Toolkit::WebView New(uint32_t argc, char** argv); + + /** + * @copydoc Dali::Toolkit::WebView::FindWebView() + */ + static Toolkit::WebView FindWebView(Dali::WebEnginePlugin* plugin); + + /** + * @copydoc Dali::Toolkit::WebView::GetContext() + */ + static Dali::WebEngineContext* GetContext(); + + /** + * @copydoc Dali::Toolkit::WebView::GetCookieManager() + */ + static Dali::WebEngineCookieManager* GetCookieManager(); + + /** + * @copydoc Dali::Toolkit::WebView::GetSettings() + */ + Dali::Toolkit::WebSettings* GetSettings() const; + + /** + * @copydoc Dali::Toolkit::WebView::GetBackForwardList() + */ + Dali::Toolkit::WebBackForwardList* GetBackForwardList() const; + + /** + * @copydoc Dali::Toolkit::WebView::GetPlugin() + */ + Dali::WebEnginePlugin* GetPlugin() const; + + /** + * @copydoc Dali::Toolkit::WebView::GetFavicon() + */ + Dali::Toolkit::ImageView GetFavicon() const; /** * @copydoc Dali::Toolkit::WebView::LoadUrl() */ - void LoadUrl( const std::string& url ); + void LoadUrl(const std::string& url); /** * @copydoc Dali::WebEngine::LoadHTMLString() */ - void LoadHTMLString( const std::string& htmlString ); + void LoadHtmlString(const std::string& htmlString); + + /** + * @copydoc Dali::WebEngine::LoadHtmlStringOverrideCurrentEntry() + */ + bool LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl); + + /** + * @copydoc Dali::WebEngine::LoadContents() + */ + bool LoadContents(const int8_t* contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri); /** * @copydoc Dali::Toolkit::WebView::Reload() @@ -78,6 +133,11 @@ public: void Reload(); /** + * @copydoc Dali::WebEngine::ReloadWithoutCache() + */ + bool ReloadWithoutCache(); + + /** * @copydoc Dali::Toolkit::WebView::StopLoading() */ void StopLoading(); @@ -93,9 +153,44 @@ public: void Resume(); /** + * @copydoc Dali::WebEngine::SuspendNetworkLoading() + */ + void SuspendNetworkLoading(); + + /** + * @copydoc Dali::WebEngine::ResumeNetworkLoading() + */ + void ResumeNetworkLoading(); + + /** + * @copydoc Dali::WebEngine::AddCustomHeader() + */ + bool AddCustomHeader(const std::string& name, const std::string& value); + + /** + * @copydoc Dali::WebEngine::RemoveCustomHeader() + */ + bool RemoveCustomHeader(const std::string& name); + + /** + * @copydoc Dali::WebEngine::StartInspectorServer() + */ + uint32_t StartInspectorServer(uint32_t port); + + /** + * @copydoc Dali::WebEngine::StopInspectorServer() + */ + bool StopInspectorServer(); + + /** * @copydoc Dali::Toolkit::WebView::ScrollBy() */ - void ScrollBy( int deltaX, int deltaY ); + void ScrollBy(int32_t deltaX, int32_t deltaY); + + /** + * @copydoc Dali::WebEngine::ScrollEdgeBy() + */ + bool ScrollEdgeBy(int32_t deltaX, int32_t deltaY); /** * @copydoc Dali::Toolkit::WebView::CanGoForward() @@ -120,12 +215,52 @@ public: /** * @copydoc Dali::Toolkit::WebView::EvaluateJavaScript() */ - void EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler ); + void EvaluateJavaScript(const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler); /** * @copydoc Dali::Toolkit::WebView::AddJavaScriptMessageHandler() */ - void AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void( const std::string& ) > handler ); + void AddJavaScriptMessageHandler(const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterJavaScriptAlertCallback() + */ + void RegisterJavaScriptAlertCallback(Dali::WebEnginePlugin::JavaScriptAlertCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::JavaScriptAlertReply() + */ + void JavaScriptAlertReply(); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterJavaScriptConfirmCallback() + */ + void RegisterJavaScriptConfirmCallback(Dali::WebEnginePlugin::JavaScriptConfirmCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::JavaScriptConfirmReply() + */ + void JavaScriptConfirmReply(bool confirmed); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterJavaScriptPromptCallback() + */ + void RegisterJavaScriptPromptCallback(Dali::WebEnginePlugin::JavaScriptPromptCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::JavaScriptPromptReply() + */ + void JavaScriptPromptReply(const std::string& result); + + /** + * @copydoc Dali::Toolkit::WebView::CreateHitTest() + */ + std::unique_ptr CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode); + + /** + * @copydoc Dali::Toolkit::WebView::CreateHitTestAsynchronously() + */ + bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback); /** * @copydoc Dali::Toolkit::WebView::ClearHistory() @@ -133,45 +268,159 @@ public: void ClearHistory(); /** - * @copydoc Dali::Toolkit::WebView::ClearCache() + * @copydoc Dali::Toolkit::WebView::ClearAllTilesResources() */ - void ClearCache(); + void ClearAllTilesResources(); /** - * @copydoc Dali::Toolkit::WebView::ClearCookies() + * @copydoc Dali::Toolkit::WebView::SetScaleFactor() */ - void ClearCookies(); + void SetScaleFactor(float scaleFactor, Dali::Vector2 point); /** - * @copydoc Dali::Toolkit::WebView::PageLoadStartedSignal() + * @copydoc Dali::Toolkit::WebView::GetScaleFactor() */ - Dali::Toolkit::WebView::WebViewPageLoadSignalType& PageLoadStartedSignal(); + float GetScaleFactor() const; /** - * @copydoc Dali::Toolkit::WebView::PageLoadFinishedSignal() + * @copydoc Dali::Toolkit::WebView::ActivateAccessibility() */ - Dali::Toolkit::WebView::WebViewPageLoadSignalType& PageLoadFinishedSignal(); + void ActivateAccessibility(bool activated); /** - * @copydoc Dali::Toolkit::WebView::PageLoadErrorSignal() + * @copydoc Dali::Toolkit::WebView::HighlightText() */ - Dali::Toolkit::WebView::WebViewPageLoadErrorSignalType& PageLoadErrorSignal(); + bool HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount); /** - * @copydoc Dali::Toolkit::WebView::ScrollEdgeReachedSignal() + * @copydoc Dali::Toolkit::WebView::AddDynamicCertificatePath() */ - Dali::Toolkit::WebView::WebViewScrollEdgeReachedSignalType& ScrollEdgeReachedSignal(); + void AddDynamicCertificatePath(const std::string& host, const std::string& certPath); -public: // Properties + /** + * @copydoc Dali::Toolkit::WebView::GetScreenshot() + */ + Dali::Toolkit::ImageView GetScreenshot(Dali::Rect viewArea, float scaleFactor); + + /** + * @copydoc Dali::Toolkit::WebView::GetScreenshotAsynchronously() + */ + bool GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::CheckVideoPlayingAsynchronously() + */ + bool CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterGeolocationPermissionCallback() + */ + void RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::SetTtsFocus() + */ + void SetTtsFocus(bool focused); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterPageLoadStartedCallback() + */ + void RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterPageLoadInProgressCallback() + */ + void RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterPageLoadFinishedCallback() + */ + void RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterPageLoadErrorCallback() + */ + void RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterScrollEdgeReachedCallback() + */ + void RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback); /** + * @copydoc Dali::Toolkit::WebView::RegisterUrlChangedCallback() + */ + void RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterFormRepostDecidedCallback() + */ + void RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterFrameRenderedCallback() + */ + void RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterConsoleMessageReceivedCallback() + */ + void RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterResponsePolicyDecidedCallback() + */ + void RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterNavigationPolicyDecidedCallback() + */ + void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterNewWindowCreatedCallback() + */ + void RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterCertificateConfirmedCallback() + */ + void RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterSslCertificateChangedCallback() + */ + void RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterHttpAuthHandlerCallback() + */ + void RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterContextMenuShownCallback() + */ + void RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::RegisterContextMenuHiddenCallback() + */ + void RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback); + + /** + * @copydoc Dali::Toolkit::WebView::GetPlainTextAsynchronously() + */ + void GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback); + +public: // Properties + /** * @brief Called when a property of an object of this type is set. * * @param[in] object The object whose property is set. * @param[in] index The property index. * @param[in] value The new property value. */ - static void SetProperty( Dali::BaseObject* object, Dali::Property::Index index, const Dali::Property::Value& value ); + static void SetProperty(Dali::BaseObject* object, Dali::Property::Index index, const Dali::Property::Value& value); /** * @brief Called to retrieve a property of an object of this type. @@ -180,48 +429,33 @@ public: // Properties * @param[in] index The property index. * @return The current value of the property. */ - static Dali::Property::Value GetProperty( Dali::BaseObject* object, Dali::Property::Index propertyIndex ); - - /** - * Connects a callback function with the object's signals. - * @param[in] object The object providing the signal. - * @param[in] tracker Used to disconnect the signal. - * @param[in] signalName The signal to connect to. - * @param[in] functor A newly allocated FunctorDelegate. - * @return True if the signal was connected. - * @post If a signal was connected, ownership of functor was passed to CallbackBase. Otherwise the c - */ - static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ); + static Dali::Property::Value GetProperty(Dali::BaseObject* object, Dali::Property::Index propertyIndex); private: // From Control - /** * @copydoc Toolkit::Control::OnInitialize() */ void OnInitialize() override; /** - * @copydoc Toolkit::Control::GetNaturalSize + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() */ - Vector3 GetNaturalSize() override; + DevelControl::ControlAccessible* CreateAccessibleObject() override; /** - * @copydoc Toolkit::Control::OnRelayout() + * @copydoc Toolkit::Internal::Control::OnRelayout() */ - void OnRelayout( const Vector2& size, RelayoutContainer& container ) override; + void OnRelayout(const Vector2& size, RelayoutContainer& container) override; /** - * Signal occurs when the Web View has been touched. - * @param[in] actor The Actor Touched - * @param[in] touch The Touch Data. - * @return Whether to consume event or not. + * @copydoc Toolkit::Control::GetNaturalSize */ - bool OnTouchEvent( Actor actor, const Dali::TouchEvent& touch ); + Vector3 GetNaturalSize() override; /** * @copydoc Toolkit::Control::OnKeyEvent() */ - bool OnKeyEvent( const Dali::KeyEvent& event ) override; + bool OnKeyEvent(const Dali::KeyEvent& event) override; /** * @copydoc Toolkit::Control::OnKeyInputFocusGained() @@ -233,187 +467,327 @@ private: // From Control */ void OnKeyInputFocusLost() override; -private: + /** + * @copydoc Toolkit::Control::OnSceneConnection() + */ + void OnSceneConnection(int depth) override; + /** + * @copydoc Toolkit::Control::OnSceneDisconnection() + */ + void OnSceneDisconnection() override; + +private: // Undefined - WebView( const WebView& webView ); + WebView(const WebView& webView); - WebView& operator=( const WebView& webView ); + WebView& operator=(const WebView& webView); /** - * @brief Sets an absolute scroll of the given view. + * @brief Set an absolute scroll of the given view. * @param[in] x The coordinate x of scroll * @param[in] y The coordinate y of scroll */ - void SetScrollPosition( int x, int y ); + void SetScrollPosition(int32_t x, int32_t y); /** - * @brief Gets the current scroll position of the given view. + * @brief Get the current scroll position of the given view. * @param[out] x The coordinate x of scroll * @param[out] y The coordinate y of scroll */ - void GetScrollPosition( int& x, int& y ) const; + Dali::Vector2 GetScrollPosition() const; /** - * @brief Gets the possible scroll size of the given view. + * @brief Get the possible scroll size of the given view. * @param[out] width The width of scroll size * @param[out] height The height of scroll size */ - void GetScrollSize( int& width, int& height ) const; + Dali::Vector2 GetScrollSize() const; /** - * @brief Gets the last known content's size. + * @brief Get the last known content's size. * @param[out] width The width of content's size * @param[out] height The height of content's size */ - void GetContentSize( int& width, int& height ) const; + Dali::Vector2 GetContentSize() const; /** - * @brief Get cache model option. The default isToolkit::WebView::CacheModel::DOCUMENT_VIEWER. - * @see Toolkit::WebView::CacheModel::Type + * @brief Return the title of the Web. + * + * @return The title of web page + */ + std::string GetTitle() const; + + /** + * @brief Set the background color of web page. + * @param[in] color The value of background color. */ - Toolkit::WebView::CacheModel::Type GetCacheModel() const; + void SetDocumentBackgroundColor(Dali::Vector4 color); /** - * @brief Set cache model option. The default isToolkit::WebView::CacheModel::DOCUMENT_VIEWER. - * @param[in] cacheModel The cache model option - * @see Toolkit::WebView::CacheModel::Type + * @brief Clear tiles when hidden. + * + * @param[in] cleared Whether tiles are cleared or not */ - void SetCacheModel( Toolkit::WebView::CacheModel::Type cacheModel ); + void ClearTilesWhenHidden(bool cleared); /** - * @brief Gets the cookie acceptance policy. The default is Toolkit::WebView::CookieAcceptPolicy::NO_THIRD_PARTY. - * @see Toolkit::WebView::CookieAcceptPolicy::Type + * @brief Set multiplier of cover area of tile. + * + * @param[in] multiplier The multiplier of cover area */ - Toolkit::WebView::CookieAcceptPolicy::Type GetCookieAcceptPolicy() const; + void SetTileCoverAreaMultiplier(float multiplier); /** - * @brief Sets the cookie acceptance policy. The default is Toolkit::WebView::CookieAcceptPolicy::NO_THIRD_PARTY. - * @param[in] policy The cookie acceptance policy - * @see Toolkit::WebView::CookieAcceptPolicy::Type + * @brief Enable cursor by client. + * @param[in] enabled Whether cursor is enabled or not. */ - void SetCookieAcceptPolicy( Toolkit::WebView::CookieAcceptPolicy::Type policy ); + void EnableCursorByClient(bool enabled); + + /** + * @brief Get the selected text. + * @return The selected text + */ + std::string GetSelectedText() const; + + /** + * @brief Get url of web page. + * @return The string of url + */ + std::string GetUrl() const; /** * @brief Get user agent string. * @return The string value of user agent */ - const std::string& GetUserAgent() const; + std::string GetUserAgent() const; /** * @brief Set user agent string. * @param[in] userAgent The string value of user agent */ - void SetUserAgent( const std::string& userAgent ); + void SetUserAgent(const std::string& userAgent); /** - * @brief Returns whether JavaScript can be executable. The default is true. - * - * @return true if JavaScript executing is enabled, false otherwise + * @brief Set zoom factor of the current page. + * @param[in] zoomFactor a new factor to be set. */ - bool IsJavaScriptEnabled() const; + void SetPageZoomFactor(float zoomFactor); /** - * @brief Enables/disables JavaScript executing. The default is enabled. - * - * @param[in] enabled True if JavaScript executing is enabled, false otherwise + * @brief Query the current zoom factor of the page。 + * @return The current page zoom factor. */ - void EnableJavaScript( bool enabled ); + float GetPageZoomFactor() const; /** - * @brief Returns whether images can be loaded automatically. The default is true. - * - * @return true if images are loaded automatically, false otherwise + * @brief Set the current text zoom level。. + * @param[in] zoomFactor a new factor to be set. */ - bool AreImagesAutomaticallyLoaded() const; + void SetTextZoomFactor(float zoomFactor); /** - * @brief Enables/disables auto loading of images. The default is enabled. - * - * @param[in] automatic True if images are loaded automatically, false otherwise + * @brief Get the current text zoom level. + * @return The current text zoom factor. */ - void LoadImagesAutomatically( bool automatic ); + float GetTextZoomFactor() const; /** - * @brief Gets the default text encoding name (e.g. UTF-8). - * - * @return The default text encoding name + * @brief Get the current load progress of the page. + * @return The load progress of the page. */ - const std::string& GetDefaultTextEncodingName() const; + float GetLoadProgressPercentage() const; /** - * @brief Sets the default text encoding name (e.g. UTF-8). + * @brief Request to set the current page's visibility. + * @param[in] visible Visible or not. * - * @param[in] defaultTextEncodingName The default text encoding name + * @return true if succeeded, false otherwise + */ + bool SetVisibility(bool visible); + + /** + * @brief Enable/Disable video hole for video playing. + * @param[in] enabled True if video hole is enabled, false otherwise. + */ + void EnableVideoHole(bool enabled); + + /** + * @brief Enable blend mode. + * @param[in] blendEnabled True if turn on blend mode, false otherwise. */ - void SetDefaultTextEncodingName( const std::string& defaultTextEncodingName ); + void EnableBlendMode(bool blendEnabled); /** - * @brief Returns the default font size in pixel. The default value is 16. + * @brief Enable/disable mouse events. The default is enabled. * - * @return The default font size + * @param[in] enabled True if mouse events are enabled, false otherwise */ - int GetDefaultFontSize() const; + void EnableMouseEvents(bool enabled); /** - * @brief Sets the default font size in pixel. The default value is 16. + * @brief Enable/disable key events. The default is enabled. * - * @param[in] defaultFontSize A new default font size to set + * @param[in] enabled True if key events enabled, false otherwise */ - void SetDefaultFontSize( int defaultFontSize ); + void EnableKeyEvents(bool enabled); /** - * @brief Callback function to be called when page load started. - * @param[in] url The url currently being loaded + * @brief Create image view by pixel data. + * @param[in] pixel Pixel data + * @return The new image view */ - void OnPageLoadStarted( const std::string& url ); + Dali::Toolkit::ImageView CreateImageView(Dali::PixelData pixel) const; /** - * @brief Callback function to be called when page load finished. - * @param[in] url The url currently being loaded + * @brief Signal occurs when the Web View has been touched. + * @param[in] actor The Actor Touched + * @param[in] touch The Touch Data. + * @return Whether to consume event or not. */ - void OnPageLoadFinished( const std::string& url ); + bool OnTouchEvent(Actor actor, const Dali::TouchEvent& touch); /** - * @brief Callback function to be called when there is an error in page loading. - * @param[in] url The url currently being loaded - * @param[in] errorCode The error code + * @brief Signal occurs when the Web View has been hovered. + * @param[in] actor The Actor Hovered + * @param[in] hover The Hover Data. + * @return Whether to consume event or not. */ - void OnPageLoadError( const std::string& url, int errorCode ); + bool OnHoverEvent(Actor actor, const Dali::HoverEvent& hover); /** - * @brief Callback function to be called when scroll edge is reached. - * @param[in] e The scroll edge reached. + * @brief Signal occurs when the Web View receives wheel event. + * @param[in] actor The Actor that receives Wheel event. + * @param[in] wheel The Wheel Data. + * @return Whether to consume event or not. */ - void OnScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge edge ); + bool OnWheelEvent(Actor actor, const Dali::WheelEvent& wheel); -private: + /** + * @brief Callback function to be called when frame is rendered. + */ + void OnFrameRendered(); + + /** + * @brief Callback for updating display area of web view. + * @param[in] source The soource triggers Notification. + */ + void OnDisplayAreaUpdated(Dali::PropertyNotification& source); + + /** + * @brief Callback function to be called when visibility is changed. + * @param[in] actor The actor, or child of actor, whose visibility has changed + * @param[in] isVisible Whether the actor is now visible or not + * @param[in] type, Whether the actor's visible property has changed or a parent's + */ + void OnVisibilityChanged(Actor actor, bool isVisible, Dali::DevelActor::VisibilityChange::Type type); + + /** + * @brief Callback when the visibility of the window is changed. + * @param[in] window The window whose visibility has changed + * @param[in] visible Whether the window is now visible or not + */ + void OnWindowVisibilityChanged(Window window, bool visible); + + /** + * @brief callback for screen shot captured. + * @param[in] pixel Pixel data of screen shot. + */ + void OnScreenshotCaptured(Dali::PixelData pixel); - std::string mUrl; - Dali::Toolkit::Visual::Base mVisual; - Dali::Size mWebViewSize; - Dali::WebEngine mWebEngine; + /** + * @brief Set DisplayArea by input value. + * It will send changes area infomations to webengine internally. + * + * @param[in] displayArea The display area for current webview want to show. + */ + void SetDisplayArea(const Dali::Rect& displayArea); + + /** + * @brief Apply self visibility state and send visibility chagend to web engine. + */ + void ApplyVisibilityCheck(); + +protected: + class WebViewAccessible : public DevelControl::ControlAccessible + { + public: + WebViewAccessible() = delete; + + WebViewAccessible(Dali::Actor self, Dali::WebEngine& webEngine); + + protected: + /** + * @copydoc Dali::Accessibility::Accessible::GetAttributes() + */ + Dali::Accessibility::Attributes GetAttributes() const override; + + /** + * @copydoc Dali::Accessibility::ActorAccessible::DoGetChildren() + */ + void DoGetChildren(std::vector& children) override; - Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadStartedSignal; - Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadFinishedSignal; - Dali::Toolkit::WebView::WebViewPageLoadErrorSignalType mPageLoadErrorSignal; - Dali::Toolkit::WebView::WebViewScrollEdgeReachedSignalType mScrollEdgeReachedSignal; + private: + void OnAccessibilityEnabled(); + void OnAccessibilityDisabled(); + void SetRemoteChildAddress(Dali::Accessibility::Address address); + + Dali::Accessibility::ProxyAccessible mRemoteChild; + Dali::WebEngine& mWebEngine; + }; + +private: + Dali::Toolkit::Visual::Base mVisual; + Dali::Size mWebViewSize; + Dali::WebEngine mWebEngine; + + uint32_t mLastRenderedNativeImageWidth; + uint32_t mLastRenderedNativeImageHeight; + + enum WebViewVisibleStateFlag + { + NONE = 0, + SCENE_ON = 1 << 0, + WINDOW_SHOW = 1 << 1, + SELF_SHOW = 1 << 2, + PARENT_SHOW = 1 << 3, + + VISIBLE = SCENE_ON | WINDOW_SHOW | SELF_SHOW | PARENT_SHOW, + }; + uint32_t mWebViewVisibleState{WebViewVisibleStateFlag::NONE}; /// Flag of web view visible. + WeakHandle mPlacementWindow; + + std::unique_ptr mWebSettings; + std::unique_ptr mWebBackForwardList; + + Dali::PropertyNotification mPositionUpdateNotification; + Dali::PropertyNotification mSizeUpdateNotification; + Dali::PropertyNotification mScaleUpdateNotification; + Dali::Rect mWebViewArea; + bool mVideoHoleEnabled; + bool mMouseEventsEnabled; + bool mKeyEventsEnabled; + + bool mVisualChangeRequired; + + Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback mScreenshotCapturedCallback; + Dali::WebEnginePlugin::WebEngineFrameRenderedCallback mFrameRenderedCallback; }; } // namespace Internal -inline Toolkit::Internal::WebView& GetImpl( Toolkit::WebView& handle ) +inline Toolkit::Internal::WebView& GetImpl(Toolkit::WebView& handle) { - DALI_ASSERT_ALWAYS( handle ); + DALI_ASSERT_ALWAYS(handle); Dali::RefObject& impl = handle.GetImplementation(); - return static_cast< Toolkit::Internal::WebView& >( impl ); + return static_cast(impl); } -inline const Toolkit::Internal::WebView& GetImpl( const Toolkit::WebView& handle ) +inline const Toolkit::Internal::WebView& GetImpl(const Toolkit::WebView& handle) { - DALI_ASSERT_ALWAYS( handle ); + DALI_ASSERT_ALWAYS(handle); const Dali::RefObject& impl = handle.GetImplementation(); - return static_cast< const Toolkit::Internal::WebView& >( impl ); + return static_cast(impl); } } // namespace Toolkit