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 |