Index: mojo/services/view_manager/view_manager_service_impl.cc |
diff --git a/mojo/services/view_manager/view_manager_service_impl.cc b/mojo/services/view_manager/view_manager_service_impl.cc |
index 5b8954a902f500cf6c3fac980ca46d6bcb63b2c5..dd3fc7087aa1db62909dbf0516cf487353b1ff36 100644 |
--- a/mojo/services/view_manager/view_manager_service_impl.cc |
+++ b/mojo/services/view_manager/view_manager_service_impl.cc |
@@ -47,33 +47,19 @@ ViewManagerServiceImpl::ViewManagerServiceImpl( |
} |
ViewManagerServiceImpl::~ViewManagerServiceImpl() { |
- // Delete any views we own. |
+ // Delete any views we created. |
while (!view_map_.empty()) { |
bool result = DeleteViewImpl(this, view_map_.begin()->second->id()); |
DCHECK(result); |
} |
- // We're about to destroy all our nodes. Detach any views from them. |
- for (NodeMap::iterator i = node_map_.begin(); i != node_map_.end(); ++i) { |
- if (i->second->view()) { |
- bool result = SetViewImpl(i->second, ViewId()); |
- DCHECK(result); |
- } |
- } |
- |
+ // Ditto the nodes. |
if (!node_map_.empty()) { |
RootNodeManager::ScopedChange change( |
this, root_node_manager_, |
RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID, true); |
- while (!node_map_.empty()) { |
- scoped_ptr<Node> node(node_map_.begin()->second); |
- Node* parent = node->GetParent(); |
- const NodeId node_id(node->id()); |
- if (parent) |
- parent->Remove(node.get()); |
- root_node_manager_->ProcessNodeDeleted(node_id); |
- node_map_.erase(NodeIdToTransportId(node_id)); |
- } |
+ while (!node_map_.empty()) |
+ delete node_map_.begin()->second; |
} |
root_node_manager_->RemoveConnection(this); |
@@ -205,6 +191,8 @@ void ViewManagerServiceImpl::ProcessNodeViewReplaced( |
void ViewManagerServiceImpl::ProcessNodeDeleted(const NodeId& node, |
Id server_change_id, |
bool originated_change) { |
+ node_map_.erase(node.node_id); |
+ |
const bool in_known = known_nodes_.erase(NodeIdToTransportId(node)) > 0; |
const bool in_roots = roots_.erase(NodeIdToTransportId(node)) > 0; |
@@ -382,16 +370,7 @@ bool ViewManagerServiceImpl::DeleteNodeImpl(ViewManagerServiceImpl* source, |
RootNodeManager::ScopedChange change( |
source, root_node_manager_, |
RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID, true); |
- if (node->GetParent()) |
- node->GetParent()->Remove(node); |
- std::vector<Node*> children(node->GetChildren()); |
- for (size_t i = 0; i < children.size(); ++i) |
- node->Remove(children[i]); |
- DCHECK(node->GetChildren().empty()); |
- node_map_.erase(node_id.node_id); |
delete node; |
- node = NULL; |
- root_node_manager_->ProcessNodeDeleted(node_id); |
return true; |
} |
@@ -570,7 +549,7 @@ void ViewManagerServiceImpl::CreateNode( |
callback.Run(false); |
return; |
} |
- node_map_[node_id.node_id] = new Node(this, node_id); |
+ node_map_[node_id.node_id] = new Node(root_node_manager_, node_id); |
known_nodes_.insert(transport_node_id); |
callback.Run(true); |
} |
@@ -802,29 +781,6 @@ void ViewManagerServiceImpl::DispatchOnViewInputEvent(Id transport_view_id, |
} |
} |
-void ViewManagerServiceImpl::OnNodeHierarchyChanged(const Node* node, |
- const Node* new_parent, |
- const Node* old_parent) { |
- root_node_manager_->ProcessNodeHierarchyChanged(node, new_parent, old_parent); |
-} |
- |
-void ViewManagerServiceImpl::OnNodeBoundsChanged(const Node* node, |
- const gfx::Rect& old_bounds, |
- const gfx::Rect& new_bounds) { |
- root_node_manager_->ProcessNodeBoundsChanged(node, old_bounds, new_bounds); |
-} |
- |
-void ViewManagerServiceImpl::OnNodeViewReplaced(const Node* node, |
- const View* new_view, |
- const View* old_view) { |
- root_node_manager_->ProcessNodeViewReplaced(node, new_view, old_view); |
-} |
- |
-void ViewManagerServiceImpl::OnViewInputEvent(const View* view, |
- const ui::Event* event) { |
- root_node_manager_->DispatchViewInputEventToWindowManager(view, event); |
-} |
- |
void ViewManagerServiceImpl::OnConnectionEstablished() { |
root_node_manager_->AddConnection(this); |