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=6f5e38639d27e78313f0033aadc4b4929be3638a;hp=cf5319f6d6c247a6bf893b1564ab1a4c06501290;hb=2f810b8a969d39e569b39107a02dfaf35c0c48bc;hpb=03d087167ceac9acf09a9cb7eb86bc06c0a5d4e7 diff --git a/dali-toolkit/internal/controls/web-view/web-view-impl.h b/dali-toolkit/internal/controls/web-view/web-view-impl.h index cf5319f..6f5e386 100755 --- 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) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -20,12 +20,15 @@ // EXTERNAL INCLUDES #include -#include +#include +#include #include #include #include +#include // INTERNAL INCLUDES +#include #include #include #include @@ -38,8 +41,6 @@ namespace Toolkit class KeyEvent; class TouchEvent; class WebBackForwardList; -class WebContext; -class WebCookieManager; class WebSettings; class WebView; @@ -52,7 +53,7 @@ protected: WebView(const std::string& locale, const std::string& timezoneId); - WebView(int argc, char** argv); + WebView(uint32_t argc, char** argv); virtual ~WebView(); @@ -68,36 +69,39 @@ public: static Toolkit::WebView New(const std::string& locale, const std::string& timezoneId); /** - * @copydoc Dali::Toolkit::WebView::New( int, char** ) + * @copydoc Dali::Toolkit::WebView::New( uint32_t, char** ) */ - static Toolkit::WebView New(int argc, char** argv); + static Toolkit::WebView New(uint32_t argc, char** argv); /** - * @brief Get settings of WebEngine. + * @copydoc Dali::Toolkit::WebView::FindWebView() */ - Dali::Toolkit::WebSettings* GetSettings() const; + static Toolkit::WebView FindWebView(Dali::WebEnginePlugin* plugin); /** - * @brief Get context of WebEngine. + * @copydoc Dali::Toolkit::WebView::GetContext() */ - Dali::Toolkit::WebContext* GetContext() const; + static Dali::WebEngineContext* GetContext(); /** - * @brief Get cookie manager of WebEngine. + * @copydoc Dali::Toolkit::WebView::GetCookieManager() */ - Dali::Toolkit::WebCookieManager* GetCookieManager() const; + static Dali::WebEngineCookieManager* GetCookieManager(); + + /** + * @copydoc Dali::Toolkit::WebView::GetSettings() + */ + Dali::Toolkit::WebSettings* GetSettings() const; /** - * @brief Get WebBackForwardList of WebEngine. + * @copydoc Dali::Toolkit::WebView::GetBackForwardList() */ Dali::Toolkit::WebBackForwardList* GetBackForwardList() const; /** - * @brief Get Favicon of web page. - * - * @return Handle to a fav icon + * @copydoc Dali::Toolkit::WebView::GetFavicon() */ - Dali::Toolkit::ImageView& GetFavicon(); + Dali::Toolkit::ImageView GetFavicon() const; /** * @copydoc Dali::Toolkit::WebView::LoadUrl() @@ -177,12 +181,12 @@ public: /** * @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(int deltaX, int deltaY); + bool ScrollEdgeBy(int32_t deltaX, int32_t deltaY); /** * @copydoc Dali::Toolkit::WebView::CanGoForward() @@ -207,12 +211,12 @@ public: /** * @copydoc Dali::Toolkit::WebView::EvaluateJavaScript() */ - void EvaluateJavaScript(const std::string& script, std::function resultHandler); + void EvaluateJavaScript(const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler); /** * @copydoc Dali::Toolkit::WebView::AddJavaScriptMessageHandler() */ - void AddJavaScriptMessageHandler(const std::string& exposedObjectName, std::function handler); + void AddJavaScriptMessageHandler(const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler); /** * @copydoc Dali::Toolkit::WebView::RegisterJavaScriptAlertCallback() @@ -245,6 +249,16 @@ public: 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() */ void ClearHistory(); @@ -282,12 +296,12 @@ public: /** * @copydoc Dali::Toolkit::WebView::GetScreenshot() */ - Dali::Toolkit::ImageView GetScreenshot(Dali::Rect viewArea, float scaleFactor); + 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); + bool GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback callback); /** * @copydoc Dali::Toolkit::WebView::CheckVideoPlayingAsynchronously() @@ -300,54 +314,94 @@ public: void RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback); /** - * @copydoc Dali::Toolkit::WebView::PageLoadStartedSignal() + * @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() */ - Dali::Toolkit::WebView::WebViewPageLoadSignalType& PageLoadStartedSignal(); + void RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback); /** - * @copydoc Dali::Toolkit::WebView::PageLoadInProgressSignal() + * @copydoc Dali::Toolkit::WebView::RegisterFormRepostDecidedCallback() */ - Dali::Toolkit::WebView::WebViewPageLoadSignalType& PageLoadInProgressSignal(); + void RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback); /** - * @copydoc Dali::Toolkit::WebView::PageLoadFinishedSignal() + * @copydoc Dali::Toolkit::WebView::RegisterFrameRenderedCallback() */ - Dali::Toolkit::WebView::WebViewPageLoadSignalType& PageLoadFinishedSignal(); + void RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback); /** - * @copydoc Dali::Toolkit::WebView::PageLoadErrorSignal() + * @copydoc Dali::Toolkit::WebView::RegisterConsoleMessageReceivedCallback() */ - Dali::Toolkit::WebView::WebViewPageLoadErrorSignalType& PageLoadErrorSignal(); + void RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback); /** - * @copydoc Dali::Toolkit::WebView::ScrollEdgeReachedSignal() + * @copydoc Dali::Toolkit::WebView::RegisterResponsePolicyDecidedCallback() */ - Dali::Toolkit::WebView::WebViewScrollEdgeReachedSignalType& ScrollEdgeReachedSignal(); + void RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback); /** - * @copydoc Dali::Toolkit::WebView::UrlChangedSignal() + * @copydoc Dali::Toolkit::WebView::RegisterNavigationPolicyDecidedCallback() */ - Dali::Toolkit::WebView::WebViewUrlChangedSignalType& UrlChangedSignal(); + void RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback); /** - * @copydoc Dali::Toolkit::WebView::FormRepostDecisionSignal() + * @copydoc Dali::Toolkit::WebView::RegisterCertificateConfirmedCallback() */ - Dali::Toolkit::WebView::WebViewFormRepostDecisionSignalType& FormRepostDecisionSignal(); + void RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback); /** - * @copydoc Dali::Toolkit::WebView::FrameRenderedSignal() + * @copydoc Dali::Toolkit::WebView::RegisterSslCertificateChangedCallback() */ - Dali::Toolkit::WebView::WebViewFrameRenderedSignalType& FrameRenderedSignal(); + void RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback); /** - * @copydoc Dali::Toolkit::WebView::RequestInterceptorSignal() + * @copydoc Dali::Toolkit::WebView::RegisterHttpAuthHandlerCallback() */ - Dali::Toolkit::WebView::WebViewRequestInterceptorSignalType& RequestInterceptorSignal(); + void RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback); /** - * @copydoc Dali::Toolkit::WebView::ConsoleMessageSignal() + * @copydoc Dali::Toolkit::WebView::RegisterContextMenuShownCallback() */ - Dali::Toolkit::WebView::WebViewConsoleMessageSignalType& ConsoleMessageSignal(); + 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 /** @@ -368,17 +422,6 @@ public: // Properties */ 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); - private: // From Control /** * @copydoc Toolkit::Control::OnInitialize() @@ -386,6 +429,11 @@ private: // From Control void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * @copydoc Toolkit::Control::GetNaturalSize */ Vector3 GetNaturalSize() override; @@ -417,14 +465,19 @@ private: WebView& operator=(const WebView& webView); /** + * @brief Gets web engine plugin. + */ + Dali::WebEnginePlugin* GetPlugin() const; + + /** * @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 */ @@ -484,10 +537,16 @@ private: 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. @@ -570,47 +629,10 @@ private: * @param[in] pixel Pixel data * @return The new image view */ - Dali::Toolkit::ImageView CreateImageView(Dali::PixelData pixel); - - /** - * @brief Callback function to be called when page load started. - * @param[in] url The url currently being loaded - */ - void OnPageLoadStarted(const std::string& url); - - /** - * @brief Callback function to be called when page is loading in progress. - * @param[in] url The url currently being loaded - */ - void OnPageLoadInProgress(const std::string& url); - - /** - * @brief Callback function to be called when page load finished. - * @param[in] url The url currently being loaded - */ - void OnPageLoadFinished(const std::string& url); - - /** - * @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 - */ - void OnPageLoadError(std::shared_ptr error); + Dali::Toolkit::ImageView CreateImageView(Dali::PixelData pixel) const; /** - * @brief Callback function to be called when scroll edge is reached. - * @param[in] e The scroll edge reached. - */ - void OnScrollEdgeReached(Dali::WebEnginePlugin::ScrollEdge edge); - - /** - * @brief Callback function to be called when url is changed. - * @param[in] url The url currently being loaded - */ - void OnUrlChanged(const std::string& url); - - /** - * Signal occurs when the Web View has been touched. + * @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. @@ -618,7 +640,7 @@ private: bool OnTouchEvent(Actor actor, const Dali::TouchEvent& touch); /** - * Signal occurs when the Web View has been hovered. + * @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. @@ -626,7 +648,7 @@ private: bool OnHoverEvent(Actor actor, const Dali::HoverEvent& hover); /** - * Signal occurs when the Web View receives wheel event. + * @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. @@ -634,15 +656,14 @@ private: bool OnWheelEvent(Actor actor, const Dali::WheelEvent& wheel); /** - * @brief Callback function to be called when form repost decision need be checked. - * @param[in] decision The new decision for form repost + * @brief Callback function to be called when frame is rendered. */ - void OnFormRepostDecision(std::shared_ptr decision); + void OnFrameRendered(); /** - * @brief Callback function to be called when frame is rendered. + * @brief Callback function to be called when frame is rendered. This is to check initial buffer is ready. */ - void OnFrameRendered(); + void OnInitialFrameRendered(); /** * @brief Callback function to be called when visibility is changed. @@ -658,51 +679,49 @@ private: */ void OnScreenshotCaptured(Dali::PixelData pixel); - /** - * @brief Callback function to be called when http request need be intercepted. - * @param [in] request The http request interceptor. - */ - void OnInterceptRequest(std::shared_ptr interceptor); +protected: + class WebViewAccessible : public DevelControl::ControlAccessible + { + public: + WebViewAccessible() = delete; - /** - * @brief Callback function to be called when console message will be logged. - * @param[in] message The message logged. - */ - void OnConsoleMessage(std::shared_ptr message); + WebViewAccessible(Dali::Actor self, Dali::WebEngine& webEngine); + + protected: + /** + * @copydoc Dali::Accessibility::ActorAccessible::DoGetChildren() + */ + void DoGetChildren(std::vector& children) override; + + private: + void OnAccessibilityEnabled(); + void OnAccessibilityDisabled(); + void SetRemoteChildAddress(Dali::Accessibility::Address address); + + Dali::Accessibility::ProxyAccessible mRemoteChild; + Dali::WebEngine& mWebEngine; + }; private: - std::string mUrl; Dali::Toolkit::Visual::Base mVisual; Dali::Size mWebViewSize; Dali::WebEngine mWebEngine; - Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadStartedSignal; - Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadInProgressSignal; - Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadFinishedSignal; - Dali::Toolkit::WebView::WebViewPageLoadErrorSignalType mPageLoadErrorSignal; - Dali::Toolkit::WebView::WebViewUrlChangedSignalType mUrlChangedSignal; - Dali::Toolkit::WebView::WebViewScrollEdgeReachedSignalType mScrollEdgeReachedSignal; - Dali::Toolkit::WebView::WebViewFormRepostDecisionSignalType mFormRepostDecisionSignal; - Dali::Toolkit::WebView::WebViewFrameRenderedSignalType mFrameRenderedSignal; - Dali::Toolkit::WebView::WebViewRequestInterceptorSignalType mRequestInterceptorSignal; - Dali::Toolkit::WebView::WebViewConsoleMessageSignalType mConsoleMessageSignal; - - std::unique_ptr mWebContext; - std::unique_ptr mWebCookieManager; std::unique_ptr mWebSettings; std::unique_ptr mWebBackForwardList; - Dali::Toolkit::ImageView mFaviconView; - Dali::PropertyNotification mPositionUpdateNotification; Dali::PropertyNotification mSizeUpdateNotification; Dali::PropertyNotification mScaleUpdateNotification; + Dali::Rect mWebViewArea; bool mVideoHoleEnabled; - Dali::Rect mWebViewArea; bool mMouseEventsEnabled; bool mKeyEventsEnabled; Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback mScreenshotCapturedCallback; + Dali::WebEnginePlugin::WebEngineFrameRenderedCallback mFrameRenderedCallback; + + static std::unordered_map> mPluginWebViewMap; }; } // namespace Internal