Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(494)

Unified Diff: trunk/src/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc

Issue 280023002: Revert 269414 "Changes to deletion/ownership of nodes in the cli..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: trunk/src/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc
===================================================================
--- trunk/src/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc (revision 269420)
+++ trunk/src/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc (working copy)
@@ -90,19 +90,36 @@
////////////////////////////////////////////////////////////////////////////////
// ViewTreeNode, public:
-// static
-ViewTreeNode* ViewTreeNode::Create(ViewManager* view_manager) {
- ViewTreeNode* node = new ViewTreeNode(view_manager);
- ViewManagerPrivate(view_manager).AddNode(node->id(), node);
- return node;
-}
+ViewTreeNode::ViewTreeNode()
+ : manager_(NULL),
+ id_(-1),
+ owned_by_parent_(true),
+ parent_(NULL) {}
-void ViewTreeNode::Destroy() {
+ViewTreeNode::ViewTreeNode(ViewManager* manager)
+ : manager_(manager),
+ id_(ViewManagerPrivate(manager).synchronizer()->CreateViewTreeNode()),
+ owned_by_parent_(true),
+ parent_(NULL) {}
+
+ViewTreeNode::~ViewTreeNode() {
+ while (!children_.empty()) {
+ ViewTreeNode* child = children_.front();
+ if (child->owned_by_parent_) {
+ delete child;
+ // Deleting the child also removes it from our child list.
+ DCHECK(std::find(children_.begin(), children_.end(), child) ==
+ children_.end());
+ } else {
+ RemoveChild(child);
+ }
+ }
+
+ if (parent_)
+ parent_->RemoveChild(this);
+
if (manager_)
ViewManagerPrivate(manager_).synchronizer()->DestroyViewTreeNode(id_);
- while (!children_.empty())
- children_.front()->Destroy();
- LocalDestroy();
}
void ViewTreeNode::AddObserver(ViewTreeNodeObserver* observer) {
@@ -147,40 +164,8 @@
}
////////////////////////////////////////////////////////////////////////////////
-// ViewTreeNode, protected:
-
-ViewTreeNode::ViewTreeNode()
- : manager_(NULL),
- id_(-1),
- parent_(NULL) {}
-
-ViewTreeNode::~ViewTreeNode() {
- FOR_EACH_OBSERVER(
- ViewTreeNodeObserver,
- observers_,
- OnNodeDestroy(this, ViewTreeNodeObserver::DISPOSITION_CHANGING));
- if (parent_)
- parent_->LocalRemoveChild(this);
- FOR_EACH_OBSERVER(
- ViewTreeNodeObserver,
- observers_,
- OnNodeDestroy(this, ViewTreeNodeObserver::DISPOSITION_CHANGED));
- if (manager_)
- ViewManagerPrivate(manager_).RemoveNode(id_);
-}
-
-////////////////////////////////////////////////////////////////////////////////
// ViewTreeNode, private:
-ViewTreeNode::ViewTreeNode(ViewManager* manager)
- : manager_(manager),
- id_(ViewManagerPrivate(manager).synchronizer()->CreateViewTreeNode()),
- parent_(NULL) {}
-
-void ViewTreeNode::LocalDestroy() {
- delete this;
-}
-
void ViewTreeNode::LocalAddChild(ViewTreeNode* child) {
ScopedTreeNotifier notifier(child, child->parent(), this);
if (child->parent())

Powered by Google App Engine
This is Rietveld 408576698