From a1fb6413b2d80293a53bce660539845086f3de6e Mon Sep 17 00:00:00 2001 From: wudi Date: Thu, 26 Jun 2025 08:56:30 +0800 Subject: [PATCH] Web accessibility return array. Signed-off-by: wudi --- .../components_ng/pattern/web/web_pattern.cpp | 35 +++++++++++-------- .../components_ng/pattern/web/web_pattern.h | 7 ++-- .../pattern/web/web_pattern_touch_test_ng.cpp | 2 ++ 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/frameworks/core/components_ng/pattern/web/web_pattern.cpp b/frameworks/core/components_ng/pattern/web/web_pattern.cpp index a3fc513616c..719cb6559ff 100644 --- a/frameworks/core/components_ng/pattern/web/web_pattern.cpp +++ b/frameworks/core/components_ng/pattern/web/web_pattern.cpp @@ -7294,7 +7294,7 @@ std::string WebPattern::VectorIntToString(std::vector&& vec) } void WebPattern::WebNodeInfoToJsonValue(std::shared_ptr& jsonNodeArray, - std::shared_ptr webNodeInfo, std::string& nodeTag) + std::shared_ptr webNodeInfo, std::string& nodeTag, bool isArray) { auto jsonNode = JsonUtil::Create(true); jsonNode->Put(WEB_NODE_URL, delegate_ ? delegate_->GetUrl().c_str() : ""); @@ -7343,18 +7343,18 @@ void WebPattern::WebNodeInfoToJsonValue(std::shared_ptr& j JsonNodePutDefaultValue(jsonNode, WebAccessibilityType::POPUP, webNodeInfo->GetIsPopupSupported()); JsonNodePutDefaultValue(jsonNode, WebAccessibilityType::DELETABLE, webNodeInfo->GetIsDeletable()); JsonNodePutDefaultValue(jsonNode, WebAccessibilityType::FOCUS, webNodeInfo->GetIsAccessibilityFocus()); - jsonNodeArray->PutRef(nodeTag.c_str(), std::move(jsonNode)); + JsonNodePutDefaultValue(jsonNode, WebAccessibilityType::NODE_TAG, nodeTag); + isArray ? jsonNodeArray->PutRef(std::move(jsonNode)) : jsonNodeArray->PutRef(nodeTag.c_str(), std::move(jsonNode)); } -void WebPattern::GetWebAllInfosImpl(WebNodeInfoCallback cb, int32_t webId) +void WebPattern::GetWebAllInfosImpl(WebNodeInfoCallback cb, int32_t webId, bool needFilter) { - std::shared_ptr rootWebNode; - if (delegate_) { - rootWebNode = delegate_->GetAccessibilityNodeInfoById(-1); - } + CHECK_NULL_VOID(delegate_); + std::shared_ptr rootWebNode = delegate_->GetAccessibilityNodeInfoById(-1); CHECK_NULL_VOID(rootWebNode); - auto jsonNodeArray = static_cast >(JsonUtil::Create(true)); + auto jsonNodeArray = + static_cast>(needFilter ? JsonUtil::Create(true) : JsonUtil::CreateArray(true)); std::queue que; for (auto id: rootWebNode->GetChildIds()) { que.push(id); @@ -7367,10 +7367,14 @@ void WebPattern::GetWebAllInfosImpl(WebNodeInfoCallback cb, int32_t webId) auto webNodeInfo = delegate_->GetAccessibilityNodeInfoById(tmp); CHECK_NULL_VOID(webNodeInfo); auto componentType = webNodeInfo->GetComponentType(); - if (componentType.compare(ACCESSIBILITY_GENERIC_CONTAINER) != 0 - && componentType.compare(ACCESSIBILITY_PARAGRAPH) != 0 - && componentType.compare(ACCESSIBILITY_IMAGE) != 0) { - WebNodeInfoToJsonValue(jsonNodeArray, webNodeInfo, componentType); + if (needFilter) { + if (componentType.compare(ACCESSIBILITY_GENERIC_CONTAINER) != 0 + && componentType.compare(ACCESSIBILITY_PARAGRAPH) != 0 + && componentType.compare(ACCESSIBILITY_IMAGE) != 0) { + WebNodeInfoToJsonValue(jsonNodeArray, webNodeInfo, componentType); + } + } else { + WebNodeInfoToJsonValue(jsonNodeArray, webNodeInfo, componentType, true); } for (auto id: webNodeInfo->GetChildIds()) { que.push(id); @@ -7383,7 +7387,7 @@ void WebPattern::GetWebAllInfosImpl(WebNodeInfoCallback cb, int32_t webId) SetAccessibilityState(false); } -void WebPattern::GetAllWebAccessibilityNodeInfos(WebNodeInfoCallback cb, int32_t webId) +void WebPattern::GetAllWebAccessibilityNodeInfos(WebNodeInfoCallback cb, int32_t webId, bool needFilter) { CHECK_NULL_VOID(cb); inspectorAccessibilityEnable_ = true; @@ -7393,10 +7397,11 @@ void WebPattern::GetAllWebAccessibilityNodeInfos(WebNodeInfoCallback cb, int32_t auto pipelineContext = host->GetContext(); CHECK_NULL_VOID(pipelineContext); auto taskExecutor = pipelineContext->GetTaskExecutor(); - taskExecutor->PostDelayedTask([weak = WeakClaim(this), cb, webId] () { + taskExecutor->PostDelayedTask([weak = WeakClaim(this), cb, webId, needFilter] () { auto pattern = weak.Upgrade(); + CHECK_NULL_VOID(pattern); auto startTime = std::chrono::high_resolution_clock::now(); - pattern->GetWebAllInfosImpl(cb, webId); + pattern->GetWebAllInfosImpl(cb, webId, needFilter); auto nowTime = std::chrono::high_resolution_clock::now(); std::chrono::duration diff = std::chrono::duration_cast(nowTime - startTime); diff --git a/frameworks/core/components_ng/pattern/web/web_pattern.h b/frameworks/core/components_ng/pattern/web/web_pattern.h index 8bd4e52e299..ff4cd18a4c9 100644 --- a/frameworks/core/components_ng/pattern/web/web_pattern.h +++ b/frameworks/core/components_ng/pattern/web/web_pattern.h @@ -193,6 +193,7 @@ public: POPUP, DELETABLE, FOCUS, + NODE_TAG, }; RefPtr CreateNodePaintMethod() override; @@ -723,7 +724,7 @@ public: } std::shared_ptr GetSurfaceRSNode() const; - void GetAllWebAccessibilityNodeInfos(WebNodeInfoCallback cb, int32_t webId); + void GetAllWebAccessibilityNodeInfos(WebNodeInfoCallback cb, int32_t webId, bool needFilter = true); void OnAccessibilityHoverEvent( const NG::PointF& point, SourceType source, NG::AccessibilityHoverEventType eventType, TimeStamp time); std::string GetSurfaceIdByHtmlElementId(const std::string& htmlElementId); @@ -1132,8 +1133,8 @@ private: WebAccessibilityType key, std::string value); void WebNodeInfoToJsonValue(std::shared_ptr& jsonNodeArray, std::shared_ptr webNodeInfo, - std::string& nodeTag); - void GetWebAllInfosImpl(WebNodeInfoCallback cb, int32_t webId); + std::string& nodeTag, bool isArray = false); + void GetWebAllInfosImpl(WebNodeInfoCallback cb, int32_t webId, bool needFilter = true); std::string EnumTypeToString(WebAccessibilityType type); std::string VectorIntToString(std::vector&& vec); void InitMagnifier(); diff --git a/test/unittest/core/pattern/web/web_pattern_touch_test_ng.cpp b/test/unittest/core/pattern/web/web_pattern_touch_test_ng.cpp index 9aaade9606b..3f26e67e4fd 100644 --- a/test/unittest/core/pattern/web/web_pattern_touch_test_ng.cpp +++ b/test/unittest/core/pattern/web/web_pattern_touch_test_ng.cpp @@ -1043,6 +1043,8 @@ HWTEST_F(WebPatternTouchTestNg, GetAllWebAccessibilityNodeInfos_001, TestSize.Le int32_t webId = 123; auto callback = [](std::shared_ptr& jsonNodeArray, int32_t receivedWebId) {}; webPattern->GetAllWebAccessibilityNodeInfos(callback, webId); + webPattern->GetAllWebAccessibilityNodeInfos(callback, webId, true); + ASSERT_NE(webPattern->delegate_, nullptr); #endif } -- Gitee