+WebView::WebViewAccessible::WebViewAccessible(Dali::Actor self, Dali::WebEngine& webEngine)
+: ControlAccessible(self),
+ mRemoteChild{},
+ mWebEngine{webEngine}
+{
+ mRemoteChild.SetParent(this);
+
+ Dali::Accessibility::Bridge::EnabledSignal().Connect(this, &WebViewAccessible::OnAccessibilityEnabled);
+ Dali::Accessibility::Bridge::DisabledSignal().Connect(this, &WebViewAccessible::OnAccessibilityDisabled);
+
+ if(Dali::Accessibility::IsUp())
+ {
+ OnAccessibilityEnabled();
+ }
+ else
+ {
+ OnAccessibilityDisabled();
+ }
+}
+
+Dali::Accessibility::Attributes WebView::WebViewAccessible::GetAttributes() const
+{
+ auto attributes = DevelControl::ControlAccessible::GetAttributes();
+
+ if(mRemoteChild.GetAddress())
+ {
+ attributes.insert_or_assign("child_bus", mRemoteChild.GetAddress().GetBus());
+ }
+
+ return attributes;
+}
+
+void WebView::WebViewAccessible::DoGetChildren(std::vector<Dali::Accessibility::Accessible*>& children)
+{
+ if(Dali::Accessibility::IsUp() && !mRemoteChild.GetAddress())
+ {
+ DALI_LOG_DEBUG_INFO("Try setting address as it has not not been set on initialize.\n");
+ SetRemoteChildAddress(mWebEngine.GetAccessibilityAddress());
+ }
+
+ if(mRemoteChild.GetAddress())
+ {
+ // DoGetChildren is called at most once per every OnChildrenChanged.
+ // We have only one OnChildrenChanged in this case, so EmbedSocket will be called only once.
+ Accessibility::Bridge::GetCurrentBridge()->EmbedSocket(GetAddress(), mRemoteChild.GetAddress());
+ children.push_back(&mRemoteChild);
+ }
+}
+
+void WebView::WebViewAccessible::OnAccessibilityEnabled()
+{
+ if(!mWebEngine)
+ {
+ return;
+ }
+
+ mWebEngine.ActivateAccessibility(true);
+ SetRemoteChildAddress(mWebEngine.GetAccessibilityAddress());
+}
+
+void WebView::WebViewAccessible::OnAccessibilityDisabled()
+{
+ if(!mWebEngine)
+ {
+ return;
+ }
+
+ SetRemoteChildAddress({});
+ mWebEngine.ActivateAccessibility(false);
+}
+
+void WebView::WebViewAccessible::SetRemoteChildAddress(Dali::Accessibility::Address address)
+{
+ mRemoteChild.SetAddress(address);
+ OnChildrenChanged();
+}