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

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

Issue 287183003: Restricts node/view deletion to creator (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup 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: mojo/services/view_manager/view_manager_connection.cc
diff --git a/mojo/services/view_manager/view_manager_connection.cc b/mojo/services/view_manager/view_manager_connection.cc
index cac1ef3ec02fbd1ea22f825cf04bd9429f0a79c9..ed92cd519b12040734211865357ce3982674153b 100644
--- a/mojo/services/view_manager/view_manager_connection.cc
+++ b/mojo/services/view_manager/view_manager_connection.cc
@@ -72,9 +72,9 @@ void ViewManagerConnection::OnConnectionEstablished() {
void ViewManagerConnection::OnConnectionError() {}
-Node* ViewManagerConnection::GetNode(const NodeId& id) {
+const Node* ViewManagerConnection::GetNode(const NodeId& id) const {
if (id_ == id.connection_id) {
- NodeMap::iterator i = node_map_.find(id.node_id);
+ NodeMap::const_iterator i = node_map_.find(id.node_id);
return i == node_map_.end() ? NULL : i->second;
}
return root_node_manager_->GetNode(id);
@@ -153,6 +153,14 @@ void ViewManagerConnection::ProcessViewDeleted(const ViewId& view,
client()->OnViewDeleted(ViewIdToTransportId(view));
}
+bool ViewManagerConnection::CanDeleteNode(const NodeId& node_id) const {
+ return node_id.connection_id == id_;
+}
+
+bool ViewManagerConnection::CanDeleteView(const ViewId& view_id) const {
+ return view_id.connection_id == id_;
+}
+
bool ViewManagerConnection::DeleteNodeImpl(ViewManagerConnection* source,
const NodeId& node_id) {
DCHECK_EQ(node_id.connection_id, id_);
@@ -272,10 +280,13 @@ void ViewManagerConnection::DeleteNode(
const Callback<void(bool)>& callback) {
AllocationScope allocation_scope;
const NodeId node_id(NodeIdFromTransportId(transport_node_id));
- ViewManagerConnection* connection = root_node_manager_->GetConnection(
- node_id.connection_id);
- callback.Run(connection &&
- connection->DeleteNodeImpl(this, node_id));
+ bool did_delete = CanDeleteNode(node_id);
+ if (did_delete) {
+ ViewManagerConnection* connection = root_node_manager_->GetConnection(
+ node_id.connection_id);
+ did_delete = connection && connection->DeleteNodeImpl(this, node_id);
+ }
+ callback.Run(did_delete);
}
void ViewManagerConnection::AddNode(
@@ -345,9 +356,13 @@ void ViewManagerConnection::DeleteView(
TransportViewId transport_view_id,
const Callback<void(bool)>& callback) {
const ViewId view_id(ViewIdFromTransportId(transport_view_id));
- ViewManagerConnection* connection = root_node_manager_->GetConnection(
- view_id.connection_id);
- callback.Run(connection && connection->DeleteViewImpl(this, view_id));
+ bool did_delete = CanDeleteView(view_id);
+ if (did_delete) {
+ ViewManagerConnection* connection = root_node_manager_->GetConnection(
+ view_id.connection_id);
+ did_delete = (connection && connection->DeleteViewImpl(this, view_id));
+ }
+ callback.Run(did_delete);
}
void ViewManagerConnection::SetView(
« no previous file with comments | « mojo/services/view_manager/view_manager_connection.h ('k') | mojo/services/view_manager/view_manager_connection_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698