• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_JS_ACCESSIBILITY_MANAGER_H
17 #define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_JS_ACCESSIBILITY_MANAGER_H
18 
19 #include <unordered_map>
20 #include <unordered_set>
21 #include <vector>
22 
23 #include "accessibility_config.h"
24 #include "accessibility_element_operator.h"
25 #include "accessibility_event_info.h"
26 #include "accessibility_state_event.h"
27 
28 #include "core/accessibility/accessibility_manager.h"
29 #include "core/accessibility/accessibility_utils.h"
30 #include "core/accessibility/hidumper/accessibility_hidumper.h"
31 #include "core/accessibility/utils/accessibility_manager_utils.h"
32 #include "frameworks/bridge/common/accessibility/accessibility_node_manager.h"
33 
34 #include "js_third_accessibility_hover_ng.h"
35 
36 namespace OHOS::NWeb {
37 class NWebAccessibilityNodeInfo;
38 } // namespace OHOS::NWeb::NWebAccessibilityNodeInfo
39 
40 namespace OHOS::Ace::NG {
41     class TransitionalNodeInfo;
42 }
43 
44 namespace OHOS::Accessibility {
45     class AccessibilitySystemAbilityClient;
46 }
47 
48 namespace OHOS::Ace::Framework {
49 
50 struct SearchParameter {
51     int64_t nodeId;
52     std::string text;
53     int32_t mode;
54     int64_t uiExtensionOffset;
55 };
56 
57 using CheckAndGetEmbedFunc = std::function<int64_t(const RefPtr<NG::FrameNode>& node)>;
58 struct CommonProperty {
59     int32_t innerWindowId = -1;
60     int32_t windowId = 0;
61     int32_t windowLeft = 0;
62     int32_t windowTop = 0;
63     std::vector<std::string> pagePaths;
64     std::vector<RefPtr<NG::FrameNode>> pageNodes;
65     bool isReduceMode = false;
66     bool checkEmbedNode = true;
67     CheckAndGetEmbedFunc checkGetFunc = nullptr;
68     RotateTransform rotateTransform;
69     float_t scaleX = 1.0f;
70     float_t scaleY = 1.0f;
71 };
72 
73 struct FillEventInfoParam {
74     int64_t elementId = 0;
75     int64_t stackNodeId = 0;
76     uint32_t windowId = 0;
77 };
78 
79 struct AccessibilityActionParam {
80     RefPtr<NG::AccessibilityProperty> accessibilityProperty;
81     std::string setTextArgument = "";
82     int32_t setSelectionStart = -1;
83     int32_t setSelectionEnd = -1;
84     bool setSelectionDir = false;
85     int32_t setCursorIndex = -1;
86     TextMoveUnit moveUnit = TextMoveUnit::STEP_CHARACTER;
87     AccessibilityScrollType scrollType = AccessibilityScrollType::SCROLL_DEFAULT;
88     int32_t spanId = -1;
89 };
90 
91 struct ActionParam {
92     Accessibility::ActionType action;
93     std::map<std::string, std::string> actionArguments;
94 };
95 
96 struct AccessibilityFocusInfo {
97     int64_t currentFocusNodeId;
98     int64_t currentFocusVirtualNodeParentId;
99 
100     explicit AccessibilityFocusInfo(int64_t nodeId = -1, int64_t parentId = -1)
currentFocusNodeIdAccessibilityFocusInfo101         : currentFocusNodeId(nodeId), currentFocusVirtualNodeParentId(parentId) {}
102 };
103 
104 struct GetInfoByNodeId {
105     std::string componentType;
106     int32_t pageId = -1;
107     int32_t nodeInstanceId = -1;
108 };
109 
110 enum class SearchSurfaceIdRet : int32_t {
111     SEARCH_SUCCESS = 0,
112     NO_MATCH_NODE,
113     TIMEOUT,
114 };
115 
116 enum class SearchSurfaceIdType : int32_t {
117     SEARCH_ALL = 0,
118     SEARCH_HEAD,
119     SEARCH_TAIL,
120 };
121 
122 class JsAccessibilityManager : public AccessibilityNodeManager,
123     public AccessibilityHoverManagerForThirdNG {
124     DECLARE_ACE_TYPE(JsAccessibilityManager, AccessibilityNodeManager);
125 
126 public:
127     JsAccessibilityManager() = default;
128     ~JsAccessibilityManager() override;
129 
130     // JsAccessibilityManager overrides functions.
131     void InitializeCallback() override;
132     void SendAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent) override;
133     void UpdateVirtualNodeFocus() override;
134     void SetCardViewParams(const std::string& key, bool focus) override;
135     void HandleComponentPostBinding() override;
136     void RegisterSubWindowInteractionOperation(int windowId) override;
137     void SetPipelineContext(const RefPtr<PipelineBase>& context) override;
138     void UpdateElementInfosTreeId(std::list<Accessibility::AccessibilityElementInfo>& infos, bool checkEmbed = false);
139     void UpdateElementInfoTreeId(Accessibility::AccessibilityElementInfo& info);
140     static bool IsTagInEmbedComponent(const std::string& tag);
141 
142     void UpdateViewScale();
143 
GetScaleX()144     float GetScaleX() const
145     {
146         return scaleX_;
147     }
148 
GetScaleY()149     float GetScaleY() const
150     {
151         return scaleY_;
152     }
153 
GetWindowId()154     uint32_t GetWindowId() const
155     {
156         return windowId_;
157     }
158 
SetWindowId(uint32_t windowId)159     void SetWindowId(uint32_t windowId)
160     {
161         windowId_ = windowId;
162     }
163 
SaveLast(const int64_t elementId,const RefPtr<NG::FrameNode> & node)164     void SaveLast(const int64_t elementId, const RefPtr<NG::FrameNode>& node)
165     {
166         lastElementId_ = elementId;
167         lastFrameNode_ = node;
168     }
169 
SetReentrantLimit(const bool reentrantLimit)170     void SetReentrantLimit(const bool reentrantLimit)
171     {
172         reentrantLimit_ = reentrantLimit;
173     }
174 
IsReentrantLimit()175     bool IsReentrantLimit() const
176     {
177         return reentrantLimit_;
178     }
179 
SaveCurrentFocusNodeSize(const RefPtr<NG::FrameNode> & currentFocusNode)180     void SaveCurrentFocusNodeSize(const RefPtr<NG::FrameNode>& currentFocusNode)
181     {
182         if (currentFocusNode->IsAccessibilityVirtualNode()) {
183             auto oldGeometryNode = currentFocusNode->GetGeometryNode();
184             CHECK_NULL_VOID(oldGeometryNode);
185             oldGeometrySize_ = oldGeometryNode->GetFrameSize();
186         }
187     }
188 
189     bool SubscribeToastObserver();
190     bool UnsubscribeToastObserver();
191     bool SubscribeStateObserver(uint32_t eventType);
192     bool UnsubscribeStateObserver(uint32_t eventType);
193     int RegisterInteractionOperation(int windowId);
194     void DeregisterInteractionOperation();
195 
196     bool IsSendAccessibilityEvent(const AccessibilityEvent& accessibilityEvent);
197     bool IsSendAccessibilityEventForUEA(
198         const AccessibilityEvent& accessibilityEvent, const std::string& componentType, const int32_t pageId);
199     bool IsSendAccessibilityEventForHost(
200         const AccessibilityEvent& accessibilityEvent, const std::string& componentType, const int32_t pageId);
201     void GetComponentTypeAndPageIdByNodeId(
202         const int64_t nodeId,
203         const RefPtr<PipelineBase>& context,
204         GetInfoByNodeId& infoOfNode);
205     bool CachePageEventByController(
206         const AccessibilityEvent& accessibilityEvent,
207         const std::string& componentType,
208         int32_t pageId,
209         int32_t containerId);
210 
211     void SendCacheAccessibilityEvent(int32_t instanceId);
212     void SendCacheAccessibilityEventForHost(const int32_t pageId);
213 
214     void AddFrameNodeToUecStatusVec(const RefPtr<NG::FrameNode>& node) override;
215     void AddFrameNodeToDefaultFocusList(const RefPtr<NG::FrameNode>& node, bool isFocus) override;
216     void AddDefaultFocusNode(const RefPtr<NG::FrameNode>& defaultFocusNode);
217     void EraseDefaultFocusNode(const RefPtr<NG::FrameNode>& defaultFocusNode);
218 
GetDefaultFocusList()219     std::list<WeakPtr<NG::FrameNode>>& GetDefaultFocusList()
220     {
221         return defaultFocusList_;
222     }
223 
224     void RegisterUIExtGetPageModeCallback(RefPtr<NG::UIExtensionManager>& uiExtManager) override;
225     void UpdateFrameNodeState(int32_t nodeId) override;
226 
227     void ReleaseCacheEvent();
UpdatePageMode(const std::string & pageMode)228     void UpdatePageMode(const std::string& pageMode) override
229     {
230         pageMode_ = std::make_optional(pageMode);
231     }
232 
233     bool SendAccessibilitySyncEvent(
234         const AccessibilityEvent& accessibilityEvent, Accessibility::AccessibilityEventInfo eventInfo);
235     bool TransferAccessibilityAsyncEvent(
236         const Accessibility::AccessibilityEventInfo& eventInfo,
237         int64_t uiExtensionOffset) override;
238     void SendExtensionAccessibilityEvent(
239         const Accessibility::AccessibilityEventInfo& eventInfo,
240         int64_t uiExtensionOffset) override;
241     void SearchElementInfoByAccessibilityId(const int64_t elementId, const int32_t requestId,
242         Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode, const int32_t windowId);
243     void SearchElementInfoBySpecificProperty(const int64_t elementId, const SpecificPropertyParam &param,
244         const int32_t requestId, AccessibilityElementOperatorCallback &callback, const int32_t windowId);
245     void SearchElementInfosByText(const int64_t elementId, const std::string& text, const int32_t requestId,
246         Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId);
247     void SearchDefaultFocusByWindowId(const int32_t windowId, int32_t pageId, const int32_t requestId,
248         Accessibility::AccessibilityElementOperatorCallback& callback);
249     void FindFocusedElementInfo(const int64_t elementId, const int32_t focusType, const int32_t requestId,
250         Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId);
251     bool ShouldSkipAccessibilityStateChange(const RefPtr<PipelineBase>& pipelineRef);
252     void FocusMoveSearch(const int64_t elementId, const int32_t direction, const int32_t requestId,
253         Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId);
254     bool IsUpdateWindowSceneInfo(const RefPtr<NG::FrameNode>& node, NG::WindowSceneInfo& windowSceneInfo);
255     void UpdateElementInfoInnerWindowId(Accessibility::AccessibilityElementInfo& info, const int64_t& elementId);
256     void ExecuteAction(const int64_t accessibilityId, const ActionParam& param, const int32_t requestId,
257         Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId);
258     bool ClearCurrentFocus();
259     void UpdateNodeChildIds(const RefPtr<AccessibilityNode>& node);
260     void SendActionEvent(const Accessibility::ActionType& action, int64_t nodeId);
261     void SearchElementInfoByAccessibilityIdNG(int64_t elementId, int32_t mode,
262         std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context,
263         const int64_t uiExtensionOffset = 0) override;
264     bool FindUIExtensionAccessibilityElement(const RefPtr<NG::FrameNode>& checkNode, const std::string &customId,
265         const CommonProperty& commonProperty, std::list<AccessibilityElementInfo> &infos,
266         const RefPtr<PipelineBase>& context);
267     bool SetAccessibilityCustomId(RefPtr<NG::FrameNode> checkNode, const std::string &customId,
268         CommonProperty &commonProperty, std::list<AccessibilityElementInfo> &infos,
269         const RefPtr<PipelineBase>& context);
270     void SearchElementInfoByCustomIdNG(const int64_t elementId, const std::string &customId,
271         std::list<AccessibilityElementInfo> &infos, std::list<AccessibilityElementInfo> &treeInfos,
272         const RefPtr<PipelineBase>& context);
273     void SearchDefaultFocusByWindowIdNG(const int32_t pageId,
274         std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context);
275     void SearchElementInfosByTextNG(int64_t elementId, const std::string& text,
276         std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context,
277         const int64_t uiExtensionOffset = 0) override;
278     void FindFocusedElementInfoNG(int64_t elementId, int32_t focusType, Accessibility::AccessibilityElementInfo& info,
279         const RefPtr<PipelineBase>& context, const int64_t uiExtensionOffset = 0) override;
280     void FocusMoveSearchNG(int64_t elementId, int32_t direction, Accessibility::AccessibilityElementInfo& info,
281         const RefPtr<PipelineBase>& context, const int64_t uiExtensionOffset = 0) override;
282     bool ExecuteExtensionActionNG(int64_t elementId, const std::map<std::string, std::string>& actionArguments,
283         int32_t action, const RefPtr<PipelineBase>& context, int64_t uiExtensionOffset) override;
284     int32_t GetTransformDegreeRelativeToWindow(const RefPtr<NG::FrameNode>& node, bool excludeSelf = false) override;
285     AccessibilityParentRectInfo GetTransformRectInfoRelativeToWindow(
286         const RefPtr<NG::FrameNode>& node, const RefPtr<PipelineBase>& context) override;
287 #ifdef WEB_SUPPORTED
288     void SendWebAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent,
289         const RefPtr<NG::WebPattern>& webPattern) override;
290     void SearchWebElementInfoByAccessibilityId(const int64_t elementId, const int32_t requestId,
291         Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode, const int32_t windowId,
292         const RefPtr<NG::WebPattern>& webPattern);
293     void SearchWebElementInfoByAccessibilityIdNG(int64_t elementId, int32_t mode,
294         std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context,
295         const RefPtr<NG::WebPattern>& webPattern);
296     void FindWebFocusedElementInfo(const int64_t elementId, const int32_t focusType,
297         const int32_t requestId, Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId,
298         const RefPtr<NG::WebPattern>& webPattern);
299     void FindWebFocusedElementInfoNG(int64_t elementId, int32_t focusType,
300         Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context,
301         const RefPtr<NG::WebPattern>& webPattern);
302     void WebFocusMoveSearch(const int64_t elementId, const int32_t direction, const int32_t requestId,
303         Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId,
304         const RefPtr<NG::WebPattern>& webPattern);
305     void WebFocusMoveSearchByComponent(AccessibilityElementInfo& nodeInfo, const RefPtr<NG::WebPattern>& webPattern,
306         const int32_t direction, RefPtr<PipelineBase> context);
307     void WebFocusMoveSearchNG(int64_t elementId, int32_t direction,
308         Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context,
309         const RefPtr<NG::WebPattern>& webPattern);
310     void ExecuteWebAction(const int64_t elementId, const ActionParam& param, const int32_t requestId,
311         Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t windowId,
312         const RefPtr<NG::WebPattern>& webPattern);
313     bool ExecuteWebActionNG(int64_t elementId, Accessibility::ActionType action,
314         const std::map<std::string, std::string>& actionArguments, const RefPtr<NG::WebPattern>& webPattern);
315 
316     bool DeregisterWebInteractionOperationAsChildTree(int32_t treeID,
317         const WeakPtr<NG::WebPattern>& webPattern) override;
318     bool RegisterWebInteractionOperationAsChildTree(int64_t accessibilityId,
319         const WeakPtr<NG::WebPattern>& webPattern) override;
320     void GetWebCursorPosition(const int64_t elementId, const int32_t requestId,
321         AccessibilityElementOperatorCallback& callback, const RefPtr<NG::WebPattern>& webPattern);
322 #endif //WEB_SUPPORTED
323     void GetResultOfFocusMoveSearchNG(
324         int64_t elementId, int32_t direction, Accessibility::AccessibilityElementInfo& info);
325 
326     std::string GetPagePath();
327 
328     void RegisterAccessibilityChildTreeCallback(
329         int64_t elementId, const std::shared_ptr<AccessibilityChildTreeCallback> &callback) override;
330 
331     void DeregisterAccessibilityChildTreeCallback(int64_t elementId) override;
332 
333     void RegisterAccessibilitySAObserverCallback(
334         int64_t elementId, const std::shared_ptr<AccessibilitySAObserverCallback> &callback) override;
335 
336     void DeregisterAccessibilitySAObserverCallback(int64_t elementId) override;
337 
338     void RegisterInteractionOperationAsChildTree(uint32_t parentWindowId, int32_t parentTreeId,
339         int64_t parentElementId) override;
340     void SetAccessibilityGetParentRectHandler(std::function<void(int32_t &, int32_t &)> &&callback) override;
341     void SetAccessibilityGetParentRectHandler(
342         std::function<void(AccessibilityParentRectInfo &)> &&callback) override;
343     void DeregisterInteractionOperationAsChildTree() override;
344     void SendEventToAccessibilityWithNode(const AccessibilityEvent& accessibilityEvent,
345         const RefPtr<AceType>& node, const RefPtr<PipelineBase>& context) override;
346 
347     bool RegisterInteractionOperationAsChildTree(const Registration& registration) override;
348     bool DeregisterInteractionOperationAsChildTree(uint32_t windowId, int32_t treeId) override;
349 
350     void TransferThirdProviderHoverEvent(
351         const WeakPtr<NG::FrameNode>& hostNode, const NG::PointF& point, SourceType source,
352         NG::AccessibilityHoverEventType eventType, TimeStamp time) override;
353 
354     void DumpAccessibilityPropertyNG(const AccessibilityElementInfo& nodeInfo);
355     void DumpCommonPropertyNG(const AccessibilityElementInfo& nodeInfo, int32_t treeId);
356     bool OnDumpChildInfoForThird(
357         int64_t hostElementId,
358         const std::vector<std::string>& params,
359         std::vector<std::string>& info) override;
360     void ProcessParameters(
361         ActionType op, const std::vector<std::string>& params, std::map<std::string, std::string>& paramsMap);
362     bool CheckDumpHandleEventParams(const std::vector<std::string> &params);
363     bool CheckGetActionIdAndOp(
364         const std::vector<std::string>& params,
365         int64_t& actionAccessibilityId,
366         ActionType& actionOp);
367     bool DumpProcessEventParameters(
368         AccessibilityEvent& event, const std::vector<std::string>& params);
369     bool GetDumpInfoArgument(const std::vector<std::string>& params, DumpInfoArgument& argument);
370     bool DumpInfoParams(const std::vector<std::string>& params, DumpInfoArgument& argument);
371     bool HandleNodeModeParam(const std::string& param, DumpInfoArgument& argument);
372     void FireAccessibilityEventCallback(uint32_t eventId, int64_t parameter) override;
373     AccessibilityWindowInfo GenerateWindowInfo(const RefPtr<NG::FrameNode>& node,
374         const RefPtr<PipelineBase>& context) override;
375     void UpdateWindowInfo(AccessibilityWindowInfo& window, const RefPtr<PipelineBase>& context) override;
376 
377     AccessibilityWorkMode GenerateAccessibilityWorkMode() override;
378     void UpdateAccessibilityNextFocusIdMap(int32_t containerId,
379                                            const std::string& nextFocusInspectorKey,
380                                            int64_t preAccessibilityId) override;
381 
382     AccessibilityParentRectInfo GetUECAccessibilityParentRectInfo() const;
383     void UpdateUECAccessibilityParentRectInfo(const AccessibilityParentRectInfo& info);
384     void RegisterUIExtBusinessConsumeCallback();
385     void RegisterGetParentRectHandler();
386 
387     bool IsScreenReaderEnabled() override;
388     WeakPtr<NG::WebPattern> GetWebPatternBySurfaceId(const std::string& surfaceId) override;
389     void SetWebPatternBySurfaceId(const std::string& surfaceId, WeakPtr<NG::WebPattern> pattern) override;
390     void RemoveWebPatternBySurfaceId(const std::string& surfaceId) override;
391     void SearchAccessibilityNodeBySpecificProperty(const int64_t elementId,
392         const SpecificPropertyParam &param, const int32_t requestId,
393         AccessibilityElementOperatorCallback &callback, const int32_t windowId);
394     void UpdateAccessibilityNodeRect(const RefPtr<NG::FrameNode>& frameNode) override;
395     void OnAccessbibilityDetachFromMainTree(const RefPtr<NG::FrameNode>& frameNode) override;
396 
397     void SetFocusMoveResultWithNode(
398         const WeakPtr<NG::FrameNode>& hostNode,
399         AccessibilityElementOperatorCallback& callback,
400         const int32_t requestId);
401 
402     void ReleasePageEvent(
403         const RefPtr<NG::FrameNode>& node,
404         bool deleteController = true,
405         bool releaseAll = false) override;
406 
407     void AddToPageEventController(const RefPtr<NG::FrameNode>& node) override;
408     bool DeleteFromPageEventController(const RefPtr<NG::FrameNode>& node) override;
409     bool CheckPageEventCached(const RefPtr<NG::FrameNode>& node, bool onlyCurrentPage) override;
410 
411     bool CheckAccessibilityVisible(const RefPtr<NG::FrameNode>& node) override;
412 
413     void AddHoverTransparentCallback(const RefPtr<NG::FrameNode>& node) override;
414     bool CheckHoverTransparentCallbackListEmpty(int32_t containerId) override;
415 
416     int64_t CheckAndGetEmbedFrameNode(const RefPtr<NG::FrameNode>& node);
417     void ChooseDumpEvent(const std::vector<std::string>& params,
418         DumpInfoArgument& argument, uint32_t windowId, bool hasJson);
SetIsIgnoreAllAction(bool isIgnoreAllAction)419     void SetIsIgnoreAllAction(bool isIgnoreAllAction)
420     {
421         isIgnoreAllAction_ = isIgnoreAllAction;
422     }
423 
GetIsIgnoreAllAction()424     bool GetIsIgnoreAllAction() const
425     {
426         return isIgnoreAllAction_;
427     }
428 protected:
429     void OnDumpInfoNG(const std::vector<std::string>& params, uint32_t windowId, bool hasJson = false) override;
430     void DumpHandleEvent(const std::vector<std::string>& params) override;
431     void DumpProperty(const std::vector<std::string>& params) override;
432     void DumpTree(int32_t depth, int64_t nodeID, bool isDumpSimplify = false) override;
433 private:
434     static constexpr int32_t INVALID_PARENT_ID = -2100000;
435     mutable std::mutex webPatternMapMutex_;
436     std::unordered_map<std::string, WeakPtr<NG::WebPattern>> webPatternMap_;
437 
438     class JsInteractionOperation : public Accessibility::AccessibilityElementOperator {
439     public:
JsInteractionOperation(int32_t windowId)440         explicit JsInteractionOperation(int32_t windowId) : windowId_(windowId) {}
441         virtual ~JsInteractionOperation() = default;
442         // Accessibility override.
443         RetError SearchElementInfoByAccessibilityId(const int64_t elementId, const int32_t requestId,
444             Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode) override;
445         void HandleSearchElementInfoCallback(AccessibilityElementOperatorCallback& callback, int32_t requestId);
446         void SearchElementInfoBySpecificProperty(const int64_t elementId, const SpecificPropertyParam &param,
447             const int32_t requestId, AccessibilityElementOperatorCallback &callback) override;
448         void SearchElementInfosByText(const int64_t elementId, const std::string& text, const int32_t requestId,
449             Accessibility::AccessibilityElementOperatorCallback& callback) override;
450         void SearchDefaultFocusByWindowId(const int32_t windowId, const int32_t requestId,
451             Accessibility::AccessibilityElementOperatorCallback &callback, const int32_t pageId) override;
452         void FindFocusedElementInfo(const int64_t elementId, const int32_t focusType, const int32_t requestId,
453             Accessibility::AccessibilityElementOperatorCallback& callback) override;
454         void FocusMoveSearch(const int64_t elementId, const int32_t direction, const int32_t requestId,
455             Accessibility::AccessibilityElementOperatorCallback& callback) override;
456         void ExecuteAction(const int64_t elementId, const int32_t action,
457             const std::map<std::string, std::string>& actionArguments, const int32_t requestId,
458             Accessibility::AccessibilityElementOperatorCallback& callback) override;
459         void ClearFocus() override;
460         void OutsideTouch() override;
461         void GetCursorPosition(const int64_t elementId, const int32_t requestId,
462             Accessibility::AccessibilityElementOperatorCallback &callback) override;
463         void SetChildTreeIdAndWinId(const int64_t nodeId, const int32_t treeId, const int32_t childWindowId) override;
464         void SetBelongTreeId(const int32_t treeId) override;
465 
SetHandler(const WeakPtr<JsAccessibilityManager> & js)466         void SetHandler(const WeakPtr<JsAccessibilityManager>& js)
467         {
468             js_ = js;
469         }
470 
GetHandler()471         const WeakPtr<JsAccessibilityManager>& GetHandler() const
472         {
473             return js_;
474         }
475 
476     private:
477         WeakPtr<JsAccessibilityManager> js_;
478         uint32_t windowId_ = 0;
479     };
480 #ifdef WEB_SUPPORTED
481 
482     class WebInteractionOperation : public Accessibility::AccessibilityElementOperator {
483     public:
WebInteractionOperation(int32_t windowId)484         explicit WebInteractionOperation(int32_t windowId) : windowId_(windowId) {}
485         virtual ~WebInteractionOperation() = default;
486         // Accessibility override.
487         RetError SearchElementInfoByAccessibilityId(const int64_t elementId, const int32_t requestId,
488             Accessibility::AccessibilityElementOperatorCallback& callback, const int32_t mode) override;
489         void SearchElementInfoBySpecificProperty(const int64_t elementId, const SpecificPropertyParam &param,
490             const int32_t requestId, AccessibilityElementOperatorCallback &callback) override;
491         void SearchElementInfosByText(const int64_t elementId, const std::string& text, const int32_t requestId,
492             Accessibility::AccessibilityElementOperatorCallback& callback) override;
493         void SearchDefaultFocusByWindowId(const int32_t windowId, const int32_t requestId,
494             Accessibility::AccessibilityElementOperatorCallback &callback, const int32_t pageId) override;
495         void FindFocusedElementInfo(const int64_t elementId, const int32_t focusType, const int32_t requestId,
496             Accessibility::AccessibilityElementOperatorCallback& callback) override;
497         void FocusMoveSearch(const int64_t elementId, const int32_t direction, const int32_t requestId,
498             Accessibility::AccessibilityElementOperatorCallback& callback) override;
499         void ExecuteAction(const int64_t elementId, const int32_t action,
500             const std::map<std::string, std::string>& actionArguments, const int32_t requestId,
501             Accessibility::AccessibilityElementOperatorCallback& callback) override;
502         void ClearFocus() override;
503         void OutsideTouch() override;
504         void GetCursorPosition(const int64_t elementId, const int32_t requestId,
505             Accessibility::AccessibilityElementOperatorCallback &callback) override;
506         void SetChildTreeIdAndWinId(const int64_t nodeId, const int32_t treeId, const int32_t childWindowId) override;
507         void SetBelongTreeId(const int32_t treeId) override;
508 
SetHandler(const WeakPtr<JsAccessibilityManager> & js)509         void SetHandler(const WeakPtr<JsAccessibilityManager>& js)
510         {
511             js_ = js;
512         }
513 
GetHandler()514         const WeakPtr<JsAccessibilityManager>& GetHandler() const
515         {
516             return js_;
517         }
518 
SetWebPattern(const WeakPtr<NG::WebPattern> & webPattern)519         void SetWebPattern(const WeakPtr<NG::WebPattern>& webPattern)
520         {
521             webPattern_ = webPattern;
522         }
523 
GetWebPattern()524         const WeakPtr<NG::WebPattern>& GetWebPattern() const
525         {
526             return webPattern_;
527         }
528 
529     private:
530         WeakPtr<JsAccessibilityManager> js_;
531         uint32_t windowId_ = 0;
532         WeakPtr<NG::WebPattern> webPattern_;
533     };
534 #endif // WEB_SUPPORTED
535 
536     class ToastAccessibilityConfigObserver : public AccessibilityConfig::AccessibilityConfigObserver {
537     public:
538         ToastAccessibilityConfigObserver() = default;
539         void OnConfigChanged(
540             const AccessibilityConfig::CONFIG_ID id, const AccessibilityConfig::ConfigValue& value) override;
541     };
542 
543     class JsAccessibilityStateObserver : public Accessibility::AccessibilityStateObserver {
544     public:
545         void OnStateChanged(const bool state) override;
SetAccessibilityManager(const WeakPtr<JsAccessibilityManager> & accessibilityManager)546         void SetAccessibilityManager(const WeakPtr<JsAccessibilityManager>& accessibilityManager)
547         {
548             accessibilityManager_ = accessibilityManager;
549         }
550 
SetPipeline(const WeakPtr<PipelineBase> & pipeline)551         void SetPipeline(const WeakPtr<PipelineBase>& pipeline)
552         {
553             pipeline_ = pipeline;
554         }
555 
SetEventType(uint32_t eventType)556         void SetEventType(uint32_t eventType)
557         {
558             eventType_ = eventType;
559         }
560 
561     private:
562         // Do not upgrade accessibilityManager_ on async thread, destructor might cause freeze
563         WeakPtr<JsAccessibilityManager> accessibilityManager_;
564         WeakPtr<PipelineBase> pipeline_;
565         uint32_t eventType_;
566     };
567 
568     bool AccessibilityActionEvent(const Accessibility::ActionType& action,
569         const std::map<std::string, std::string>& actionArguments, const RefPtr<AccessibilityNode>& node,
570         const RefPtr<PipelineContext>& context);
571     bool RequestAccessibilityFocus(const RefPtr<AccessibilityNode>& node);
572 
573     bool ClearAccessibilityFocus(const RefPtr<AccessibilityNode>& node);
574 
575     void AddFocusableNode(std::list<RefPtr<AccessibilityNode>>& nodeList, const RefPtr<AccessibilityNode>& node);
576     bool CanAccessibilityFocused(const RefPtr<AccessibilityNode>& node);
577     RefPtr<AccessibilityNode> FindNodeInRelativeDirection(
578         const std::list<RefPtr<AccessibilityNode>>& nodeList, RefPtr<AccessibilityNode>& node, const int direction);
579     RefPtr<AccessibilityNode> FindNodeInAbsoluteDirection(
580         const std::list<RefPtr<AccessibilityNode>>& nodeList, RefPtr<AccessibilityNode>& node, const int direction);
581     RefPtr<AccessibilityNode> GetNextFocusableNode(
582         const std::list<RefPtr<AccessibilityNode>>& nodeList, RefPtr<AccessibilityNode>& node);
583     RefPtr<AccessibilityNode> GetPreviousFocusableNode(
584         const std::list<RefPtr<AccessibilityNode>>& nodeList, RefPtr<AccessibilityNode>& node);
585 
586     bool ExecuteActionNG(int64_t elementId, const std::map<std::string, std::string>& actionArguments,
587         Accessibility::ActionType action, const RefPtr<PipelineBase>& context, int64_t uiExtensionOffset);
588     bool ConvertActionTypeToBoolen(
589         Accessibility::ActionType action,
590         RefPtr<NG::FrameNode>& frameNode,
591         int64_t elementId,
592         RefPtr<NG::PipelineContext>& context,
593         const std::map<std::string, std::string>& actionArguments);
594 
595     void SetSearchElementInfoByAccessibilityIdResult(Accessibility::AccessibilityElementOperatorCallback& callback,
596         std::list<Accessibility::AccessibilityElementInfo>&& infos, const int32_t requestId, bool checkEmbed = false);
597 
598     void SetSearchElementInfoByCustomIdResult(Accessibility::AccessibilityElementOperatorCallback& callback,
599         std::list<AccessibilityElementInfo> &infos, const std::list<AccessibilityElementInfo> &treeInfos,
600         const int32_t requestId);
601 
602     void SetSearchElementInfoByTextResult(Accessibility::AccessibilityElementOperatorCallback& callback,
603         std::list<Accessibility::AccessibilityElementInfo>&& infos, const int32_t requestId);
604 
605     void SetSearchDefaultFocusByWindowIdResult(Accessibility::AccessibilityElementOperatorCallback& callback,
606         std::list<Accessibility::AccessibilityElementInfo>&& infos, const int32_t requestId);
607 
608     void SetFindFocusedElementInfoResult(Accessibility::AccessibilityElementOperatorCallback& callback,
609         Accessibility::AccessibilityElementInfo& info, const int32_t requestId);
610 
611     void SetFocusMoveSearchResult(Accessibility::AccessibilityElementOperatorCallback& callback,
612         Accessibility::AccessibilityElementInfo& info, const int32_t requestId);
613 
614     void SetExecuteActionResult(
615         Accessibility::AccessibilityElementOperatorCallback& callback, const bool succeeded, const int32_t requestId);
616 
617     void SearchExtensionElementInfoByAccessibilityIdNG(const SearchParameter& searchParam,
618         const RefPtr<NG::FrameNode>& node, std::list<Accessibility::AccessibilityElementInfo>& infos,
619         const RefPtr<PipelineBase>& context, const RefPtr<NG::PipelineContext>& ngPipeline);
620     void SearchElementInfosByTextNG(const SearchParameter& searchParam, const RefPtr<NG::FrameNode>& node,
621         std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<PipelineBase>& context,
622         const RefPtr<NG::PipelineContext>& ngPipeline);
623     std::list<Accessibility::AccessibilityElementInfo> SearchElementInfosByTextNG(
624         int64_t elementId, const std::string& text, const RefPtr<NG::FrameNode>& node, int64_t offset);
625     void FindFocusedExtensionElementInfoNG(const SearchParameter& searchParam,
626         Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context,
627         const RefPtr<NG::FrameNode>& root);
628     void FocusExtensionElementMoveSearchNG(const SearchParameter& searchParam,
629         Accessibility::AccessibilityElementInfo& info, const RefPtr<PipelineBase>& context,
630         const RefPtr<NG::FrameNode>& root, RefPtr<NG::FrameNode>& outputExtensionNode);
631     void TransferExecuteAction(int64_t elementId, RefPtr<NG::FrameNode>& node,
632         const std::map<std::string, std::string>& actionArguments,
633         Accessibility::ActionType& action, int64_t uiExtensionOffset);
634     RefPtr<NG::FrameNode> FindNodeFromRootByExtensionId(const RefPtr<NG::FrameNode>& root, const int64_t uiExtensionId);
635     bool RegisterThirdProviderInteractionOperationAsChildTree(const Registration& registration);
636 
637     void DumpProperty(const RefPtr<AccessibilityNode>& node);
638     void DumpPropertyInfo(const RefPtr<NG::FrameNode>& frameNode, AccessibilityElementInfo& nodeInfo);
639     void DumpPropertyNG(int64_t nodeID);
640     void DumpHoverTestNG(uint32_t windowId, int64_t nodeID, int32_t x, int32_t y, bool verbose);
641     RefPtr<NG::PipelineContext> FindPipelineByElementId(const int64_t elementId, RefPtr<NG::FrameNode>& node);
642     RefPtr<NG::FrameNode> FindNodeFromPipeline(const WeakPtr<PipelineBase>& context, const int64_t elementId);
643     RefPtr<PipelineBase> GetPipelineByWindowId(const int32_t windowId);
644 
645     RefPtr<NG::PipelineContext> GetPipelineByWindowId(uint32_t windowId);
646     void DumpTreeNG(bool useWindowId, uint32_t windowId, int64_t rootId, bool isDumpSimplify = false);
647     void DumpTreeNG(const RefPtr<NG::FrameNode>& parent, int32_t depth,
648         int64_t nodeID, const CommonProperty& commonProperty, bool isDumpSimplify = false);
649     void DumpTreeNodeSafeAreaInfoNg(const RefPtr<NG::FrameNode>& node);
650     void DumpPadding(const std::unique_ptr<NG::PaddingProperty>& padding, std::string label);
651     void DumpBorder(const std::unique_ptr<NG::BorderWidthProperty>& border, std::string label);
652     void DumpTreeNodeCommonInfoNg(const RefPtr<NG::FrameNode>& node, const CommonProperty& commonProperty);
653     void DumpTreeNodeSimplifyInfoNG(
654         const RefPtr<NG::FrameNode>& node, int32_t depth, const CommonProperty& commonProperty, int32_t childSize);
655     void DumpTreeAccessibilityNodeNG(const RefPtr<NG::UINode>& uiNodeParent,
656         int32_t depth, int64_t nodeID, const CommonProperty& commonProperty);
657     bool CheckDumpInfoParams(const std::vector<std::string> &params);
658     void DumpSendEventTest(int64_t nodeId, int32_t eventId, const std::vector<std::string>& params);
659     void DumpInjectActionTest(const std::vector<std::string>& params);
660     void DumpEmbedSearchTest(const std::vector<std::string>& params);
661     void DumpEmbedHoverTestNG(const std::vector<std::string>& params, uint32_t windowId);
662     void DumpSetCheckListTest(const std::vector<std::string>& params);
663     void DumpGetCheckListTest(const std::vector<std::string>& params);
664     void DumpSpecificPropertySearchTest(const std::vector<std::string>& params, uint32_t windowId);
665 
666     void GenerateCommonProperty(const RefPtr<PipelineBase>& context, CommonProperty& output,
667         const RefPtr<PipelineBase>& mainContext, const RefPtr<NG::FrameNode>& node = nullptr);
668     void GenerateCommonPropertyForWeb(const RefPtr<PipelineBase>& context, CommonProperty& output,
669             const RefPtr<PipelineBase>& mainContext, const RefPtr<NG::FrameNode>& node);
670 
671     void FindText(const RefPtr<NG::UINode>& node, std::list<Accessibility::AccessibilityElementInfo>& infos,
672         const RefPtr<NG::PipelineContext>& context,
673         const CommonProperty& commonProperty, const SearchParameter& searchParam);
674 
675     void FindTextByTextHint(const RefPtr<NG::UINode>& node, std::list<Accessibility::AccessibilityElementInfo>& infos,
676         const RefPtr<NG::PipelineContext>& context,
677         const CommonProperty& commonProperty, const SearchParameter& searchParam);
678 
679     void UpdateAccessibilityElementInfo(
680         const RefPtr<NG::FrameNode>& node, Accessibility::AccessibilityElementInfo& nodeInfo);
681 
682     void UpdateAccessibilityVisible(
683         const RefPtr<NG::FrameNode>& node, AccessibilityElementInfo& nodeInfo);
684 
685     void UpdateVirtualNodeInfo(std::list<Accessibility::AccessibilityElementInfo>& infos,
686         Accessibility::AccessibilityElementInfo& nodeInfo,
687         const RefPtr<NG::UINode>& uiVirtualNode, const CommonProperty& commonProperty,
688         const RefPtr<NG::PipelineContext>& ngPipeline);
689 
690     void UpdateVirtualNodeChildAccessibilityElementInfo(
691         const RefPtr<NG::FrameNode>& node, const CommonProperty& commonProperty,
692         Accessibility::AccessibilityElementInfo& nodeParentInfo, Accessibility::AccessibilityElementInfo& nodeInfo,
693         const RefPtr<NG::PipelineContext>& ngPipeline);
694 
695     void UpdateVirtualNodeAccessibilityElementInfo(
696         const RefPtr<NG::FrameNode>& parent, const RefPtr<NG::FrameNode>& node,
697         const CommonProperty& commonProperty, Accessibility::AccessibilityElementInfo& nodeInfo,
698         const RefPtr<NG::PipelineContext>& ngPipeline);
699 
700     void UpdateAccessibilityElementInfo(
701         const RefPtr<NG::FrameNode>& node, const CommonProperty& commonProperty,
702         Accessibility::AccessibilityElementInfo& nodeInfo, const RefPtr<NG::PipelineContext>& ngPipeline);
703 
704     void UpdateCacheInfoNG(std::list<Accessibility::AccessibilityElementInfo>& infos, const RefPtr<NG::FrameNode>& node,
705         CommonProperty& commonProperty, const RefPtr<NG::PipelineContext>& ngPipeline,
706         const SearchParameter& searchParam);
707     void UpdateEventWhiteList(const std::vector<uint32_t>& eventList);
708 #ifdef WEB_SUPPORTED
709 
710     void WebSetScreenRect(const std::shared_ptr<NG::TransitionalNodeInfo>& node, const CommonProperty& commonProperty,
711         AccessibilityElementInfo& nodeInfo);
712 
713     void UpdateWebAccessibilityElementInfo(const std::shared_ptr<NG::TransitionalNodeInfo>& node,
714         Accessibility::AccessibilityElementInfo& nodeInfo, int32_t treeId);
715 
716     void UpdateWebAccessibilityElementInfo(const std::shared_ptr<NG::TransitionalNodeInfo>& node,
717         const CommonProperty& commonProperty, Accessibility::AccessibilityElementInfo& nodeInfo,
718         const RefPtr<NG::WebPattern>& webPattern);
719 
720     void UpdateWebCacheInfo(std::list<Accessibility::AccessibilityElementInfo>& infos, int64_t nodeId,
721         const CommonProperty& commonProperty, const RefPtr<NG::PipelineContext>& ngPipeline,
722         const SearchParameter& searchParam, const RefPtr<NG::WebPattern>& webPattern);
723     bool GetChildrenFromEmbedNode(AccessibilityElementInfo& nodeInfo, int64_t nodeId, std::list<int64_t>& children,
724         std::unordered_map<int64_t, AccessibilityElementInfo>& allEmbedNodeTreeInfosMap);
725     void PushElementsIntoInfos(AccessibilityElementInfo& nodeInfo, std::list<AccessibilityElementInfo>& infos,
726         const RefPtr<NG::WebPattern>& webPattern, std::list<int64_t>& children,
727         std::unordered_map<int64_t, AccessibilityElementInfo>& allEmbedNodeTreeInfosMap);
728 
729     int64_t GetWebAccessibilityIdBySurfaceId(const std::string& surfaceId);
730 #endif //WEB_SUPPORTED
731     void NotifyChildTreeOnRegister(int32_t treeId);
732 
733     void NotifyChildTreeOnDeregister();
734 
735     void SendUecOnTreeEvent(int64_t splitElementId);
736 
737     void NotifySetChildTreeIdAndWinId(int64_t elementId, const int32_t treeId, const int32_t childWindowId);
738 
739     bool CheckIsChildElement(
740         int64_t &elementId,
741         const std::vector<std::string>& params,
742         std::vector<std::string>& info,
743         DumpMode mode,
744         int64_t &rootId);
745 
746     bool NeedRegisterChildTree(uint32_t parentWindowId, int32_t parentTreeId, int64_t parentElementId);
747 
748     void FillEventInfoWithNode(
749         const RefPtr<NG::FrameNode>& node,
750         Accessibility::AccessibilityEventInfo& eventInfo,
751         const RefPtr<NG::PipelineContext>& context,
752         int64_t elementId);
753 
754     void NotifyAccessibilitySAStateChange(bool state);
755     void DumpTreeNodeInfoInJson(
756         const RefPtr<NG::FrameNode>& node, int32_t depth, const CommonProperty& commonProperty, int32_t childSize);
757     void CreateNodeInfoJson(const RefPtr<NG::FrameNode>& node, const CommonProperty& commonProperty,
758         std::unique_ptr<JsonValue>& json, int32_t childSize);
759     bool IsEventIgnoredByWorkMode(const AccessibilityEvent& accessibilityEvent);
760     void SendEventToAccessibilityWithNodeInner(const AccessibilityEvent& accessibilityEvent,
761         const RefPtr<AceType>& node, const RefPtr<PipelineBase>& context);
762     void SendAccessibilityAsyncEventInner(const AccessibilityEvent& accessibilityEvent);
763     int64_t GetDelayTimeBeforeSendEvent(const AccessibilityEvent& accessibilityEvent, const RefPtr<AceType>& node);
764     void UpdateChildrenNodeInCache(std::list<AccessibilityElementInfo>& infos,
765         const CommonProperty& commonProperty, const RefPtr<NG::PipelineContext>& ngPipeline,
766         const SearchParameter& searchParam, std::list<RefPtr<NG::FrameNode>>& children);
767 
768     void RegisterDynamicRenderGetParentRectHandler();
769 
770     void GetCurrentWindowPages(
771         const RefPtr<NG::PipelineContext>& ngPipeline,
772         std::vector<RefPtr<NG::FrameNode>>& pageNodes,
773         std::vector<std::string>& pagePaths);
774     const std::string GetPagePathInPageNodes(
775         int32_t pageId,
776         const std::vector<RefPtr<NG::FrameNode>>& pageNodes,
777         const std::vector<std::string> pagePaths);
778 
779     bool CheckPageEventValidInCache(int32_t containerId);
780     bool CheckPageEventByPageInCache(int32_t containerId, int32_t pageId);
781     void ReleaseAllCacheAccessibilityEvent(int32_t containerId);
782     void ReleaseCacheAccessibilityEvent(int32_t containerId, int32_t pageId);
783     void ReleaseAccessibilityEventList(
784         const std::list<std::pair<int32_t, AccessibilityEvent>>& eventList);
785 
786     SearchSurfaceIdRet SearchElementInfoBySurfaceId(
787         const std::string& surfaceId, const int32_t windowId,
788         const SearchSurfaceIdType searchType, std::list<AccessibilityElementInfo>& infos);
789 
790     bool CheckWhiteList(const uint32_t& eventType);
791 
792     std::string callbackKey_;
793     uint32_t windowId_ = 0;
794     std::unordered_map<uint32_t, std::shared_ptr<JsAccessibilityStateObserver>> stateObserver_;
795     std::shared_ptr<ToastAccessibilityConfigObserver> toastObserver_ = nullptr;
796     float scaleX_ = 1.0f;
797     float scaleY_ = 1.0f;
798     int64_t currentFocusNodeId_ = -1;
799     bool isScreenReaderEnabled_ = false;
800     int64_t currentFocusVirtualNodeParentId_ = -1;
801     bool isScreenReaderEnabledInitialized_ = false;
802 
803     int64_t lastElementId_ = -1;
804     WeakPtr<NG::FrameNode> lastFrameNode_;
805     NG::SizeF oldGeometrySize_;
806     mutable std::mutex childTreeCallbackMapMutex_;
807     std::unordered_map<int64_t, std::shared_ptr<AccessibilityChildTreeCallback>> childTreeCallbackMap_;
808     mutable std::mutex componentSACallbackMutex_;
809     std::unordered_map<int64_t, std::shared_ptr<AccessibilitySAObserverCallback>> componentSACallbackMap_;
810     int64_t parentElementId_ = INVALID_PARENT_ID;
811     uint32_t parentWindowId_ = 0;
812     int32_t parentTreeId_ = 0;
813     uint32_t parentWebWindowId_ = 0;
814     std::function<void(int32_t&, int32_t&)> getParentRectHandler_;
815     std::function<void(AccessibilityParentRectInfo&)> getParentRectHandlerNew_;
816     bool isUseJson_ = false;
817     bool reentrantLimit_ = false;
818     std::optional<std::string> pageMode_ = std::nullopt;
819     std::queue<AccessibilityEvent> eventQueue_;
820     std::vector<AccessibilityEvent> cacheEventVec_;
821     std::list<WeakPtr<NG::FrameNode>> defaultFocusList_;
822     std::vector<std::pair<WeakPtr<NG::FrameNode>, bool>> extensionComponentStatusVec_;
823     std::unordered_map<int32_t, std::optional<AccessibilityEvent>> pageIdEventMap_;
824     std::map<int32_t, std::map<std::string, int64_t>> nextFocusMapWithSubWindow_;
825     mutable std::mutex nextFocusMapWithSubWindowMutex_;
826     std::vector<uint32_t> eventWhiteList_;
827 
828     AccessibilityParentRectInfo uecRectInfo_;
829     NG::PageEventController pageController_;
830     NG::HoverTransparentCallbackController hoverTransparentCallbackController_;
831 
832     bool isIgnoreAllAction_ = false;
833 };
834 
835 } // namespace OHOS::Ace::Framework
836 
837 #endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_JS_ACCESSIBILITY_MANAGER_H
838