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

Side by Side Diff: mojo/services/view_manager/view_manager_service_impl.cc

Issue 397263004: Nukes change_ids from view manager (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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/services/view_manager/view_manager_service_impl.h" 5 #include "mojo/services/view_manager/view_manager_service_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "mojo/services/public/cpp/geometry/geometry_type_converters.h" 8 #include "mojo/services/public/cpp/geometry/geometry_type_converters.h"
9 #include "mojo/services/public/cpp/input_events/input_events_type_converters.h" 9 #include "mojo/services/public/cpp/input_events/input_events_type_converters.h"
10 #include "mojo/services/view_manager/node.h" 10 #include "mojo/services/view_manager/node.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 53
54 ViewManagerServiceImpl::~ViewManagerServiceImpl() { 54 ViewManagerServiceImpl::~ViewManagerServiceImpl() {
55 // Delete any views we created. 55 // Delete any views we created.
56 while (!view_map_.empty()) { 56 while (!view_map_.empty()) {
57 bool result = DeleteViewImpl(this, view_map_.begin()->second->id()); 57 bool result = DeleteViewImpl(this, view_map_.begin()->second->id());
58 DCHECK(result); 58 DCHECK(result);
59 } 59 }
60 60
61 // Ditto the nodes. 61 // Ditto the nodes.
62 if (!node_map_.empty()) { 62 if (!node_map_.empty()) {
63 RootNodeManager::ScopedChange change( 63 RootNodeManager::ScopedChange change(this, root_node_manager_, true);
64 this, root_node_manager_,
65 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID, true);
66 while (!node_map_.empty()) 64 while (!node_map_.empty())
67 delete node_map_.begin()->second; 65 delete node_map_.begin()->second;
68 } 66 }
69 67
70 root_node_manager_->RemoveConnection(this); 68 root_node_manager_->RemoveConnection(this);
71 } 69 }
72 70
73 const Node* ViewManagerServiceImpl::GetNode(const NodeId& id) const { 71 const Node* ViewManagerServiceImpl::GetNode(const NodeId& id) const {
74 if (id_ == id.connection_id) { 72 if (id_ == id.connection_id) {
75 NodeMap::const_iterator i = node_map_.find(id.node_id); 73 NodeMap::const_iterator i = node_map_.find(id.node_id);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 client()->OnNodeBoundsChanged(node_id, 106 client()->OnNodeBoundsChanged(node_id,
109 Rect::From(old_bounds), 107 Rect::From(old_bounds),
110 Rect::From(new_bounds)); 108 Rect::From(new_bounds));
111 } 109 }
112 } 110 }
113 111
114 void ViewManagerServiceImpl::ProcessNodeHierarchyChanged( 112 void ViewManagerServiceImpl::ProcessNodeHierarchyChanged(
115 const Node* node, 113 const Node* node,
116 const Node* new_parent, 114 const Node* new_parent,
117 const Node* old_parent, 115 const Node* old_parent,
118 Id server_change_id,
119 bool originated_change) { 116 bool originated_change) {
120 if (known_nodes_.count(NodeIdToTransportId(node->id())) > 0) { 117 if (known_nodes_.count(NodeIdToTransportId(node->id())) > 0) {
121 if (originated_change) 118 if (originated_change)
122 return; 119 return;
123 if (node->id().connection_id != id_ && !IsNodeDescendantOfRoots(node)) { 120 if (node->id().connection_id != id_ && !IsNodeDescendantOfRoots(node)) {
124 // Node was a descendant of roots and is no longer, treat it as though the 121 // Node was a descendant of roots and is no longer, treat it as though the
125 // node was deleted. 122 // node was deleted.
126 RemoveFromKnown(node, NULL); 123 RemoveFromKnown(node, NULL);
127 client()->OnNodeDeleted(NodeIdToTransportId(node->id()), 124 client()->OnNodeDeleted(NodeIdToTransportId(node->id()));
128 server_change_id);
129 root_node_manager_->OnConnectionMessagedClient(id_); 125 root_node_manager_->OnConnectionMessagedClient(id_);
130 return; 126 return;
131 } 127 }
132 } 128 }
133 129
134 if (originated_change || root_node_manager_->is_processing_delete_node()) 130 if (originated_change || root_node_manager_->is_processing_delete_node())
135 return; 131 return;
136 std::vector<const Node*> to_send; 132 std::vector<const Node*> to_send;
137 if (!ShouldNotifyOnHierarchyChange(node, &new_parent, &old_parent, 133 if (!ShouldNotifyOnHierarchyChange(node, &new_parent, &old_parent,
138 &to_send)) { 134 &to_send)) {
139 if (root_node_manager_->IsProcessingChange()) {
140 client()->OnServerChangeIdAdvanced(
141 root_node_manager_->next_server_change_id() + 1);
142 }
143 return; 135 return;
144 } 136 }
145 const NodeId new_parent_id(new_parent ? new_parent->id() : NodeId()); 137 const NodeId new_parent_id(new_parent ? new_parent->id() : NodeId());
146 const NodeId old_parent_id(old_parent ? old_parent->id() : NodeId()); 138 const NodeId old_parent_id(old_parent ? old_parent->id() : NodeId());
147 DCHECK((node->id().connection_id == id_) || 139 DCHECK((node->id().connection_id == id_) ||
148 (roots_.count(NodeIdToTransportId(node->id())) > 0) || 140 (roots_.count(NodeIdToTransportId(node->id())) > 0) ||
149 (new_parent && IsNodeDescendantOfRoots(new_parent)) || 141 (new_parent && IsNodeDescendantOfRoots(new_parent)) ||
150 (old_parent && IsNodeDescendantOfRoots(old_parent))); 142 (old_parent && IsNodeDescendantOfRoots(old_parent)));
151 client()->OnNodeHierarchyChanged(NodeIdToTransportId(node->id()), 143 client()->OnNodeHierarchyChanged(NodeIdToTransportId(node->id()),
152 NodeIdToTransportId(new_parent_id), 144 NodeIdToTransportId(new_parent_id),
153 NodeIdToTransportId(old_parent_id), 145 NodeIdToTransportId(old_parent_id),
154 server_change_id,
155 NodesToNodeDatas(to_send)); 146 NodesToNodeDatas(to_send));
156 } 147 }
157 148
158 void ViewManagerServiceImpl::ProcessNodeReorder(const Node* node, 149 void ViewManagerServiceImpl::ProcessNodeReorder(const Node* node,
159 const Node* relative_node, 150 const Node* relative_node,
160 OrderDirection direction, 151 OrderDirection direction,
161 Id server_change_id,
162 bool originated_change) { 152 bool originated_change) {
163 if (originated_change || 153 if (originated_change ||
164 !known_nodes_.count(NodeIdToTransportId(node->id())) || 154 !known_nodes_.count(NodeIdToTransportId(node->id())) ||
165 !known_nodes_.count(NodeIdToTransportId(relative_node->id()))) { 155 !known_nodes_.count(NodeIdToTransportId(relative_node->id()))) {
166 return; 156 return;
167 } 157 }
168 158
169 client()->OnNodeReordered(NodeIdToTransportId(node->id()), 159 client()->OnNodeReordered(NodeIdToTransportId(node->id()),
170 NodeIdToTransportId(relative_node->id()), 160 NodeIdToTransportId(relative_node->id()),
171 direction, 161 direction);
172 server_change_id);
173 } 162 }
174 163
175 void ViewManagerServiceImpl::ProcessNodeViewReplaced( 164 void ViewManagerServiceImpl::ProcessNodeViewReplaced(
176 const Node* node, 165 const Node* node,
177 const View* new_view, 166 const View* new_view,
178 const View* old_view, 167 const View* old_view,
179 bool originated_change) { 168 bool originated_change) {
180 if (originated_change || !known_nodes_.count(NodeIdToTransportId(node->id()))) 169 if (originated_change || !known_nodes_.count(NodeIdToTransportId(node->id())))
181 return; 170 return;
182 const Id new_view_id = new_view ? 171 const Id new_view_id = new_view ?
183 ViewIdToTransportId(new_view->id()) : 0; 172 ViewIdToTransportId(new_view->id()) : 0;
184 const Id old_view_id = old_view ? 173 const Id old_view_id = old_view ?
185 ViewIdToTransportId(old_view->id()) : 0; 174 ViewIdToTransportId(old_view->id()) : 0;
186 client()->OnNodeViewReplaced(NodeIdToTransportId(node->id()), 175 client()->OnNodeViewReplaced(NodeIdToTransportId(node->id()),
187 new_view_id, old_view_id); 176 new_view_id, old_view_id);
188 } 177 }
189 178
190 void ViewManagerServiceImpl::ProcessNodeDeleted(const NodeId& node, 179 void ViewManagerServiceImpl::ProcessNodeDeleted(const NodeId& node,
191 Id server_change_id,
192 bool originated_change) { 180 bool originated_change) {
193 node_map_.erase(node.node_id); 181 node_map_.erase(node.node_id);
194 182
195 const bool in_known = known_nodes_.erase(NodeIdToTransportId(node)) > 0; 183 const bool in_known = known_nodes_.erase(NodeIdToTransportId(node)) > 0;
196 const bool in_roots = roots_.erase(NodeIdToTransportId(node)) > 0; 184 const bool in_roots = roots_.erase(NodeIdToTransportId(node)) > 0;
197 185
198 if (in_roots && roots_.empty()) 186 if (in_roots && roots_.empty())
199 roots_.insert(NodeIdToTransportId(InvalidNodeId())); 187 roots_.insert(NodeIdToTransportId(InvalidNodeId()));
200 188
201 if (originated_change) 189 if (originated_change)
202 return; 190 return;
203 191
204 if (in_known) { 192 if (in_known) {
205 client()->OnNodeDeleted(NodeIdToTransportId(node), server_change_id); 193 client()->OnNodeDeleted(NodeIdToTransportId(node));
206 root_node_manager_->OnConnectionMessagedClient(id_); 194 root_node_manager_->OnConnectionMessagedClient(id_);
207 } else if (root_node_manager_->IsProcessingChange() && 195 } else if (root_node_manager_->IsProcessingChange() &&
208 !root_node_manager_->DidConnectionMessageClient(id_)) { 196 !root_node_manager_->DidConnectionMessageClient(id_)) {
209 client()->OnServerChangeIdAdvanced(
210 root_node_manager_->next_server_change_id() + 1);
211 root_node_manager_->OnConnectionMessagedClient(id_); 197 root_node_manager_->OnConnectionMessagedClient(id_);
212 } 198 }
213 } 199 }
214 200
215 void ViewManagerServiceImpl::ProcessViewDeleted(const ViewId& view, 201 void ViewManagerServiceImpl::ProcessViewDeleted(const ViewId& view,
216 bool originated_change) { 202 bool originated_change) {
217 if (originated_change) 203 if (originated_change)
218 return; 204 return;
219 client()->OnViewDeleted(ViewIdToTransportId(view)); 205 client()->OnViewDeleted(ViewIdToTransportId(view));
220 } 206 }
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 roots_.find(NodeIdToTransportId(node->id())) != roots_.end()) && 340 roots_.find(NodeIdToTransportId(node->id())) != roots_.end()) &&
355 node->IsVisible() != visibile; 341 node->IsVisible() != visibile;
356 } 342 }
357 343
358 bool ViewManagerServiceImpl::DeleteNodeImpl(ViewManagerServiceImpl* source, 344 bool ViewManagerServiceImpl::DeleteNodeImpl(ViewManagerServiceImpl* source,
359 const NodeId& node_id) { 345 const NodeId& node_id) {
360 DCHECK_EQ(node_id.connection_id, id_); 346 DCHECK_EQ(node_id.connection_id, id_);
361 Node* node = GetNode(node_id); 347 Node* node = GetNode(node_id);
362 if (!node) 348 if (!node)
363 return false; 349 return false;
364 RootNodeManager::ScopedChange change( 350 RootNodeManager::ScopedChange change(source, root_node_manager_, true);
365 source, root_node_manager_,
366 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID, true);
367 delete node; 351 delete node;
368 return true; 352 return true;
369 } 353 }
370 354
371 bool ViewManagerServiceImpl::DeleteViewImpl(ViewManagerServiceImpl* source, 355 bool ViewManagerServiceImpl::DeleteViewImpl(ViewManagerServiceImpl* source,
372 const ViewId& view_id) { 356 const ViewId& view_id) {
373 DCHECK_EQ(view_id.connection_id, id_); 357 DCHECK_EQ(view_id.connection_id, id_);
374 View* view = GetView(view_id); 358 View* view = GetView(view_id);
375 if (!view) 359 if (!view)
376 return false; 360 return false;
377 RootNodeManager::ScopedChange change( 361 RootNodeManager::ScopedChange change(source, root_node_manager_, false);
378 source, root_node_manager_,
379 RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID, false);
380 if (view->node()) 362 if (view->node())
381 view->node()->SetView(NULL); 363 view->node()->SetView(NULL);
382 view_map_.erase(view_id.view_id); 364 view_map_.erase(view_id.view_id);
383 // Make a copy of |view_id| as once we delete view |view_id| may no longer be 365 // Make a copy of |view_id| as once we delete view |view_id| may no longer be
384 // valid. 366 // valid.
385 const ViewId view_id_copy(view_id); 367 const ViewId view_id_copy(view_id);
386 delete view; 368 delete view;
387 root_node_manager_->ProcessViewDeleted(view_id_copy); 369 root_node_manager_->ProcessViewDeleted(view_id_copy);
388 return true; 370 return true;
389 } 371 }
390 372
391 bool ViewManagerServiceImpl::SetViewImpl(Node* node, const ViewId& view_id) { 373 bool ViewManagerServiceImpl::SetViewImpl(Node* node, const ViewId& view_id) {
392 DCHECK(node); // CanSetView() should have verified node exists. 374 DCHECK(node); // CanSetView() should have verified node exists.
393 View* view = GetView(view_id); 375 View* view = GetView(view_id);
394 RootNodeManager::ScopedChange change( 376 RootNodeManager::ScopedChange change(this, root_node_manager_, false);
395 this, root_node_manager_,
396 RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID, false);
397 node->SetView(view); 377 node->SetView(view);
398 return true; 378 return true;
399 } 379 }
400 380
401 void ViewManagerServiceImpl::GetUnknownNodesFrom( 381 void ViewManagerServiceImpl::GetUnknownNodesFrom(
402 const Node* node, 382 const Node* node,
403 std::vector<const Node*>* nodes) { 383 std::vector<const Node*>* nodes) {
404 const Id transport_id = NodeIdToTransportId(node->id()); 384 const Id transport_id = NodeIdToTransportId(node->id());
405 if (known_nodes_.count(transport_id) == 1) 385 if (known_nodes_.count(transport_id) == 1)
406 return; 386 return;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 CHECK(roots_.count(transport_node_id) > 0); 430 CHECK(roots_.count(transport_node_id) > 0);
451 431
452 roots_.erase(transport_node_id); 432 roots_.erase(transport_node_id);
453 if (roots_.empty()) 433 if (roots_.empty())
454 roots_.insert(NodeIdToTransportId(InvalidNodeId())); 434 roots_.insert(NodeIdToTransportId(InvalidNodeId()));
455 435
456 // No need to do anything if we created the node. 436 // No need to do anything if we created the node.
457 if (node_id.connection_id == id_) 437 if (node_id.connection_id == id_)
458 return; 438 return;
459 439
460 client()->OnNodeDeleted(transport_node_id, 440 client()->OnNodeDeleted(transport_node_id);
461 root_node_manager_->next_server_change_id());
462 root_node_manager_->OnConnectionMessagedClient(id_); 441 root_node_manager_->OnConnectionMessagedClient(id_);
463 442
464 // This connection no longer knows about the node. Unparent any nodes that 443 // This connection no longer knows about the node. Unparent any nodes that
465 // were parented to nodes in the root. 444 // were parented to nodes in the root.
466 std::vector<Node*> local_nodes; 445 std::vector<Node*> local_nodes;
467 RemoveFromKnown(GetNode(node_id), &local_nodes); 446 RemoveFromKnown(GetNode(node_id), &local_nodes);
468 for (size_t i = 0; i < local_nodes.size(); ++i) 447 for (size_t i = 0; i < local_nodes.size(); ++i)
469 local_nodes[i]->GetParent()->Remove(local_nodes[i]); 448 local_nodes[i]->GetParent()->Remove(local_nodes[i]);
470 } 449 }
471 450
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 error_code = ERROR_CODE_VALUE_IN_USE; 544 error_code = ERROR_CODE_VALUE_IN_USE;
566 } else { 545 } else {
567 node_map_[node_id.node_id] = new Node(root_node_manager_, node_id); 546 node_map_[node_id.node_id] = new Node(root_node_manager_, node_id);
568 known_nodes_.insert(transport_node_id); 547 known_nodes_.insert(transport_node_id);
569 } 548 }
570 callback.Run(error_code); 549 callback.Run(error_code);
571 } 550 }
572 551
573 void ViewManagerServiceImpl::DeleteNode( 552 void ViewManagerServiceImpl::DeleteNode(
574 Id transport_node_id, 553 Id transport_node_id,
575 Id server_change_id,
576 const Callback<void(bool)>& callback) { 554 const Callback<void(bool)>& callback) {
577 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); 555 const NodeId node_id(NodeIdFromTransportId(transport_node_id));
578 bool success = false; 556 bool success = false;
579 if (server_change_id == root_node_manager_->next_server_change_id() && 557 if (CanDeleteNode(node_id)) {
580 CanDeleteNode(node_id)) {
581 ViewManagerServiceImpl* connection = root_node_manager_->GetConnection( 558 ViewManagerServiceImpl* connection = root_node_manager_->GetConnection(
582 node_id.connection_id); 559 node_id.connection_id);
583 success = connection && connection->DeleteNodeImpl(this, node_id); 560 success = connection && connection->DeleteNodeImpl(this, node_id);
584 } 561 }
585 callback.Run(success); 562 callback.Run(success);
586 } 563 }
587 564
588 void ViewManagerServiceImpl::AddNode( 565 void ViewManagerServiceImpl::AddNode(
589 Id parent_id, 566 Id parent_id,
590 Id child_id, 567 Id child_id,
591 Id server_change_id,
592 const Callback<void(bool)>& callback) { 568 const Callback<void(bool)>& callback) {
593 bool success = false; 569 bool success = false;
594 if (server_change_id == root_node_manager_->next_server_change_id()) { 570 Node* parent = GetNode(NodeIdFromTransportId(parent_id));
595 Node* parent = GetNode(NodeIdFromTransportId(parent_id)); 571 Node* child = GetNode(NodeIdFromTransportId(child_id));
596 Node* child = GetNode(NodeIdFromTransportId(child_id)); 572 if (CanAddNode(parent, child)) {
597 if (CanAddNode(parent, child)) { 573 success = true;
598 success = true; 574 RootNodeManager::ScopedChange change(this, root_node_manager_, false);
599 RootNodeManager::ScopedChange change( 575 parent->Add(child);
600 this, root_node_manager_,
601 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID, false);
602 parent->Add(child);
603 }
604 } 576 }
605 callback.Run(success); 577 callback.Run(success);
606 } 578 }
607 579
608 void ViewManagerServiceImpl::RemoveNodeFromParent( 580 void ViewManagerServiceImpl::RemoveNodeFromParent(
609 Id node_id, 581 Id node_id,
610 Id server_change_id,
611 const Callback<void(bool)>& callback) { 582 const Callback<void(bool)>& callback) {
612 bool success = false; 583 bool success = false;
613 if (server_change_id == root_node_manager_->next_server_change_id()) { 584 Node* node = GetNode(NodeIdFromTransportId(node_id));
614 Node* node = GetNode(NodeIdFromTransportId(node_id)); 585 if (CanRemoveNodeFromParent(node)) {
615 if (CanRemoveNodeFromParent(node)) { 586 success = true;
616 success = true; 587 RootNodeManager::ScopedChange change(this, root_node_manager_, false);
617 RootNodeManager::ScopedChange change( 588 node->GetParent()->Remove(node);
618 this, root_node_manager_,
619 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID, false);
620 node->GetParent()->Remove(node);
621 }
622 } 589 }
623 callback.Run(success); 590 callback.Run(success);
624 } 591 }
625 592
626 void ViewManagerServiceImpl::ReorderNode(Id node_id, 593 void ViewManagerServiceImpl::ReorderNode(Id node_id,
627 Id relative_node_id, 594 Id relative_node_id,
628 OrderDirection direction, 595 OrderDirection direction,
629 Id server_change_id,
630 const Callback<void(bool)>& callback) { 596 const Callback<void(bool)>& callback) {
631 bool success = false; 597 bool success = false;
632 if (server_change_id == root_node_manager_->next_server_change_id()) { 598 Node* node = GetNode(NodeIdFromTransportId(node_id));
633 Node* node = GetNode(NodeIdFromTransportId(node_id)); 599 Node* relative_node = GetNode(NodeIdFromTransportId(relative_node_id));
634 Node* relative_node = GetNode(NodeIdFromTransportId(relative_node_id)); 600 if (CanReorderNode(node, relative_node, direction)) {
635 if (CanReorderNode(node, relative_node, direction)) { 601 success = true;
636 success = true; 602 RootNodeManager::ScopedChange change(this, root_node_manager_, false);
637 RootNodeManager::ScopedChange change( 603 node->GetParent()->Reorder(node, relative_node, direction);
638 this, root_node_manager_, 604 root_node_manager_->ProcessNodeReorder(node, relative_node, direction);
639 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID, false);
640 node->GetParent()->Reorder(node, relative_node, direction);
641 root_node_manager_->ProcessNodeReorder(node, relative_node, direction);
642 }
643 } 605 }
644 callback.Run(success); 606 callback.Run(success);
645 } 607 }
646 608
647 void ViewManagerServiceImpl::GetNodeTree( 609 void ViewManagerServiceImpl::GetNodeTree(
648 Id node_id, 610 Id node_id,
649 const Callback<void(Array<NodeDataPtr>)>& callback) { 611 const Callback<void(Array<NodeDataPtr>)>& callback) {
650 Node* node = GetNode(NodeIdFromTransportId(node_id)); 612 Node* node = GetNode(NodeIdFromTransportId(node_id));
651 std::vector<const Node*> nodes; 613 std::vector<const Node*> nodes;
652 if (CanGetNodeTree(node)) { 614 if (CanGetNodeTree(node)) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 callback.Run(false); 695 callback.Run(false);
734 return; 696 return;
735 } 697 }
736 698
737 Node* node = GetNode(NodeIdFromTransportId(node_id)); 699 Node* node = GetNode(NodeIdFromTransportId(node_id));
738 if (!node) { 700 if (!node) {
739 callback.Run(false); 701 callback.Run(false);
740 return; 702 return;
741 } 703 }
742 704
743 RootNodeManager::ScopedChange change( 705 RootNodeManager::ScopedChange change(this, root_node_manager_, false);
744 this, root_node_manager_,
745 RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID, false);
746 gfx::Rect old_bounds = node->window()->bounds(); 706 gfx::Rect old_bounds = node->window()->bounds();
747 node->window()->SetBounds(bounds.To<gfx::Rect>()); 707 node->window()->SetBounds(bounds.To<gfx::Rect>());
748 callback.Run(true); 708 callback.Run(true);
749 } 709 }
750 710
751 void ViewManagerServiceImpl::SetNodeVisibility( 711 void ViewManagerServiceImpl::SetNodeVisibility(
752 Id transport_node_id, 712 Id transport_node_id,
753 bool visible, 713 bool visible,
754 const Callback<void(bool)>& callback) { 714 const Callback<void(bool)>& callback) {
755 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); 715 const NodeId node_id(NodeIdFromTransportId(transport_node_id));
(...skipping 14 matching lines...) Expand all
770 if (success) { 730 if (success) {
771 // Only allow a node to be the root for one connection. 731 // Only allow a node to be the root for one connection.
772 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); 732 const NodeId node_id(NodeIdFromTransportId(transport_node_id));
773 ViewManagerServiceImpl* connection_by_url = 733 ViewManagerServiceImpl* connection_by_url =
774 root_node_manager_->GetConnectionByCreator(id_, url.To<std::string>()); 734 root_node_manager_->GetConnectionByCreator(id_, url.To<std::string>());
775 ViewManagerServiceImpl* connection_with_node_as_root = 735 ViewManagerServiceImpl* connection_with_node_as_root =
776 root_node_manager_->GetConnectionWithRoot(node_id); 736 root_node_manager_->GetConnectionWithRoot(node_id);
777 if ((connection_by_url != connection_with_node_as_root || 737 if ((connection_by_url != connection_with_node_as_root ||
778 (!connection_by_url && !connection_with_node_as_root)) && 738 (!connection_by_url && !connection_with_node_as_root)) &&
779 (!connection_by_url || !connection_by_url->HasRoot(node_id))) { 739 (!connection_by_url || !connection_by_url->HasRoot(node_id))) {
780 RootNodeManager::ScopedChange change( 740 RootNodeManager::ScopedChange change(this, root_node_manager_, true);
781 this, root_node_manager_,
782 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID, true);
783 // Never message the originating connection. 741 // Never message the originating connection.
784 root_node_manager_->OnConnectionMessagedClient(id_); 742 root_node_manager_->OnConnectionMessagedClient(id_);
785 if (connection_with_node_as_root) 743 if (connection_with_node_as_root)
786 connection_with_node_as_root->RemoveRoot(node_id); 744 connection_with_node_as_root->RemoveRoot(node_id);
787 if (connection_by_url) 745 if (connection_by_url)
788 connection_by_url->AddRoot(node_id); 746 connection_by_url->AddRoot(node_id);
789 else 747 else
790 root_node_manager_->Embed(id_, url, transport_node_id); 748 root_node_manager_->Embed(id_, url, transport_node_id);
791 change.SendServerChangeIdAdvanced();
792 } else { 749 } else {
793 success = false; 750 success = false;
794 } 751 }
795 } 752 }
796 callback.Run(success); 753 callback.Run(success);
797 } 754 }
798 755
799 void ViewManagerServiceImpl::DispatchOnViewInputEvent(Id transport_view_id, 756 void ViewManagerServiceImpl::DispatchOnViewInputEvent(Id transport_view_id,
800 EventPtr event) { 757 EventPtr event) {
801 // We only allow the WM to dispatch events. At some point this function will 758 // We only allow the WM to dispatch events. At some point this function will
(...skipping 19 matching lines...) Expand all
821 if (roots_.empty()) { 778 if (roots_.empty()) {
822 GetUnknownNodesFrom(root_node_manager_->root(), &to_send); 779 GetUnknownNodesFrom(root_node_manager_->root(), &to_send);
823 } else { 780 } else {
824 for (NodeIdSet::const_iterator i = roots_.begin(); i != roots_.end(); ++i) 781 for (NodeIdSet::const_iterator i = roots_.begin(); i != roots_.end(); ++i)
825 GetUnknownNodesFrom(GetNode(NodeIdFromTransportId(*i)), &to_send); 782 GetUnknownNodesFrom(GetNode(NodeIdFromTransportId(*i)), &to_send);
826 } 783 }
827 784
828 client()->OnViewManagerConnectionEstablished( 785 client()->OnViewManagerConnectionEstablished(
829 id_, 786 id_,
830 creator_url_, 787 creator_url_,
831 root_node_manager_->next_server_change_id(),
832 NodesToNodeDatas(to_send)); 788 NodesToNodeDatas(to_send));
833 } 789 }
834 790
835 } // namespace service 791 } // namespace service
836 } // namespace view_manager 792 } // namespace view_manager
837 } // namespace mojo 793 } // namespace mojo
OLDNEW
« 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