| 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 7dbbb456ac7527f996b4dd9d4d970e75d443006e..cac1ef3ec02fbd1ea22f825cf04bd9429f0a79c9 100644
|
| --- a/mojo/services/view_manager/view_manager_connection.cc
|
| +++ b/mojo/services/view_manager/view_manager_connection.cc
|
| @@ -20,13 +20,13 @@ namespace service {
|
| namespace {
|
|
|
| // Places |node| in |nodes| and recurses through the children.
|
| -void GetDescendants(Node* node, std::vector<Node*>* nodes) {
|
| +void GetDescendants(const Node* node, std::vector<const Node*>* nodes) {
|
| if (!node)
|
| return;
|
|
|
| nodes->push_back(node);
|
|
|
| - std::vector<Node*> children(node->GetChildren());
|
| + std::vector<const Node*> children(node->GetChildren());
|
| for (size_t i = 0 ; i < children.size(); ++i)
|
| GetDescendants(children[i], nodes);
|
| }
|
| @@ -61,7 +61,7 @@ void ViewManagerConnection::OnConnectionEstablished() {
|
| DCHECK_EQ(0, id_); // Should only get OnConnectionEstablished() once.
|
| id_ = root_node_manager_->GetAndAdvanceNextConnectionId();
|
| root_node_manager_->AddConnection(this);
|
| - std::vector<Node*> to_send;
|
| + std::vector<const Node*> to_send;
|
| GetUnknownNodesFrom(root_node_manager_->root(), &to_send);
|
| AllocationScope allocation_scope;
|
| client()->OnConnectionEstablished(
|
| @@ -89,16 +89,15 @@ View* ViewManagerConnection::GetView(const ViewId& id) {
|
| }
|
|
|
| void ViewManagerConnection::ProcessNodeHierarchyChanged(
|
| - const NodeId& node_id,
|
| - const NodeId& new_parent_id,
|
| - const NodeId& old_parent_id,
|
| + const Node* node,
|
| + const Node* new_parent,
|
| + const Node* old_parent,
|
| TransportChangeId server_change_id,
|
| bool originated_change) {
|
| if (originated_change || root_node_manager_->is_processing_delete_node())
|
| return;
|
| - std::vector<Node*> to_send;
|
| - if (!ShouldNotifyOnHierarchyChange(node_id, new_parent_id, old_parent_id,
|
| - &to_send)) {
|
| + std::vector<const Node*> to_send;
|
| + if (!ShouldNotifyOnHierarchyChange(node, new_parent, old_parent, &to_send)) {
|
| if (root_node_manager_->IsProcessingChange()) {
|
| client()->OnServerChangeIdAdvanced(
|
| root_node_manager_->next_server_change_id() + 1);
|
| @@ -106,7 +105,9 @@ void ViewManagerConnection::ProcessNodeHierarchyChanged(
|
| return;
|
| }
|
| AllocationScope allocation_scope;
|
| - client()->OnNodeHierarchyChanged(NodeIdToTransportId(node_id),
|
| + const NodeId new_parent_id(new_parent ? new_parent->id() : NodeId());
|
| + const NodeId old_parent_id(old_parent ? old_parent->id() : NodeId());
|
| + client()->OnNodeHierarchyChanged(NodeIdToTransportId(node->id()),
|
| NodeIdToTransportId(new_parent_id),
|
| NodeIdToTransportId(old_parent_id),
|
| server_change_id,
|
| @@ -114,15 +115,18 @@ void ViewManagerConnection::ProcessNodeHierarchyChanged(
|
| }
|
|
|
| void ViewManagerConnection::ProcessNodeViewReplaced(
|
| - const NodeId& node,
|
| - const ViewId& new_view_id,
|
| - const ViewId& old_view_id,
|
| + const Node* node,
|
| + const View* new_view,
|
| + const View* old_view,
|
| bool originated_change) {
|
| if (originated_change)
|
| return;
|
| - client()->OnNodeViewReplaced(NodeIdToTransportId(node),
|
| - ViewIdToTransportId(new_view_id),
|
| - ViewIdToTransportId(old_view_id));
|
| + const TransportViewId new_view_id = new_view ?
|
| + ViewIdToTransportId(new_view->id()) : 0;
|
| + const TransportViewId old_view_id = old_view ?
|
| + ViewIdToTransportId(old_view->id()) : 0;
|
| + client()->OnNodeViewReplaced(NodeIdToTransportId(node->id()),
|
| + new_view_id, old_view_id);
|
| }
|
|
|
| void ViewManagerConnection::ProcessNodeDeleted(
|
| @@ -207,24 +211,23 @@ bool ViewManagerConnection::SetViewImpl(const NodeId& node_id,
|
| }
|
|
|
| void ViewManagerConnection::GetUnknownNodesFrom(
|
| - Node* node,
|
| - std::vector<Node*>* nodes) {
|
| + const Node* node,
|
| + std::vector<const Node*>* nodes) {
|
| const TransportNodeId transport_id = NodeIdToTransportId(node->id());
|
| if (known_nodes_.count(transport_id) == 1)
|
| return;
|
| nodes->push_back(node);
|
| known_nodes_.insert(transport_id);
|
| - std::vector<Node*> children(node->GetChildren());
|
| + std::vector<const Node*> children(node->GetChildren());
|
| for (size_t i = 0 ; i < children.size(); ++i)
|
| GetUnknownNodesFrom(children[i], nodes);
|
| }
|
|
|
| bool ViewManagerConnection::ShouldNotifyOnHierarchyChange(
|
| - const NodeId& node_id,
|
| - const NodeId& new_parent_id,
|
| - const NodeId& old_parent_id,
|
| - std::vector<Node*>* to_send) {
|
| - Node* new_parent = GetNode(new_parent_id);
|
| + const Node* node,
|
| + const Node* new_parent,
|
| + const Node* old_parent,
|
| + std::vector<const Node*>* to_send) {
|
| if (new_parent) {
|
| // On getting a new parent we may need to communicate new nodes to the
|
| // client. We do that in the following cases:
|
| @@ -236,19 +239,19 @@ bool ViewManagerConnection::ShouldNotifyOnHierarchyChange(
|
| // doesn't know about we have to communicate from the root down (the
|
| // client is learning about a new root).
|
| if (root_node_manager_->root()->Contains(new_parent) ||
|
| - known_nodes_.count(NodeIdToTransportId(new_parent_id))) {
|
| - GetUnknownNodesFrom(GetNode(node_id), to_send);
|
| + known_nodes_.count(NodeIdToTransportId(new_parent->id()))) {
|
| + GetUnknownNodesFrom(node, to_send);
|
| return true;
|
| }
|
| // If parent wasn't known we have to communicate from the root down.
|
| - if (known_nodes_.count(NodeIdToTransportId(node_id))) {
|
| + if (known_nodes_.count(NodeIdToTransportId(node->id()))) {
|
| GetUnknownNodesFrom(new_parent->GetRoot(), to_send);
|
| return true;
|
| }
|
| }
|
| // Otherwise only communicate the change if the node was known. We shouldn't
|
| // need to communicate any nodes on a remove.
|
| - return known_nodes_.count(NodeIdToTransportId(node_id)) > 0;
|
| + return known_nodes_.count(NodeIdToTransportId(node->id())) > 0;
|
| }
|
|
|
| void ViewManagerConnection::CreateNode(
|
| @@ -319,7 +322,7 @@ void ViewManagerConnection::GetNodeTree(
|
| const Callback<void(Array<INode>)>& callback) {
|
| AllocationScope allocation_scope;
|
| Node* node = GetNode(NodeIdFromTransportId(node_id));
|
| - std::vector<Node*> nodes;
|
| + std::vector<const Node*> nodes;
|
| GetDescendants(node, &nodes);
|
| for (size_t i = 0; i < nodes.size(); ++i)
|
| known_nodes_.insert(NodeIdToTransportId(nodes[i]->id()));
|
| @@ -374,16 +377,16 @@ void ViewManagerConnection::SetViewContents(
|
| UnmapBuffer(handle_data);
|
| }
|
|
|
| -void ViewManagerConnection::OnNodeHierarchyChanged(const NodeId& node,
|
| - const NodeId& new_parent,
|
| - const NodeId& old_parent) {
|
| +void ViewManagerConnection::OnNodeHierarchyChanged(const Node* node,
|
| + const Node* new_parent,
|
| + const Node* old_parent) {
|
| root_node_manager_->ProcessNodeHierarchyChanged(node, new_parent, old_parent);
|
| }
|
|
|
| -void ViewManagerConnection::OnNodeViewReplaced(const NodeId& node,
|
| - const ViewId& new_view_id,
|
| - const ViewId& old_view_id) {
|
| - root_node_manager_->ProcessNodeViewReplaced(node, new_view_id, old_view_id);
|
| +void ViewManagerConnection::OnNodeViewReplaced(const Node* node,
|
| + const View* new_view,
|
| + const View* old_view) {
|
| + root_node_manager_->ProcessNodeViewReplaced(node, new_view, old_view);
|
| }
|
|
|
| } // namespace service
|
|
|