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

Unified Diff: mojo/services/view_manager/root_node_manager.cc

Issue 383763003: Trigger Node destruction notifications from Node's dtor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 5 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: mojo/services/view_manager/root_node_manager.cc
diff --git a/mojo/services/view_manager/root_node_manager.cc b/mojo/services/view_manager/root_node_manager.cc
index 5590e49a44f833ea7482d087f436487b2a182a8b..612e3ed02554c4102bb0c7f773185e790a64fb2a 100644
--- a/mojo/services/view_manager/root_node_manager.cc
+++ b/mojo/services/view_manager/root_node_manager.cc
@@ -48,18 +48,19 @@ RootNodeManager::RootNodeManager(ApplicationConnection* app_connection,
next_connection_id_(1),
next_server_change_id_(1),
root_view_manager_(app_connection, this, view_manager_delegate),
- root_(this, RootNodeId()),
+ root_(new Node(this, RootNodeId())),
current_change_(NULL) {
}
RootNodeManager::~RootNodeManager() {
aura::client::FocusClient* focus_client =
- aura::client::GetFocusClient(root_.window());
+ aura::client::GetFocusClient(root_->window());
focus_client->RemoveObserver(this);
while (!connections_created_by_connect_.empty())
delete *(connections_created_by_connect_.begin());
// All the connections should have been destroyed.
DCHECK(connection_map_.empty());
+ root_.reset();
}
ConnectionSpecificId RootNodeManager::GetAndAdvanceNextConnectionId() {
@@ -104,8 +105,8 @@ ViewManagerServiceImpl* RootNodeManager::GetConnection(
}
Node* RootNodeManager::GetNode(const NodeId& id) {
- if (id == root_.id())
- return &root_;
+ if (id == root_->id())
+ return root_.get();
ConnectionMap::iterator i = connection_map_.find(id.connection_id);
return i == connection_map_.end() ? NULL : i->second->GetNode(id);
}
@@ -195,7 +196,7 @@ void RootNodeManager::ProcessNodeDeleted(const NodeId& node) {
for (ConnectionMap::iterator i = connection_map_.begin();
i != connection_map_.end(); ++i) {
i->second->ProcessNodeDeleted(node, next_server_change_id_,
- IsChangeSource(i->first));
+ IsChangeSource(i->first));
}
}
@@ -250,15 +251,19 @@ ViewManagerServiceImpl* RootNodeManager::EmbedImpl(
ViewManagerServiceImpl* connection =
new ViewManagerServiceImpl(this,
- creator_id,
- creator_url,
- url.To<std::string>());
+ creator_id,
+ creator_url,
+ url.To<std::string>());
connection->SetRoots(node_ids);
BindToPipe(connection, pipe.handle0.Pass());
connections_created_by_connect_.insert(connection);
return connection;
}
+void RootNodeManager::OnNodeDestroyed(const Node* node) {
+ ProcessNodeDeleted(node->id());
+}
+
void RootNodeManager::OnNodeHierarchyChanged(const Node* node,
const Node* new_parent,
const Node* old_parent) {
« no previous file with comments | « mojo/services/view_manager/root_node_manager.h ('k') | mojo/services/view_manager/view_manager_service_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698