| 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_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/default_access_policy.h" | 10 #include "mojo/services/view_manager/default_access_policy.h" |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 bool ViewManagerServiceImpl::IsNodeKnown(const Node* node) const { | 150 bool ViewManagerServiceImpl::IsNodeKnown(const Node* node) const { |
| 151 return known_nodes_.count(NodeIdToTransportId(node->id())) > 0; | 151 return known_nodes_.count(NodeIdToTransportId(node->id())) > 0; |
| 152 } | 152 } |
| 153 | 153 |
| 154 bool ViewManagerServiceImpl::CanReorderNode(const Node* node, | 154 bool ViewManagerServiceImpl::CanReorderNode(const Node* node, |
| 155 const Node* relative_node, | 155 const Node* relative_node, |
| 156 OrderDirection direction) const { | 156 OrderDirection direction) const { |
| 157 if (!node || !relative_node) | 157 if (!node || !relative_node) |
| 158 return false; | 158 return false; |
| 159 | 159 |
| 160 const Node* parent = node->GetParent(); | 160 if (!node->parent() || node->parent() != relative_node->parent()) |
| 161 if (!parent || parent != relative_node->GetParent()) | |
| 162 return false; | 161 return false; |
| 163 | 162 |
| 164 if (!access_policy_->CanReorderNode(node, relative_node, direction)) | 163 if (!access_policy_->CanReorderNode(node, relative_node, direction)) |
| 165 return false; | 164 return false; |
| 166 | 165 |
| 167 std::vector<const Node*> children = parent->GetChildren(); | 166 std::vector<const Node*> children = node->parent()->GetChildren(); |
| 168 const size_t child_i = | 167 const size_t child_i = |
| 169 std::find(children.begin(), children.end(), node) - children.begin(); | 168 std::find(children.begin(), children.end(), node) - children.begin(); |
| 170 const size_t target_i = | 169 const size_t target_i = |
| 171 std::find(children.begin(), children.end(), relative_node) - | 170 std::find(children.begin(), children.end(), relative_node) - |
| 172 children.begin(); | 171 children.begin(); |
| 173 if ((direction == ORDER_DIRECTION_ABOVE && child_i == target_i + 1) || | 172 if ((direction == ORDER_DIRECTION_ABOVE && child_i == target_i + 1) || |
| 174 (direction == ORDER_DIRECTION_BELOW && child_i + 1 == target_i)) { | 173 (direction == ORDER_DIRECTION_BELOW && child_i + 1 == target_i)) { |
| 175 return false; | 174 return false; |
| 176 } | 175 } |
| 177 | 176 |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 return; | 248 return; |
| 250 | 249 |
| 251 client()->OnViewDeleted(transport_node_id); | 250 client()->OnViewDeleted(transport_node_id); |
| 252 root_node_manager_->OnConnectionMessagedClient(id_); | 251 root_node_manager_->OnConnectionMessagedClient(id_); |
| 253 | 252 |
| 254 // This connection no longer knows about the node. Unparent any nodes that | 253 // This connection no longer knows about the node. Unparent any nodes that |
| 255 // were parented to nodes in the root. | 254 // were parented to nodes in the root. |
| 256 std::vector<Node*> local_nodes; | 255 std::vector<Node*> local_nodes; |
| 257 RemoveFromKnown(GetNode(node_id), &local_nodes); | 256 RemoveFromKnown(GetNode(node_id), &local_nodes); |
| 258 for (size_t i = 0; i < local_nodes.size(); ++i) | 257 for (size_t i = 0; i < local_nodes.size(); ++i) |
| 259 local_nodes[i]->GetParent()->Remove(local_nodes[i]); | 258 local_nodes[i]->parent()->Remove(local_nodes[i]); |
| 260 } | 259 } |
| 261 | 260 |
| 262 void ViewManagerServiceImpl::RemoveChildrenAsPartOfEmbed( | 261 void ViewManagerServiceImpl::RemoveChildrenAsPartOfEmbed( |
| 263 const NodeId& node_id) { | 262 const NodeId& node_id) { |
| 264 Node* node = GetNode(node_id); | 263 Node* node = GetNode(node_id); |
| 265 CHECK(node); | 264 CHECK(node); |
| 266 CHECK(node->id().connection_id == node_id.connection_id); | 265 CHECK(node->id().connection_id == node_id.connection_id); |
| 267 std::vector<Node*> children = node->GetChildren(); | 266 std::vector<Node*> children = node->GetChildren(); |
| 268 for (size_t i = 0; i < children.size(); ++i) | 267 for (size_t i = 0; i < children.size(); ++i) |
| 269 node->Remove(children[i]); | 268 node->Remove(children[i]); |
| 270 } | 269 } |
| 271 | 270 |
| 272 Array<ViewDataPtr> ViewManagerServiceImpl::NodesToViewDatas( | 271 Array<ViewDataPtr> ViewManagerServiceImpl::NodesToViewDatas( |
| 273 const std::vector<const Node*>& nodes) { | 272 const std::vector<const Node*>& nodes) { |
| 274 Array<ViewDataPtr> array(nodes.size()); | 273 Array<ViewDataPtr> array(nodes.size()); |
| 275 for (size_t i = 0; i < nodes.size(); ++i) | 274 for (size_t i = 0; i < nodes.size(); ++i) |
| 276 array[i] = NodeToViewData(nodes[i]).Pass(); | 275 array[i] = NodeToViewData(nodes[i]).Pass(); |
| 277 return array.Pass(); | 276 return array.Pass(); |
| 278 } | 277 } |
| 279 | 278 |
| 280 ViewDataPtr ViewManagerServiceImpl::NodeToViewData(const Node* node) { | 279 ViewDataPtr ViewManagerServiceImpl::NodeToViewData(const Node* node) { |
| 281 DCHECK(IsNodeKnown(node)); | 280 DCHECK(IsNodeKnown(node)); |
| 282 const Node* parent = node->GetParent(); | 281 const Node* parent = node->parent(); |
| 283 // If the parent isn't known, it means the parent is not visible to us (not | 282 // If the parent isn't known, it means the parent is not visible to us (not |
| 284 // in roots), and should not be sent over. | 283 // in roots), and should not be sent over. |
| 285 if (parent && !IsNodeKnown(parent)) | 284 if (parent && !IsNodeKnown(parent)) |
| 286 parent = NULL; | 285 parent = NULL; |
| 287 ViewDataPtr view_data(ViewData::New()); | 286 ViewDataPtr view_data(ViewData::New()); |
| 288 view_data->parent_id = NodeIdToTransportId(parent ? parent->id() : NodeId()); | 287 view_data->parent_id = NodeIdToTransportId(parent ? parent->id() : NodeId()); |
| 289 view_data->view_id = NodeIdToTransportId(node->id()); | 288 view_data->view_id = NodeIdToTransportId(node->id()); |
| 290 view_data->bounds = Rect::From(node->bounds()); | 289 view_data->bounds = Rect::From(node->bounds()); |
| 291 return view_data.Pass(); | 290 return view_data.Pass(); |
| 292 } | 291 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 callback.Run(success); | 337 callback.Run(success); |
| 339 } | 338 } |
| 340 | 339 |
| 341 void ViewManagerServiceImpl::AddView( | 340 void ViewManagerServiceImpl::AddView( |
| 342 Id parent_id, | 341 Id parent_id, |
| 343 Id child_id, | 342 Id child_id, |
| 344 const Callback<void(bool)>& callback) { | 343 const Callback<void(bool)>& callback) { |
| 345 bool success = false; | 344 bool success = false; |
| 346 Node* parent = GetNode(NodeIdFromTransportId(parent_id)); | 345 Node* parent = GetNode(NodeIdFromTransportId(parent_id)); |
| 347 Node* child = GetNode(NodeIdFromTransportId(child_id)); | 346 Node* child = GetNode(NodeIdFromTransportId(child_id)); |
| 348 if (parent && child && child->GetParent() != parent && | 347 if (parent && child && child->parent() != parent && |
| 349 !child->Contains(parent) && access_policy_->CanAddNode(parent, child)) { | 348 !child->Contains(parent) && access_policy_->CanAddNode(parent, child)) { |
| 350 success = true; | 349 success = true; |
| 351 RootNodeManager::ScopedChange change(this, root_node_manager_, false); | 350 RootNodeManager::ScopedChange change(this, root_node_manager_, false); |
| 352 parent->Add(child); | 351 parent->Add(child); |
| 353 } | 352 } |
| 354 callback.Run(success); | 353 callback.Run(success); |
| 355 } | 354 } |
| 356 | 355 |
| 357 void ViewManagerServiceImpl::RemoveViewFromParent( | 356 void ViewManagerServiceImpl::RemoveViewFromParent( |
| 358 Id view_id, | 357 Id view_id, |
| 359 const Callback<void(bool)>& callback) { | 358 const Callback<void(bool)>& callback) { |
| 360 bool success = false; | 359 bool success = false; |
| 361 Node* node = GetNode(NodeIdFromTransportId(view_id)); | 360 Node* node = GetNode(NodeIdFromTransportId(view_id)); |
| 362 if (node && node->GetParent() && | 361 if (node && node->parent() && |
| 363 access_policy_->CanRemoveNodeFromParent(node)) { | 362 access_policy_->CanRemoveNodeFromParent(node)) { |
| 364 success = true; | 363 success = true; |
| 365 RootNodeManager::ScopedChange change(this, root_node_manager_, false); | 364 RootNodeManager::ScopedChange change(this, root_node_manager_, false); |
| 366 node->GetParent()->Remove(node); | 365 node->parent()->Remove(node); |
| 367 } | 366 } |
| 368 callback.Run(success); | 367 callback.Run(success); |
| 369 } | 368 } |
| 370 | 369 |
| 371 void ViewManagerServiceImpl::ReorderView(Id view_id, | 370 void ViewManagerServiceImpl::ReorderView(Id view_id, |
| 372 Id relative_view_id, | 371 Id relative_view_id, |
| 373 OrderDirection direction, | 372 OrderDirection direction, |
| 374 const Callback<void(bool)>& callback) { | 373 const Callback<void(bool)>& callback) { |
| 375 bool success = false; | 374 bool success = false; |
| 376 Node* node = GetNode(NodeIdFromTransportId(view_id)); | 375 Node* node = GetNode(NodeIdFromTransportId(view_id)); |
| 377 Node* relative_node = GetNode(NodeIdFromTransportId(relative_view_id)); | 376 Node* relative_node = GetNode(NodeIdFromTransportId(relative_view_id)); |
| 378 if (CanReorderNode(node, relative_node, direction)) { | 377 if (CanReorderNode(node, relative_node, direction)) { |
| 379 success = true; | 378 success = true; |
| 380 RootNodeManager::ScopedChange change(this, root_node_manager_, false); | 379 RootNodeManager::ScopedChange change(this, root_node_manager_, false); |
| 381 node->GetParent()->Reorder(node, relative_node, direction); | 380 node->parent()->Reorder(node, relative_node, direction); |
| 382 root_node_manager_->ProcessNodeReorder(node, relative_node, direction); | 381 root_node_manager_->ProcessNodeReorder(node, relative_node, direction); |
| 383 } | 382 } |
| 384 callback.Run(success); | 383 callback.Run(success); |
| 385 } | 384 } |
| 386 | 385 |
| 387 void ViewManagerServiceImpl::GetViewTree( | 386 void ViewManagerServiceImpl::GetViewTree( |
| 388 Id view_id, | 387 Id view_id, |
| 389 const Callback<void(Array<ViewDataPtr>)>& callback) { | 388 const Callback<void(Array<ViewDataPtr>)>& callback) { |
| 390 Node* node = GetNode(NodeIdFromTransportId(view_id)); | 389 Node* node = GetNode(NodeIdFromTransportId(view_id)); |
| 391 std::vector<const Node*> nodes; | 390 std::vector<const Node*> nodes; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 422 } | 421 } |
| 423 | 422 |
| 424 void ViewManagerServiceImpl::SetViewBounds( | 423 void ViewManagerServiceImpl::SetViewBounds( |
| 425 Id view_id, | 424 Id view_id, |
| 426 RectPtr bounds, | 425 RectPtr bounds, |
| 427 const Callback<void(bool)>& callback) { | 426 const Callback<void(bool)>& callback) { |
| 428 Node* node = GetNode(NodeIdFromTransportId(view_id)); | 427 Node* node = GetNode(NodeIdFromTransportId(view_id)); |
| 429 const bool success = node && access_policy_->CanSetNodeBounds(node); | 428 const bool success = node && access_policy_->CanSetNodeBounds(node); |
| 430 if (success) { | 429 if (success) { |
| 431 RootNodeManager::ScopedChange change(this, root_node_manager_, false); | 430 RootNodeManager::ScopedChange change(this, root_node_manager_, false); |
| 432 gfx::Rect old_bounds = node->window()->bounds(); | 431 node->SetBounds(bounds.To<gfx::Rect>()); |
| 433 node->window()->SetBounds(bounds.To<gfx::Rect>()); | |
| 434 } | 432 } |
| 435 callback.Run(success); | 433 callback.Run(success); |
| 436 } | 434 } |
| 437 | 435 |
| 438 void ViewManagerServiceImpl::SetViewVisibility( | 436 void ViewManagerServiceImpl::SetViewVisibility( |
| 439 Id transport_view_id, | 437 Id transport_view_id, |
| 440 bool visible, | 438 bool visible, |
| 441 const Callback<void(bool)>& callback) { | 439 const Callback<void(bool)>& callback) { |
| 442 Node* node = GetNode(NodeIdFromTransportId(transport_view_id)); | 440 Node* node = GetNode(NodeIdFromTransportId(transport_view_id)); |
| 443 const bool success = node && node->IsVisible() != visible && | 441 const bool success = node && node->visible() != visible && |
| 444 access_policy_->CanChangeNodeVisibility(node); | 442 access_policy_->CanChangeNodeVisibility(node); |
| 445 if (success) { | 443 if (success) { |
| 446 DCHECK(node); | 444 DCHECK(node); |
| 447 node->SetVisible(visible); | 445 node->SetVisible(visible); |
| 448 } | 446 } |
| 449 // TODO(sky): need to notify of visibility changes. | 447 // TODO(sky): need to notify of visibility changes. |
| 450 callback.Run(success); | 448 callback.Run(success); |
| 451 } | 449 } |
| 452 | 450 |
| 453 void ViewManagerServiceImpl::Embed( | 451 void ViewManagerServiceImpl::Embed( |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 539 | 537 |
| 540 bool ViewManagerServiceImpl::IsNodeRootOfAnotherConnectionForAccessPolicy( | 538 bool ViewManagerServiceImpl::IsNodeRootOfAnotherConnectionForAccessPolicy( |
| 541 const Node* node) const { | 539 const Node* node) const { |
| 542 ViewManagerServiceImpl* connection = | 540 ViewManagerServiceImpl* connection = |
| 543 root_node_manager_->GetConnectionWithRoot(node->id()); | 541 root_node_manager_->GetConnectionWithRoot(node->id()); |
| 544 return connection && connection != this; | 542 return connection && connection != this; |
| 545 } | 543 } |
| 546 | 544 |
| 547 } // namespace service | 545 } // namespace service |
| 548 } // namespace mojo | 546 } // namespace mojo |
| OLD | NEW |