| Index: ui/accessibility/ax_tree_serializer.h
|
| diff --git a/ui/accessibility/ax_tree_serializer.h b/ui/accessibility/ax_tree_serializer.h
|
| index c5f2c0dd8fc745fc21fdbbf1ebdd2466b675fa9c..9c735e0118db1d9cb21b351a16b4b92b78e73ddf 100644
|
| --- a/ui/accessibility/ax_tree_serializer.h
|
| +++ b/ui/accessibility/ax_tree_serializer.h
|
| @@ -172,10 +172,13 @@ AXTreeSerializer<AXSourceNode>::~AXTreeSerializer() {
|
|
|
| template<typename AXSourceNode>
|
| void AXTreeSerializer<AXSourceNode>::Reset() {
|
| - if (client_root_) {
|
| - DeleteClientSubtree(client_root_);
|
| - client_root_ = NULL;
|
| - }
|
| + if (!client_root_)
|
| + return;
|
| +
|
| + DeleteClientSubtree(client_root_);
|
| + client_id_map_.erase(client_root_->id);
|
| + delete client_root_;
|
| + client_root_ = NULL;
|
| }
|
|
|
| template<typename AXSourceNode>
|
| @@ -305,9 +308,7 @@ void AXTreeSerializer<AXSourceNode>::SerializeChanges(
|
| // If there's no LCA, just tell the client to destroy the whole
|
| // tree and then we'll serialize everything from the new root.
|
| out_update->node_id_to_clear = client_root_->id;
|
| - DeleteClientSubtree(client_root_);
|
| - client_id_map_.erase(client_root_->id);
|
| - client_root_ = NULL;
|
| + Reset();
|
| } else if (need_delete) {
|
| // Otherwise, if we need to reserialize a subtree, first we need
|
| // to delete those nodes in our client tree so that
|
| @@ -318,6 +319,7 @@ void AXTreeSerializer<AXSourceNode>::SerializeChanges(
|
| for (size_t i = 0; i < client_lca->children.size(); ++i) {
|
| client_id_map_.erase(client_lca->children[i]->id);
|
| DeleteClientSubtree(client_lca->children[i]);
|
| + delete client_lca->children[i];
|
| }
|
| client_lca->children.clear();
|
| }
|
| @@ -342,6 +344,7 @@ void AXTreeSerializer<AXSourceNode>::DeleteClientSubtree(
|
| for (size_t i = 0; i < client_node->children.size(); ++i) {
|
| client_id_map_.erase(client_node->children[i]->id);
|
| DeleteClientSubtree(client_node->children[i]);
|
| + delete client_node->children[i];
|
| }
|
| client_node->children.clear();
|
| }
|
| @@ -365,10 +368,7 @@ void AXTreeSerializer<AXSourceNode>::SerializeChangedNodes(
|
| int id = tree_->GetId(node);
|
| ClientTreeNode* client_node = ClientTreeNodeById(id);
|
| if (!client_node) {
|
| - if (client_root_) {
|
| - client_id_map_.erase(client_root_->id);
|
| - DeleteClientSubtree(client_root_);
|
| - }
|
| + Reset();
|
| client_root_ = new ClientTreeNode();
|
| client_node = client_root_;
|
| client_node->id = id;
|
| @@ -408,6 +408,7 @@ void AXTreeSerializer<AXSourceNode>::SerializeChangedNodes(
|
| if (new_child_ids.find(old_child_id) == new_child_ids.end()) {
|
| client_id_map_.erase(old_child_id);
|
| DeleteClientSubtree(old_child);
|
| + delete old_child;
|
| } else {
|
| client_child_id_map[old_child_id] = old_child;
|
| }
|
|
|