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

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

Issue 424533002: Cleans up usage of ViewManagerServiceImpl::roots_ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix attempt 2 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/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 3e1a06c9a9bf08119c529164632de75db57e759d..5ef7e09f73911956e173aba172dfe18437c54d48 100644
--- a/mojo/services/view_manager/view_manager_service_impl.cc
+++ b/mojo/services/view_manager/view_manager_service_impl.cc
@@ -31,14 +31,12 @@ ViewManagerServiceImpl::ViewManagerServiceImpl(
creator_id_(creator_id),
creator_url_(creator_url),
delete_on_connection_error_(false) {
- // TODO: http://crbug.com/397660 .
- if (root_id != InvalidNodeId()) {
- CHECK(GetNode(root_id));
- roots_.insert(NodeIdToTransportId(root_id));
- access_policy_.reset(new DefaultAccessPolicy(id_, this));
- } else {
+ CHECK(GetNode(root_id));
+ roots_.insert(NodeIdToTransportId(root_id));
+ if (root_id == RootNodeId())
access_policy_.reset(new WindowManagerAccessPolicy(id_, this));
- }
+ else
+ access_policy_.reset(new DefaultAccessPolicy(id_, this));
}
ViewManagerServiceImpl::~ViewManagerServiceImpl() {
@@ -81,7 +79,7 @@ bool ViewManagerServiceImpl::HasRoot(const NodeId& id) const {
void ViewManagerServiceImpl::OnViewManagerServiceImplDestroyed(
ConnectionSpecificId id) {
if (creator_id_ == id)
- creator_id_ = kRootConnection;
+ creator_id_ = kInvalidConnectionId;
}
void ViewManagerServiceImpl::ProcessNodeBoundsChanged(
@@ -101,6 +99,11 @@ void ViewManagerServiceImpl::ProcessNodeHierarchyChanged(
const Node* new_parent,
const Node* old_parent,
bool originated_change) {
+ if (originated_change && !IsNodeKnown(node) && new_parent &&
+ IsNodeKnown(new_parent)) {
+ std::vector<const Node*> unused;
+ GetUnknownNodesFrom(node, &unused);
+ }
if (originated_change || root_node_manager_->is_processing_delete_node() ||
root_node_manager_->DidConnectionMessageClient(id_)) {
return;
@@ -158,11 +161,7 @@ void ViewManagerServiceImpl::ProcessNodeDeleted(const NodeId& node,
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;
-
- // TODO(sky): cleanup!
- if (in_roots && roots_.empty())
- roots_.insert(NodeIdToTransportId(InvalidNodeId()));
+ roots_.erase(NodeIdToTransportId(node));
if (originated_change)
return;
@@ -266,10 +265,12 @@ bool ViewManagerServiceImpl::SetViewImpl(Node* node, View* view) {
void ViewManagerServiceImpl::GetUnknownNodesFrom(
const Node* node,
std::vector<const Node*>* nodes) {
- if (IsNodeKnown(node))
+ if (IsNodeKnown(node) || !access_policy_->CanGetNodeTree(node))
return;
nodes->push_back(node);
known_nodes_.insert(NodeIdToTransportId(node->id()));
+ if (!access_policy_->CanDescendIntoNodeForNodeTree(node))
+ return;
std::vector<const Node*> children(node->GetChildren());
for (size_t i = 0 ; i < children.size(); ++i)
GetUnknownNodesFrom(children[i], nodes);
@@ -314,8 +315,6 @@ void ViewManagerServiceImpl::RemoveRoot(const NodeId& node_id) {
CHECK(roots_.count(transport_node_id) > 0);
roots_.erase(transport_node_id);
- if (roots_.empty())
- roots_.insert(NodeIdToTransportId(InvalidNodeId()));
// No need to do anything if we created the node.
if (node_id.connection_id == id_)
@@ -334,10 +333,6 @@ void ViewManagerServiceImpl::RemoveRoot(const NodeId& node_id) {
void ViewManagerServiceImpl::RemoveChildrenAsPartOfEmbed(
const NodeId& node_id) {
- // Let the root do what it wants.
- if (roots_.empty())
- return;
-
Node* node = GetNode(node_id);
CHECK(node);
CHECK(node->id().connection_id == node_id.connection_id);
@@ -633,12 +628,8 @@ void ViewManagerServiceImpl::OnConnectionEstablished() {
root_node_manager_->AddConnection(this);
std::vector<const Node*> to_send;
- if (roots_.empty()) {
- GetUnknownNodesFrom(root_node_manager_->root(), &to_send);
- } else {
- for (NodeIdSet::const_iterator i = roots_.begin(); i != roots_.end(); ++i)
- GetUnknownNodesFrom(GetNode(NodeIdFromTransportId(*i)), &to_send);
- }
+ for (NodeIdSet::const_iterator i = roots_.begin(); i != roots_.end(); ++i)
+ GetUnknownNodesFrom(GetNode(NodeIdFromTransportId(*i)), &to_send);
client()->OnViewManagerConnectionEstablished(
id_,
« no previous file with comments | « mojo/services/view_manager/view_manager_service_impl.h ('k') | mojo/services/view_manager/view_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698