| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef UI_ACCESSIBILITY_AX_TREE_OBSERVER_H_ |
| #define UI_ACCESSIBILITY_AX_TREE_OBSERVER_H_ |
| |
| #include <cstdint> |
| #include <string> |
| #include <vector> |
| |
| #include "ax_enums.h" |
| #include "ax_export.h" |
| |
| namespace ui { |
| |
| class AXNode; |
| struct AXNodeData; |
| class AXTree; |
| struct AXTreeData; |
| |
| // Used when you want to be notified when changes happen to an AXTree. |
| // |
| // |OnAtomicUpdateFinished| is notified at the end of an atomic update. |
| // It provides a vector of nodes that were added or changed, for final |
| // postprocessing. |
| class AX_EXPORT AXTreeObserver { |
| public: |
| AXTreeObserver(); |
| virtual ~AXTreeObserver(); |
| |
| // Called before any tree modifications have occurred, notifying that a single |
| // node will change its data. Its id and data will be valid, but its links to |
| // parents and children are only valid within this callstack. Do not hold a |
| // reference to the node or any relative nodes such as ancestors or |
| // descendants described by the node data outside of this event. |
| virtual void OnNodeDataWillChange(AXTree* tree, |
| const AXNodeData& old_node_data, |
| const AXNodeData& new_node_data) {} |
| |
| // Called after all tree modifications have occurred, notifying that a single |
| // node has changed its data. Its id, data, and links to parent and children |
| // will all be valid, since the tree is in a stable state after updating. |
| virtual void OnNodeDataChanged(AXTree* tree, |
| const AXNodeData& old_node_data, |
| const AXNodeData& new_node_data) {} |
| |
| // Individual callbacks for every attribute of AXNodeData that can change. |
| // Called after all tree mutations have occurred, notifying that a single node |
| // changed its data. Its id, data, and links to parent and children will all |
| // be valid, since the tree is in a stable state after updating. |
| virtual void OnRoleChanged(AXTree* tree, |
| AXNode* node, |
| ax::mojom::Role old_role, |
| ax::mojom::Role new_role) {} |
| virtual void OnStateChanged(AXTree* tree, |
| AXNode* node, |
| ax::mojom::State state, |
| bool new_value) {} |
| virtual void OnStringAttributeChanged(AXTree* tree, |
| AXNode* node, |
| ax::mojom::StringAttribute attr, |
| const std::string& old_value, |
| const std::string& new_value) {} |
| virtual void OnIntAttributeChanged(AXTree* tree, |
| AXNode* node, |
| ax::mojom::IntAttribute attr, |
| int32_t old_value, |
| int32_t new_value) {} |
| virtual void OnFloatAttributeChanged(AXTree* tree, |
| AXNode* node, |
| ax::mojom::FloatAttribute attr, |
| float old_value, |
| float new_value) {} |
| virtual void OnBoolAttributeChanged(AXTree* tree, |
| AXNode* node, |
| ax::mojom::BoolAttribute attr, |
| bool new_value) {} |
| virtual void OnIntListAttributeChanged( |
| AXTree* tree, |
| AXNode* node, |
| ax::mojom::IntListAttribute attr, |
| const std::vector<int32_t>& old_value, |
| const std::vector<int32_t>& new_value) {} |
| virtual void OnStringListAttributeChanged( |
| AXTree* tree, |
| AXNode* node, |
| ax::mojom::StringListAttribute attr, |
| const std::vector<std::string>& old_value, |
| const std::vector<std::string>& new_value) {} |
| |
| // Called when tree data changes, after all nodes have been updated. |
| virtual void OnTreeDataChanged(AXTree* tree, |
| const AXTreeData& old_data, |
| const AXTreeData& new_data) {} |
| |
| // Called before any tree modifications have occurred, notifying that a single |
| // node will be deleted. Its id and data will be valid, but its links to |
| // parents and children are only valid within this callstack. Do not hold |
| // a reference to node outside of the event. |
| virtual void OnNodeWillBeDeleted(AXTree* tree, AXNode* node) {} |
| |
| // Same as OnNodeWillBeDeleted, but only called once for an entire subtree. |
| virtual void OnSubtreeWillBeDeleted(AXTree* tree, AXNode* node) {} |
| |
| // Called just before a node is deleted for reparenting. See |
| // |OnNodeWillBeDeleted| for additional information. |
| virtual void OnNodeWillBeReparented(AXTree* tree, AXNode* node) {} |
| |
| // Called just before a subtree is deleted for reparenting. See |
| // |OnSubtreeWillBeDeleted| for additional information. |
| virtual void OnSubtreeWillBeReparented(AXTree* tree, AXNode* node) {} |
| |
| // Called after all tree mutations have occurred, notifying that a single node |
| // has been created. Its id, data, and links to parent and children will all |
| // be valid, since the tree is in a stable state after updating. |
| virtual void OnNodeCreated(AXTree* tree, AXNode* node) {} |
| |
| // Called after all tree mutations have occurred or during tree teardown, |
| // notifying that a single node has been deleted from the tree. |
| virtual void OnNodeDeleted(AXTree* tree, int32_t node_id) {} |
| |
| // Same as |OnNodeCreated|, but called for nodes that have been reparented. |
| virtual void OnNodeReparented(AXTree* tree, AXNode* node) {} |
| |
| // Called after all tree mutations have occurred, notifying that a single node |
| // has updated its data or children. Its id, data, and links to parent and |
| // children will all be valid, since the tree is in a stable state after |
| // updating. |
| virtual void OnNodeChanged(AXTree* tree, AXNode* node) {} |
| |
| enum ChangeType { |
| NODE_CREATED, |
| SUBTREE_CREATED, |
| NODE_CHANGED, |
| NODE_REPARENTED, |
| SUBTREE_REPARENTED |
| }; |
| |
| struct Change { |
| Change(AXNode* node, ChangeType type) { |
| this->node = node; |
| this->type = type; |
| } |
| AXNode* node; |
| ChangeType type; |
| }; |
| |
| // Called at the end of the update operation. Every node that was added |
| // or changed will be included in |changes|, along with an enum indicating |
| // the type of change - either (1) a node was created, (2) a node was created |
| // and it's the root of a new subtree, or (3) a node was changed. Finally, |
| // a bool indicates if the root of the tree was changed or not. |
| virtual void OnAtomicUpdateFinished(AXTree* tree, |
| bool root_changed, |
| const std::vector<Change>& changes) {} |
| }; |
| |
| } // namespace ui |
| |
| #endif // UI_ACCESSIBILITY_AX_TREE_OBSERVER_H_ |