[AT-SPI] Add WebEnginePlugin::GetAccessibilityAddress() 11/263111/9
authorArtur Świgoń <a.swigon@samsung.com>
Thu, 17 Mar 2022 11:03:16 +0000 (12:03 +0100)
committerArtur Świgoń <a.swigon@samsung.com>
Mon, 28 Mar 2022 08:23:56 +0000 (10:23 +0200)
It is necessary to know the address of the root of the AT-SPI tree
created by Chromium in order to be able to embed it as a subtree in
a DALi application.

Change-Id: I0897304b2c0574a2c898e3f16b5cbcf453899ff7

dali-extension/web-engine-chromium/tizen-web-engine-chromium.cpp
dali-extension/web-engine-chromium/tizen-web-engine-chromium.h
dali-extension/web-engine-lwe/tizen-web-engine-lwe.cpp
dali-extension/web-engine-lwe/tizen-web-engine-lwe.h

index 21f0fc9..0540435 100755 (executable)
@@ -762,6 +762,29 @@ public:
     ewk_view_atk_deactivation_by_app(mWebView, !activated);
   }
 
+  Accessibility::Address GetAccessibilityAddress()
+  {
+    static const char plugIdKey[] = "__PlugID";
+    static const char rootPath[]  = "root";
+
+    std::string_view plugId;
+
+    if (auto* data = static_cast<const char*>(evas_object_data_get(mWebView, plugIdKey)))
+    {
+      plugId = {data};
+    }
+
+    // We expect plugId to be of the form ":1.23:/org/a11y/atspi/accessible/root"
+    auto pos = plugId.rfind(':');
+    if (pos == std::string_view::npos || pos == 0)
+    {
+      DALI_LOG_ERROR("Cannot parse PlugID set by Chromium: %s = \"%s\"", plugIdKey, plugId.data());
+      return {};
+    }
+
+    return {std::string{plugId.substr(0, pos)}, rootPath};
+  }
+
   bool SetVisibility(bool visible)
   {
     return ewk_view_visibility_set(mWebView, visible);
@@ -1732,6 +1755,15 @@ void TizenWebEngineChromium::ActivateAccessibility(bool activated)
   }
 }
 
+Accessibility::Address TizenWebEngineChromium::GetAccessibilityAddress()
+{
+  if (mWebViewContainer)
+  {
+    return mWebViewContainer->GetAccessibilityAddress();
+  }
+  return {};
+}
+
 bool TizenWebEngineChromium::SetVisibility(bool visible)
 {
   if (mWebViewContainer)
index 1fdfc40..3f4bd04 100755 (executable)
@@ -598,6 +598,11 @@ public:
   void ActivateAccessibility(bool activated) override;
 
   /**
+   * @copydoc Dali::WebEnginePlugin::GetAccessibilityAddress()
+   */
+  Accessibility::Address GetAccessibilityAddress() override;
+
+  /**
    * @copydoc Dali::WebEnginePlugin::SetVisibility()
    */
   bool SetVisibility(bool visible) override;
index 9ed2085..fd711db 100755 (executable)
@@ -1167,6 +1167,12 @@ void TizenWebEngineLWE::ActivateAccessibility(bool activated)
   // NOT IMPLEMENTED
 }
 
+Accessibility::Address TizenWebEngineLWE::GetAccessibilityAddress()
+{
+  // NOT IMPLEMENTED
+  return {};
+}
+
 bool TizenWebEngineLWE::SetVisibility(bool visible)
 {
   // NOT IMPLEMENTED
index 8a6fcd2..c66057c 100755 (executable)
@@ -411,6 +411,11 @@ public:
   void ActivateAccessibility(bool activated) override;
 
   /**
+   * @copydoc Dali::WebEnginePlugin::GetAccessibilityAddress()
+   */
+  Accessibility::Address GetAccessibilityAddress() override;
+
+  /**
    * @copydoc Dali::WebEnginePlugin::SetVisibility()
    */
   bool SetVisibility(bool visible) override;