Index: mojo/services/public/cpp/view_manager/lib/node.cc |
diff --git a/mojo/services/public/cpp/view_manager/lib/node.cc b/mojo/services/public/cpp/view_manager/lib/node.cc |
index 292cf29e381ca53f29914b2495ccabbdf1598d71..738a5be97c4750e9f6db3e5e53282d1cc65e7297 100644 |
--- a/mojo/services/public/cpp/view_manager/lib/node.cc |
+++ b/mojo/services/public/cpp/view_manager/lib/node.cc |
@@ -216,8 +216,17 @@ void Node::Destroy() { |
if (manager_) |
static_cast<ViewManagerClientImpl*>(manager_)->DestroyNode(id_); |
- while (!children_.empty()) |
- children_.front()->Destroy(); |
+ while (!children_.empty()) { |
+ Node* child = children_.front(); |
+ if (!OwnsNode(manager_, child)) { |
+ NodePrivate(child).ClearParent(); |
+ children_.erase(children_.begin()); |
+ } else { |
+ child->Destroy(); |
+ DCHECK(std::find(children_.begin(), children_.end(), child) == |
+ children_.end()); |
+ } |
+ } |
LocalDestroy(); |
} |