Chromium Code Reviews| Index: ui/accessibility/ax_tree.h |
| diff --git a/ui/accessibility/ax_tree.h b/ui/accessibility/ax_tree.h |
| index 0241d3e1aaa1ca3954adac3f1c3e1888ca95fe6b..065a21218bed46a608aea4b53f582890d3da8826 100644 |
| --- a/ui/accessibility/ax_tree.h |
| +++ b/ui/accessibility/ax_tree.h |
| @@ -15,6 +15,31 @@ |
| namespace ui { |
| class AXNode; |
| +struct AXTreeUpdateState; |
| + |
| +// Used when you want to be notified when changes happen to the tree. |
| +class AXTreeDelegate { |
| + public: |
| + AXTreeDelegate(); |
| + virtual ~AXTreeDelegate(); |
| + |
| + // Called just before a node is deleted. Its id and data will be valid, |
| + // but its links to parents and children are invalid. This is called |
|
David Tseng
2014/02/21 00:33:23
s/This/If this
|
| + // in the middle of an update, the tree may be in an invalid state! |
| + virtual void OnNodeWillBeDeleted(AXNode* node) = 0; |
|
David Tseng
2014/02/21 00:33:23
nit: how about just OnWillDeleteNode
|
| + |
| + // Called after a new node is created. It's guaranteed to be called |
| + // after it's been fully initialized, so you can rely on its data and |
| + // links to parents and children being valid. This will be called on |
| + // parents before it's called on their children. |
| + virtual void OnNodeCreated(AXNode* node) = 0; |
|
David Tseng
2014/02/21 00:33:23
OnDidCreateNode
|
| + |
| + // Called when a node changes its data or children. |
| + virtual void OnNodeChanged(AXNode* node) = 0; |
| + |
| + // Called when the root node changes. |
| + virtual void OnRootChanged(AXNode* new_root) = 0; |
| +}; |
| // AXTree is a live, managed tree of AXNode objects that can receive |
| // updates from another AXTreeSource via AXTreeUpdates, and it can be |
| @@ -27,6 +52,8 @@ class AX_EXPORT AXTree { |
| explicit AXTree(const AXTreeUpdate& initial_state); |
| virtual ~AXTree(); |
| + virtual void SetDelegate(AXTreeDelegate* delegate); |
| + |
| virtual AXNode* GetRoot() const; |
| virtual AXNode* GetFromId(int32 id) const; |
| @@ -42,22 +69,14 @@ class AX_EXPORT AXTree { |
| // for testing and debugging. |
| const std::string& error() { return error_; } |
| - protected: |
| - // Subclasses can override this to use a subclass of AXNode. |
| - virtual AXNode* CreateNode(AXNode* parent, int32 id, int32 index_in_parent); |
| + private: |
| + AXNode* CreateNode(AXNode* parent, int32 id, int32 index_in_parent); |
| // This is called from within Unserialize(), it returns true on success. |
| - // Subclasses can override this to do additional processing. |pending_nodes| |
| - // is updated to contain all nodes that have been implicitly referenced |
| - // as part of this update, but haven't been updated yet. It's an error if |
| - // there are any pending nodes at the end of Unserialize. |
| - virtual bool UpdateNode(const AXNodeData& src, |
| - std::set<AXNode*>* pending_nodes); |
| + bool UpdateNode(const AXNodeData& src, AXTreeUpdateState* update_state); |
| - // Subclasses can override this to do special behavior when the root changes. |
| - virtual void OnRootChanged(); |
| + void OnRootChanged(); |
| - private: |
| // Convenience function to create a node and call Initialize on it. |
| AXNode* CreateAndInitializeNode( |
| AXNode* parent, int32 id, int32 index_in_parent); |
| @@ -76,13 +95,13 @@ class AX_EXPORT AXTree { |
| // pointers to child nodes, reusing existing nodes already in the tree |
| // if they exist, and creating otherwise. Reparenting is disallowed, so |
| // if the id already exists as the child of another node, that's an |
| - // error. Returns true on success, false on fatal error. See |
| - // UpdateNode, above, for an explanation of |pending_nodes|. |
| + // error. Returns true on success, false on fatal error. |
| bool CreateNewChildVector(AXNode* node, |
| const std::vector<int32> new_child_ids, |
| std::vector<AXNode*>* new_children, |
| - std::set<AXNode*>* pending_nodes); |
| + AXTreeUpdateState* update_state); |
| + AXTreeDelegate* delegate_; |
| AXNode* root_; |
| base::hash_map<int32, AXNode*> id_map_; |
| std::string error_; |