+ mWebEngine.RegisterUrlChangedCallback(std::move(callback));
+ }
+}
+
+void WebView::RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.RegisterFormRepostDecidedCallback(std::move(callback));
+ }
+}
+
+void WebView::RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback)
+{
+ mFrameRenderedCallback = std::move(callback);
+}
+
+void WebView::RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.RegisterConsoleMessageReceivedCallback(std::move(callback));
+ }
+}
+
+void WebView::RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.RegisterResponsePolicyDecidedCallback(std::move(callback));
+ }
+}
+
+void WebView::RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.RegisterNavigationPolicyDecidedCallback(std::move(callback));
+ }
+}
+
+void WebView::RegisterNewWindowCreatedCallback(Dali::WebEnginePlugin::WebEngineNewWindowCreatedCallback callback)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.RegisterNewWindowCreatedCallback(std::move(callback));
+ }
+}
+
+void WebView::RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.RegisterCertificateConfirmedCallback(std::move(callback));
+ }
+}
+
+void WebView::RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.RegisterSslCertificateChangedCallback(std::move(callback));
+ }
+}
+
+void WebView::RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.RegisterHttpAuthHandlerCallback(std::move(callback));
+ }
+}
+
+void WebView::RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.RegisterContextMenuShownCallback(std::move(callback));
+ }
+}
+
+void WebView::RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.RegisterContextMenuHiddenCallback(std::move(callback));
+ }
+}
+
+void WebView::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.GetPlainTextAsynchronously(std::move(callback));
+ }
+}
+
+void WebView::OnFrameRendered()
+{
+ if(mFrameRenderedCallback)
+ {
+ mFrameRenderedCallback();
+ }
+
+ // Make sure that mVisual is created only if required.
+ if(mVisualChangeRequired || !mVisual)
+ {
+ // Reset flag
+ mVisualChangeRequired = false;
+
+ auto nativeImageSourcePtr = mWebEngine.GetNativeImageSource();
+
+ mLastRenderedNativeImageWidth = nativeImageSourcePtr->GetWidth();
+ mLastRenderedNativeImageHeight = nativeImageSourcePtr->GetHeight();
+
+ Dali::Toolkit::ImageUrl nativeImageUrl = Dali::Toolkit::Image::GenerateUrl(nativeImageSourcePtr);
+
+ mVisual = Toolkit::VisualFactory::Get().CreateVisual(
+ {{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE},
+ {Toolkit::ImageVisual::Property::URL, nativeImageUrl.GetUrl()},
+ {Toolkit::ImageVisual::Property::PIXEL_AREA, FULL_TEXTURE_RECT},
+ {Toolkit::ImageVisual::Property::WRAP_MODE_U, Dali::WrapMode::CLAMP_TO_EDGE},
+ {Toolkit::ImageVisual::Property::WRAP_MODE_V, Dali::WrapMode::CLAMP_TO_EDGE}});
+
+ if(mVisual)
+ {
+ DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, mVisual);
+ EnableBlendMode(!mVideoHoleEnabled);
+ }
+ }
+}
+
+void WebView::OnDisplayAreaUpdated(Dali::PropertyNotification& /*source*/)
+{
+ if(!mWebEngine)
+ {
+ return;
+ }
+
+ auto displayArea = CalculateDisplayArea(Self(), DisplayAreaCalculateOption::CURRENT_PROPERTY);
+
+ SetDisplayArea(displayArea);
+}
+
+void WebView::OnVisibilityChanged(Actor actor, bool isVisible, Dali::DevelActor::VisibilityChange::Type type)
+{
+ if(type == Dali::DevelActor::VisibilityChange::Type::SELF)
+ {
+ if(isVisible)
+ {
+ mWebViewVisibleState |= WebViewVisibleStateFlag::SELF_SHOW;
+ }
+ else
+ {
+ mWebViewVisibleState &= ~WebViewVisibleStateFlag::SELF_SHOW;
+ }
+ }
+ else if(type == Dali::DevelActor::VisibilityChange::Type::PARENT)
+ {
+ if(isVisible)
+ {
+ mWebViewVisibleState |= WebViewVisibleStateFlag::PARENT_SHOW;
+ // TODO : We should consider double-hide called from parent
+ }
+ else
+ {
+ mWebViewVisibleState &= ~WebViewVisibleStateFlag::PARENT_SHOW;
+ }
+ }
+ ApplyVisibilityCheck();
+}
+
+void WebView::OnWindowVisibilityChanged(Window window, bool visible)
+{
+ if(visible)
+ {
+ mWebViewVisibleState |= WebViewVisibleStateFlag::WINDOW_SHOW;
+ }
+ else
+ {
+ mWebViewVisibleState &= ~WebViewVisibleStateFlag::WINDOW_SHOW;