Index: mojo/services/public/cpp/view_manager/lib/view_tree_node.cc |
diff --git a/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc b/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc |
index d695ed4a45acb52a6f91fad8035a904892664a91..8ba0fd365f8688a8e01077363454d6c3b731f037 100644 |
--- a/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc |
+++ b/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc |
@@ -118,6 +118,8 @@ ViewTreeNode::~ViewTreeNode() { |
if (parent_) |
parent_->RemoveChild(this); |
+ if (manager_) |
+ ViewManagerPrivate(manager_).synchronizer()->DestroyViewTreeNode(id_); |
} |
void ViewTreeNode::AddObserver(ViewTreeNodeObserver* observer) { |
@@ -129,19 +131,15 @@ void ViewTreeNode::RemoveObserver(ViewTreeNodeObserver* observer) { |
} |
void ViewTreeNode::AddChild(ViewTreeNode* child) { |
- ScopedTreeNotifier notifier(child, child->parent(), this); |
- if (child->parent()) |
- RemoveChildImpl(child, &child->parent_->children_); |
- children_.push_back(child); |
- child->parent_ = this; |
- ViewManagerPrivate(manager_).synchronizer()->AddChild(child->id(), id_); |
+ LocalAddChild(child); |
+ if (manager_) |
+ ViewManagerPrivate(manager_).synchronizer()->AddChild(child->id(), id_); |
} |
void ViewTreeNode::RemoveChild(ViewTreeNode* child) { |
- DCHECK_EQ(this, child->parent()); |
- ScopedTreeNotifier(child, this, NULL); |
- RemoveChildImpl(child, &children_); |
- ViewManagerPrivate(manager_).synchronizer()->RemoveChild(child->id(), id_); |
+ LocalRemoveChild(child); |
+ if (manager_) |
+ ViewManagerPrivate(manager_).synchronizer()->RemoveChild(child->id(), id_); |
} |
bool ViewTreeNode::Contains(ViewTreeNode* child) const { |
@@ -152,6 +150,23 @@ bool ViewTreeNode::Contains(ViewTreeNode* child) const { |
return false; |
} |
+//////////////////////////////////////////////////////////////////////////////// |
+// ViewTreeNode, private: |
+ |
+void ViewTreeNode::LocalAddChild(ViewTreeNode* child) { |
+ ScopedTreeNotifier notifier(child, child->parent(), this); |
+ if (child->parent()) |
+ RemoveChildImpl(child, &child->parent_->children_); |
+ children_.push_back(child); |
+ child->parent_ = this; |
+} |
+ |
+void ViewTreeNode::LocalRemoveChild(ViewTreeNode* child) { |
+ DCHECK_EQ(this, child->parent()); |
+ ScopedTreeNotifier(child, this, NULL); |
+ RemoveChildImpl(child, &children_); |
+} |
+ |
} // namespace view_manager |
} // namespace services |
} // namespace mojo |