From 650d1787907901a6b483da7a0c91b26dfa427d5d Mon Sep 17 00:00:00 2001 From: Youngsun Suh Date: Tue, 21 Jan 2025 10:39:01 +0900 Subject: [PATCH] Add dumpTree api to AccessibleNode Change-Id: Ibca686636e01156240614728a0796e2ce2566079 --- libaurum/inc/Accessibility/AccessibleNode.h | 7 +++++++ .../inc/Impl/Accessibility/AtspiAccessibleNode.h | 5 +++++ libaurum/inc/Impl/Accessibility/AtspiWrapper.h | 1 + .../inc/Impl/Accessibility/MockAccessibleNode.h | 5 +++++ .../Impl/Accessibility/AtspiAccessibleNode.cc | 16 ++++++++++++++++ libaurum/src/Impl/Accessibility/AtspiWrapper.cc | 6 ++++++ .../src/Impl/Accessibility/MockAccessibleNode.cc | 4 ++++ libaurum/src/c_bindings/AurumCBindings.cc | 5 ++--- 8 files changed, 46 insertions(+), 3 deletions(-) diff --git a/libaurum/inc/Accessibility/AccessibleNode.h b/libaurum/inc/Accessibility/AccessibleNode.h index 6874b09..87e30df 100644 --- a/libaurum/inc/Accessibility/AccessibleNode.h +++ b/libaurum/inc/Accessibility/AccessibleNode.h @@ -141,6 +141,13 @@ public: */ virtual std::vector> getMatchesInMatches(const std::shared_ptr firstSelector, const std::shared_ptr secondSelector, const bool ealryReturn) const = 0; + /** + * @brief dump current tree in json string + * + * @return string + */ + virtual std::string dumpTree() const = 0; + /** * @copydoc UiObject::next() */ diff --git a/libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h b/libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h index 0834e2e..790d543 100644 --- a/libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h +++ b/libaurum/inc/Impl/Accessibility/AtspiAccessibleNode.h @@ -80,6 +80,11 @@ public: */ std::vector> getMatchesInMatches(const std::shared_ptr firstSelector, const std::shared_ptr secondSelector, const bool ealryReturn) const override; + /** + * @copydoc AccessibleNode::dumpTree() + */ + std::string dumpTree() const override; + /** * @copydoc UiObject::next() */ diff --git a/libaurum/inc/Impl/Accessibility/AtspiWrapper.h b/libaurum/inc/Impl/Accessibility/AtspiWrapper.h index 8a54e26..eb2a23d 100644 --- a/libaurum/inc/Impl/Accessibility/AtspiWrapper.h +++ b/libaurum/inc/Impl/Accessibility/AtspiWrapper.h @@ -81,6 +81,7 @@ public: static AtspiAccessible *Atspi_accessible_get_neighbor(AtspiAccessible *root, AtspiAccessible *start, AtspiNeighborSearchDirection direction, GError **error); static void Atspi_accessible_set_include_hidden(AtspiAccessible *obj, gboolean enabled, GError **error); static gboolean Atspi_accessible_get_include_hidden(AtspiAccessible *obj, GError **error); + static gchar *Atspi_accessible_dump_tree(AtspiAccessible *obj, AtspiDumpDetailLevelType detail_level, GError **error); private: static std::recursive_mutex mMutex; diff --git a/libaurum/inc/Impl/Accessibility/MockAccessibleNode.h b/libaurum/inc/Impl/Accessibility/MockAccessibleNode.h index bd73f29..aaba614 100644 --- a/libaurum/inc/Impl/Accessibility/MockAccessibleNode.h +++ b/libaurum/inc/Impl/Accessibility/MockAccessibleNode.h @@ -79,6 +79,11 @@ public: */ std::vector> getMatchesInMatches(const std::shared_ptr firstSelector, const std::shared_ptr secondSelector, const bool ealryReturn) const override; + /** + * @copydoc AccessibleNode::dumpTree() + */ + std::string dumpTree() const override; + /** * @copydoc UiObject::next() */ diff --git a/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc b/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc index ceea20c..ed571b3 100644 --- a/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc +++ b/libaurum/src/Impl/Accessibility/AtspiAccessibleNode.cc @@ -692,6 +692,22 @@ std::vector> AtspiAccessibleNode::getMatchesInMa return ret; } +std::string AtspiAccessibleNode::dumpTree() const +{ + if (!isValid()) { + return {}; + } + + gchar *c_result = AtspiWrapper::Atspi_accessible_dump_tree(mNode, ATSPI_DUMP_FULL_SHOWING_ONLY, NULL); + if (c_result) { + std::string result{c_result}; + g_free(c_result); + return result; + } + + return {}; +} + std::shared_ptr AtspiAccessibleNode::next() const { if (!isValid()) { diff --git a/libaurum/src/Impl/Accessibility/AtspiWrapper.cc b/libaurum/src/Impl/Accessibility/AtspiWrapper.cc index 4b3955b..4752565 100644 --- a/libaurum/src/Impl/Accessibility/AtspiWrapper.cc +++ b/libaurum/src/Impl/Accessibility/AtspiWrapper.cc @@ -296,3 +296,9 @@ gboolean AtspiWrapper::Atspi_accessible_get_include_hidden(AtspiAccessible *obj, std::unique_lock lock(mMutex); return atspi_accessible_get_include_hidden(obj, error); } + +gchar *AtspiWrapper::Atspi_accessible_dump_tree(AtspiAccessible *obj, AtspiDumpDetailLevelType detail_level, GError **error) +{ + std::unique_lock lock(mMutex); + return atspi_accessible_dump_tree(obj, detail_level, error); +} diff --git a/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc b/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc index 4cc25b4..448c2e8 100644 --- a/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc +++ b/libaurum/src/Impl/Accessibility/MockAccessibleNode.cc @@ -125,6 +125,10 @@ std::vector> MockAccessibleNode::getMatchesInMat return ret; } +std::string MockAccessibleNode::dumpTree() const +{ + return {"{}"}; +} void* MockAccessibleNode::getRawHandler(void) const { diff --git a/libaurum/src/c_bindings/AurumCBindings.cc b/libaurum/src/c_bindings/AurumCBindings.cc index 9aa581f..1a7e2d2 100644 --- a/libaurum/src/c_bindings/AurumCBindings.cc +++ b/libaurum/src/c_bindings/AurumCBindings.cc @@ -41,9 +41,8 @@ const char* dump_screen() dumpResult += " : ["; for (const auto& root: windowRoots) { - // TODO: implement dump logic - // root->dump(); - dumpResult += "{},"; + dumpResult += root->dumpTree(); + dumpResult += ","; } // remove last comma if exists. -- 2.34.1