OLD | NEW |
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_connection.h" | 5 #include "mojo/services/view_manager/view_manager_connection.h" |
6 | 6 |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "mojo/public/cpp/bindings/allocation_scope.h" | |
9 #include "mojo/services/view_manager/node.h" | 8 #include "mojo/services/view_manager/node.h" |
10 #include "mojo/services/view_manager/root_node_manager.h" | 9 #include "mojo/services/view_manager/root_node_manager.h" |
11 #include "mojo/services/view_manager/type_converters.h" | 10 #include "mojo/services/view_manager/type_converters.h" |
12 #include "mojo/services/view_manager/view.h" | 11 #include "mojo/services/view_manager/view.h" |
13 #include "third_party/skia/include/core/SkBitmap.h" | 12 #include "third_party/skia/include/core/SkBitmap.h" |
14 #include "ui/aura/window.h" | 13 #include "ui/aura/window.h" |
15 #include "ui/gfx/codec/png_codec.h" | 14 #include "ui/gfx/codec/png_codec.h" |
16 | 15 |
17 namespace mojo { | 16 namespace mojo { |
18 namespace view_manager { | 17 namespace view_manager { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 STLDeleteContainerPairSecondPointers(node_map_.begin(), node_map_.end()); | 55 STLDeleteContainerPairSecondPointers(node_map_.begin(), node_map_.end()); |
57 root_node_manager_->RemoveConnection(this); | 56 root_node_manager_->RemoveConnection(this); |
58 } | 57 } |
59 | 58 |
60 void ViewManagerConnection::OnConnectionEstablished() { | 59 void ViewManagerConnection::OnConnectionEstablished() { |
61 DCHECK_EQ(0, id_); // Should only get OnConnectionEstablished() once. | 60 DCHECK_EQ(0, id_); // Should only get OnConnectionEstablished() once. |
62 id_ = root_node_manager_->GetAndAdvanceNextConnectionId(); | 61 id_ = root_node_manager_->GetAndAdvanceNextConnectionId(); |
63 root_node_manager_->AddConnection(this); | 62 root_node_manager_->AddConnection(this); |
64 std::vector<const Node*> to_send; | 63 std::vector<const Node*> to_send; |
65 GetUnknownNodesFrom(root_node_manager_->root(), &to_send); | 64 GetUnknownNodesFrom(root_node_manager_->root(), &to_send); |
66 AllocationScope allocation_scope; | |
67 client()->OnConnectionEstablished( | 65 client()->OnConnectionEstablished( |
68 id_, | 66 id_, |
69 root_node_manager_->next_server_change_id(), | 67 root_node_manager_->next_server_change_id(), |
70 Array<INode>::From(to_send)); | 68 Array<INodePtr>::From(to_send)); |
71 } | 69 } |
72 | 70 |
73 void ViewManagerConnection::OnConnectionError() {} | 71 void ViewManagerConnection::OnConnectionError() {} |
74 | 72 |
75 const Node* ViewManagerConnection::GetNode(const NodeId& id) const { | 73 const Node* ViewManagerConnection::GetNode(const NodeId& id) const { |
76 if (id_ == id.connection_id) { | 74 if (id_ == id.connection_id) { |
77 NodeMap::const_iterator i = node_map_.find(id.node_id); | 75 NodeMap::const_iterator i = node_map_.find(id.node_id); |
78 return i == node_map_.end() ? NULL : i->second; | 76 return i == node_map_.end() ? NULL : i->second; |
79 } | 77 } |
80 return root_node_manager_->GetNode(id); | 78 return root_node_manager_->GetNode(id); |
(...skipping 16 matching lines...) Expand all Loading... |
97 if (originated_change || root_node_manager_->is_processing_delete_node()) | 95 if (originated_change || root_node_manager_->is_processing_delete_node()) |
98 return; | 96 return; |
99 std::vector<const Node*> to_send; | 97 std::vector<const Node*> to_send; |
100 if (!ShouldNotifyOnHierarchyChange(node, new_parent, old_parent, &to_send)) { | 98 if (!ShouldNotifyOnHierarchyChange(node, new_parent, old_parent, &to_send)) { |
101 if (root_node_manager_->IsProcessingChange()) { | 99 if (root_node_manager_->IsProcessingChange()) { |
102 client()->OnServerChangeIdAdvanced( | 100 client()->OnServerChangeIdAdvanced( |
103 root_node_manager_->next_server_change_id() + 1); | 101 root_node_manager_->next_server_change_id() + 1); |
104 } | 102 } |
105 return; | 103 return; |
106 } | 104 } |
107 AllocationScope allocation_scope; | |
108 const NodeId new_parent_id(new_parent ? new_parent->id() : NodeId()); | 105 const NodeId new_parent_id(new_parent ? new_parent->id() : NodeId()); |
109 const NodeId old_parent_id(old_parent ? old_parent->id() : NodeId()); | 106 const NodeId old_parent_id(old_parent ? old_parent->id() : NodeId()); |
110 client()->OnNodeHierarchyChanged(NodeIdToTransportId(node->id()), | 107 client()->OnNodeHierarchyChanged(NodeIdToTransportId(node->id()), |
111 NodeIdToTransportId(new_parent_id), | 108 NodeIdToTransportId(new_parent_id), |
112 NodeIdToTransportId(old_parent_id), | 109 NodeIdToTransportId(old_parent_id), |
113 server_change_id, | 110 server_change_id, |
114 Array<INode>::From(to_send)); | 111 Array<INodePtr>::From(to_send)); |
115 } | 112 } |
116 | 113 |
117 void ViewManagerConnection::ProcessNodeViewReplaced( | 114 void ViewManagerConnection::ProcessNodeViewReplaced( |
118 const Node* node, | 115 const Node* node, |
119 const View* new_view, | 116 const View* new_view, |
120 const View* old_view, | 117 const View* old_view, |
121 bool originated_change) { | 118 bool originated_change) { |
122 if (originated_change) | 119 if (originated_change) |
123 return; | 120 return; |
124 const TransportViewId new_view_id = new_view ? | 121 const TransportViewId new_view_id = new_view ? |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 callback.Run(false); | 268 callback.Run(false); |
272 return; | 269 return; |
273 } | 270 } |
274 node_map_[node_id.node_id] = new Node(this, node_id); | 271 node_map_[node_id.node_id] = new Node(this, node_id); |
275 callback.Run(true); | 272 callback.Run(true); |
276 } | 273 } |
277 | 274 |
278 void ViewManagerConnection::DeleteNode( | 275 void ViewManagerConnection::DeleteNode( |
279 TransportNodeId transport_node_id, | 276 TransportNodeId transport_node_id, |
280 const Callback<void(bool)>& callback) { | 277 const Callback<void(bool)>& callback) { |
281 AllocationScope allocation_scope; | |
282 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); | 278 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); |
283 bool did_delete = CanDeleteNode(node_id); | 279 bool did_delete = CanDeleteNode(node_id); |
284 if (did_delete) { | 280 if (did_delete) { |
285 ViewManagerConnection* connection = root_node_manager_->GetConnection( | 281 ViewManagerConnection* connection = root_node_manager_->GetConnection( |
286 node_id.connection_id); | 282 node_id.connection_id); |
287 did_delete = connection && connection->DeleteNodeImpl(this, node_id); | 283 did_delete = connection && connection->DeleteNodeImpl(this, node_id); |
288 } | 284 } |
289 callback.Run(did_delete); | 285 callback.Run(did_delete); |
290 } | 286 } |
291 | 287 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 this, root_node_manager_, | 319 this, root_node_manager_, |
324 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID, false); | 320 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID, false); |
325 node->GetParent()->Remove(node); | 321 node->GetParent()->Remove(node); |
326 } | 322 } |
327 } | 323 } |
328 callback.Run(success); | 324 callback.Run(success); |
329 } | 325 } |
330 | 326 |
331 void ViewManagerConnection::GetNodeTree( | 327 void ViewManagerConnection::GetNodeTree( |
332 TransportNodeId node_id, | 328 TransportNodeId node_id, |
333 const Callback<void(Array<INode>)>& callback) { | 329 const Callback<void(Array<INodePtr>)>& callback) { |
334 AllocationScope allocation_scope; | |
335 Node* node = GetNode(NodeIdFromTransportId(node_id)); | 330 Node* node = GetNode(NodeIdFromTransportId(node_id)); |
336 std::vector<const Node*> nodes; | 331 std::vector<const Node*> nodes; |
337 GetDescendants(node, &nodes); | 332 GetDescendants(node, &nodes); |
338 for (size_t i = 0; i < nodes.size(); ++i) | 333 for (size_t i = 0; i < nodes.size(); ++i) |
339 known_nodes_.insert(NodeIdToTransportId(nodes[i]->id())); | 334 known_nodes_.insert(NodeIdToTransportId(nodes[i]->id())); |
340 callback.Run(Array<INode>::From(nodes)); | 335 callback.Run(Array<INodePtr>::From(nodes)); |
341 } | 336 } |
342 | 337 |
343 void ViewManagerConnection::CreateView( | 338 void ViewManagerConnection::CreateView( |
344 TransportViewId transport_view_id, | 339 TransportViewId transport_view_id, |
345 const Callback<void(bool)>& callback) { | 340 const Callback<void(bool)>& callback) { |
346 const ViewId view_id(ViewIdFromTransportId(transport_view_id)); | 341 const ViewId view_id(ViewIdFromTransportId(transport_view_id)); |
347 if (view_id.connection_id != id_ || view_map_.count(view_id.view_id)) { | 342 if (view_id.connection_id != id_ || view_map_.count(view_id.view_id)) { |
348 callback.Run(false); | 343 callback.Run(false); |
349 return; | 344 return; |
350 } | 345 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 | 395 |
401 void ViewManagerConnection::OnNodeViewReplaced(const Node* node, | 396 void ViewManagerConnection::OnNodeViewReplaced(const Node* node, |
402 const View* new_view, | 397 const View* new_view, |
403 const View* old_view) { | 398 const View* old_view) { |
404 root_node_manager_->ProcessNodeViewReplaced(node, new_view, old_view); | 399 root_node_manager_->ProcessNodeViewReplaced(node, new_view, old_view); |
405 } | 400 } |
406 | 401 |
407 } // namespace service | 402 } // namespace service |
408 } // namespace view_manager | 403 } // namespace view_manager |
409 } // namespace mojo | 404 } // namespace mojo |
OLD | NEW |