+ Dali::Toolkit::WebView handle(GetOwner());
+ mUrlChangedSignal.Emit(handle, url);
+ }
+}
+
+void WebView::OnFormRepostDecision(std::shared_ptr<Dali::WebEngineFormRepostDecision> decision)
+{
+ if(!mFormRepostDecisionSignal.Empty())
+ {
+ Dali::Toolkit::WebView handle(GetOwner());
+ mFormRepostDecisionSignal.Emit(handle, std::move(decision));
+ }
+}
+
+void WebView::OnFrameRendered()
+{
+ if(!mFrameRenderedSignal.Empty())
+ {
+ Dali::Toolkit::WebView handle(GetOwner());
+ mFrameRenderedSignal.Emit(handle);
+ }
+}
+
+void WebView::OnInitialFrameRendered()
+{
+ mWebEngine.FrameRenderedSignal().Disconnect(this, &WebView::OnInitialFrameRendered);
+
+ Texture texture = Dali::Texture::New(*mWebEngine.GetNativeImageSource());
+ const std::string nativeImageUrl = Dali::Toolkit::TextureManager::AddTexture(texture);
+ mVisual = Toolkit::VisualFactory::Get().CreateVisual({{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE}, {Toolkit::ImageVisual::Property::URL, nativeImageUrl}});
+
+ if(mVisual)
+ {
+ DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, mVisual);
+ EnableBlendMode(!mVideoHoleEnabled);
+ }
+}
+
+void WebView::OnVisibilityChanged(Actor actor, bool isVisible, Dali::DevelActor::VisibilityChange::Type type)
+{
+ if(type == Dali::DevelActor::VisibilityChange::Type::SELF)
+ {
+ SetVisibility(isVisible);
+ }
+}
+
+void WebView::OnScreenshotCaptured(Dali::PixelData pixel)
+{
+ if(mScreenshotCapturedCallback)
+ {
+ Dali::Toolkit::ImageView imageView = CreateImageView(pixel);
+ mScreenshotCapturedCallback(imageView);
+ }
+}
+
+void WebView::OnInterceptRequest(std::shared_ptr<Dali::WebEngineRequestInterceptor> interceptor)
+{
+ if(!mRequestInterceptorSignal.Empty())
+ {
+ Dali::Toolkit::WebView handle(GetOwner());
+ mRequestInterceptorSignal.Emit(handle, std::move(interceptor));
+ }
+}
+
+void WebView::OnConsoleMessage(std::shared_ptr<Dali::WebEngineConsoleMessage> message)
+{
+ if(!mConsoleMessageSignal.Empty())
+ {
+ Dali::Toolkit::WebView handle(GetOwner());
+ mConsoleMessageSignal.Emit(handle, std::move(message));
+ }
+}
+
+void WebView::OnResponsePolicyDecided(std::shared_ptr<Dali::WebEnginePolicyDecision> decision)
+{
+ if(!mResponsePolicyDecisionSignal.Empty())
+ {
+ Dali::Toolkit::WebView handle(GetOwner());
+ mResponsePolicyDecisionSignal.Emit(handle, std::move(decision));
+ }
+}
+
+void WebView::OnCertificateConfirm(std::shared_ptr<Dali::WebEngineCertificate> certificate)
+{
+ if(!mCertificateConfirmSignal.Empty())
+ {
+ Dali::Toolkit::WebView handle(GetOwner());
+ mCertificateConfirmSignal.Emit(handle, std::move(certificate));
+ }
+}
+
+void WebView::OnSslCertificateChanged(std::shared_ptr<Dali::WebEngineCertificate> certificate)
+{
+ if(!mSslCertificateChangedSignal.Empty())
+ {
+ Dali::Toolkit::WebView handle(GetOwner());
+ mSslCertificateChangedSignal.Emit(handle, std::move(certificate));
+ }
+}
+
+void WebView::OnHttpAuthenticationRequest(std::shared_ptr<Dali::WebEngineHttpAuthHandler> handler)
+{
+ if(!mHttpAuthHandlerSignal.Empty())
+ {
+ Dali::Toolkit::WebView handle(GetOwner());
+ mHttpAuthHandlerSignal.Emit(handle, std::move(handler));
+ }
+}
+
+void WebView::OnContextMenuShown(std::shared_ptr<Dali::WebEngineContextMenu> menu)
+{
+ if(!mContextMenuShownSignal.Empty())
+ {
+ Dali::Toolkit::WebView handle(GetOwner());
+ mContextMenuShownSignal.Emit(handle, std::move(menu));
+ }
+}
+
+void WebView::OnContextMenuHidden(std::shared_ptr<Dali::WebEngineContextMenu> menu)
+{
+ if(!mContextMenuHiddenSignal.Empty())
+ {
+ Dali::Toolkit::WebView handle(GetOwner());
+ mContextMenuHiddenSignal.Emit(handle, std::move(menu));
+ }
+}
+
+bool WebView::DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor)
+{
+ Dali::BaseHandle handle(object);
+
+ bool connected = false;
+ Toolkit::WebView webView = Toolkit::WebView::DownCast(handle);
+
+ if(0 == strcmp(signalName.c_str(), PAGE_LOAD_STARTED_SIGNAL))
+ {
+ webView.PageLoadStartedSignal().Connect(tracker, functor);
+ connected = true;
+ }
+ else if(0 == strcmp(signalName.c_str(), PAGE_LOAD_IN_PROGRESS_SIGNAL))
+ {
+ webView.PageLoadInProgressSignal().Connect(tracker, functor);
+ connected = true;
+ }
+ else if(0 == strcmp(signalName.c_str(), PAGE_LOAD_FINISHED_SIGNAL))
+ {
+ webView.PageLoadFinishedSignal().Connect(tracker, functor);
+ connected = true;
+ }
+ else if(0 == strcmp(signalName.c_str(), PAGE_LOAD_ERROR_SIGNAL))
+ {
+ webView.PageLoadErrorSignal().Connect(tracker, functor);
+ connected = true;
+ }
+ else if(0 == strcmp(signalName.c_str(), SCROLL_EDGE_REACHED_SIGNAL))
+ {
+ webView.ScrollEdgeReachedSignal().Connect(tracker, functor);
+ connected = true;
+ }
+ else if(0 == strcmp(signalName.c_str(), URL_CHANGED_SIGNAL))
+ {
+ webView.UrlChangedSignal().Connect(tracker, functor);
+ connected = true;
+ }
+ else if(0 == strcmp(signalName.c_str(), FORM_REPOST_DECISION_SIGNAL))
+ {
+ webView.FormRepostDecisionSignal().Connect(tracker, functor);
+ connected = true;
+ }
+ else if(0 == strcmp(signalName.c_str(), FRAME_RENDERED_SIGNAL))
+ {
+ webView.FrameRenderedSignal().Connect(tracker, functor);
+ connected = true;
+ }
+ else if(0 == strcmp(signalName.c_str(), REQUEST_INTERCEPTOR_SIGNAL))
+ {
+ webView.RequestInterceptorSignal().Connect(tracker, functor);