Index: mojo/services/public/cpp/view_manager/view_tree_node.h |
diff --git a/mojo/services/public/cpp/view_manager/view_tree_node.h b/mojo/services/public/cpp/view_manager/view_tree_node.h |
index 280aaf87e5604379f62d93e7d7008f5d8e595afb..b2af9cb122140a17d0ab0d2a368a9ef3c8293b57 100644 |
--- a/mojo/services/public/cpp/view_manager/view_tree_node.h |
+++ b/mojo/services/public/cpp/view_manager/view_tree_node.h |
@@ -18,19 +18,21 @@ namespace view_manager { |
class ViewManager; |
class ViewTreeNodeObserver; |
+// ViewTreeNodes are owned by the ViewManager. |
+// TODO(beng): Right now, you'll have to implement a ViewTreeNodeObserver to |
+// track destruction and NULL any pointers you have. |
+// Investigate some kind of smart pointer or weak pointer for these. |
class ViewTreeNode { |
public: |
typedef std::vector<ViewTreeNode*> Children; |
- explicit ViewTreeNode(ViewManager* manager); |
- ViewTreeNode(); // Used for tests. |
- ~ViewTreeNode(); |
+ static ViewTreeNode* Create(ViewManager* view_manager); |
+ |
+ // Destroys this node and all its children. |
+ void Destroy(); |
// Configuration. |
TransportNodeId id() const { return id_; } |
- void set_owned_by_parent(bool owned_by_parent) { |
- owned_by_parent_ = owned_by_parent; |
- } |
// Observation. |
void AddObserver(ViewTreeNodeObserver* observer); |
@@ -48,15 +50,22 @@ class ViewTreeNode { |
ViewTreeNode* GetChildById(TransportNodeId id); |
+ protected: |
+ // This class is subclassed only by test classes that provide a public ctor. |
+ ViewTreeNode(); |
+ ~ViewTreeNode(); |
+ |
private: |
friend class ViewTreeNodePrivate; |
+ explicit ViewTreeNode(ViewManager* manager); |
+ |
+ void LocalDestroy(); |
void LocalAddChild(ViewTreeNode* child); |
void LocalRemoveChild(ViewTreeNode* child); |
ViewManager* manager_; |
TransportNodeId id_; |
- bool owned_by_parent_; |
ViewTreeNode* parent_; |
Children children_; |