| 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 |