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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 creator_id_ = kInvalidConnectionId; | 69 creator_id_ = kInvalidConnectionId; |
70 } | 70 } |
71 | 71 |
72 void ViewManagerServiceImpl::ProcessNodeBoundsChanged( | 72 void ViewManagerServiceImpl::ProcessNodeBoundsChanged( |
73 const Node* node, | 73 const Node* node, |
74 const gfx::Rect& old_bounds, | 74 const gfx::Rect& old_bounds, |
75 const gfx::Rect& new_bounds, | 75 const gfx::Rect& new_bounds, |
76 bool originated_change) { | 76 bool originated_change) { |
77 if (originated_change || !IsNodeKnown(node)) | 77 if (originated_change || !IsNodeKnown(node)) |
78 return; | 78 return; |
79 client()->OnNodeBoundsChanged(NodeIdToTransportId(node->id()), | 79 client()->OnViewBoundsChanged(NodeIdToTransportId(node->id()), |
80 Rect::From(old_bounds), | 80 Rect::From(old_bounds), |
81 Rect::From(new_bounds)); | 81 Rect::From(new_bounds)); |
82 } | 82 } |
83 | 83 |
84 void ViewManagerServiceImpl::ProcessNodeHierarchyChanged( | 84 void ViewManagerServiceImpl::ProcessNodeHierarchyChanged( |
85 const Node* node, | 85 const Node* node, |
86 const Node* new_parent, | 86 const Node* new_parent, |
87 const Node* old_parent, | 87 const Node* old_parent, |
88 bool originated_change) { | 88 bool originated_change) { |
89 if (originated_change && !IsNodeKnown(node) && new_parent && | 89 if (originated_change && !IsNodeKnown(node) && new_parent && |
(...skipping 10 matching lines...) Expand all Loading... |
100 node, &new_parent, &old_parent)) { | 100 node, &new_parent, &old_parent)) { |
101 return; | 101 return; |
102 } | 102 } |
103 // Inform the client of any new nodes and update the set of nodes we know | 103 // Inform the client of any new nodes and update the set of nodes we know |
104 // about. | 104 // about. |
105 std::vector<const Node*> to_send; | 105 std::vector<const Node*> to_send; |
106 if (!IsNodeKnown(node)) | 106 if (!IsNodeKnown(node)) |
107 GetUnknownNodesFrom(node, &to_send); | 107 GetUnknownNodesFrom(node, &to_send); |
108 const NodeId new_parent_id(new_parent ? new_parent->id() : NodeId()); | 108 const NodeId new_parent_id(new_parent ? new_parent->id() : NodeId()); |
109 const NodeId old_parent_id(old_parent ? old_parent->id() : NodeId()); | 109 const NodeId old_parent_id(old_parent ? old_parent->id() : NodeId()); |
110 client()->OnNodeHierarchyChanged(NodeIdToTransportId(node->id()), | 110 client()->OnViewHierarchyChanged(NodeIdToTransportId(node->id()), |
111 NodeIdToTransportId(new_parent_id), | 111 NodeIdToTransportId(new_parent_id), |
112 NodeIdToTransportId(old_parent_id), | 112 NodeIdToTransportId(old_parent_id), |
113 NodesToNodeDatas(to_send)); | 113 NodesToViewDatas(to_send)); |
114 root_node_manager_->OnConnectionMessagedClient(id_); | 114 root_node_manager_->OnConnectionMessagedClient(id_); |
115 } | 115 } |
116 | 116 |
117 void ViewManagerServiceImpl::ProcessNodeReorder(const Node* node, | 117 void ViewManagerServiceImpl::ProcessNodeReorder(const Node* node, |
118 const Node* relative_node, | 118 const Node* relative_node, |
119 OrderDirection direction, | 119 OrderDirection direction, |
120 bool originated_change) { | 120 bool originated_change) { |
121 if (originated_change || !IsNodeKnown(node) || !IsNodeKnown(relative_node)) | 121 if (originated_change || !IsNodeKnown(node) || !IsNodeKnown(relative_node)) |
122 return; | 122 return; |
123 | 123 |
124 client()->OnNodeReordered(NodeIdToTransportId(node->id()), | 124 client()->OnViewReordered(NodeIdToTransportId(node->id()), |
125 NodeIdToTransportId(relative_node->id()), | 125 NodeIdToTransportId(relative_node->id()), |
126 direction); | 126 direction); |
127 } | 127 } |
128 | 128 |
129 void ViewManagerServiceImpl::ProcessNodeDeleted(const NodeId& node, | 129 void ViewManagerServiceImpl::ProcessNodeDeleted(const NodeId& node, |
130 bool originated_change) { | 130 bool originated_change) { |
131 node_map_.erase(node.node_id); | 131 node_map_.erase(node.node_id); |
132 | 132 |
133 const bool in_known = known_nodes_.erase(NodeIdToTransportId(node)) > 0; | 133 const bool in_known = known_nodes_.erase(NodeIdToTransportId(node)) > 0; |
134 roots_.erase(NodeIdToTransportId(node)); | 134 roots_.erase(NodeIdToTransportId(node)); |
135 | 135 |
136 if (originated_change) | 136 if (originated_change) |
137 return; | 137 return; |
138 | 138 |
139 if (in_known) { | 139 if (in_known) { |
140 client()->OnNodeDeleted(NodeIdToTransportId(node)); | 140 client()->OnViewDeleted(NodeIdToTransportId(node)); |
141 root_node_manager_->OnConnectionMessagedClient(id_); | 141 root_node_manager_->OnConnectionMessagedClient(id_); |
142 } | 142 } |
143 } | 143 } |
144 | 144 |
145 void ViewManagerServiceImpl::ProcessFocusChanged(const Node* focused_node, | 145 void ViewManagerServiceImpl::ProcessFocusChanged(const Node* focused_node, |
146 const Node* blurred_node, | 146 const Node* blurred_node, |
147 bool originated_change) { | 147 bool originated_change) { |
148 if (originated_change) | 148 if (originated_change) |
149 return; | 149 return; |
150 | 150 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 CHECK(node); | 244 CHECK(node); |
245 std::vector<const Node*> to_send; | 245 std::vector<const Node*> to_send; |
246 if (!IsNodeKnown(node)) { | 246 if (!IsNodeKnown(node)) { |
247 GetUnknownNodesFrom(node, &to_send); | 247 GetUnknownNodesFrom(node, &to_send); |
248 } else { | 248 } else { |
249 // Even though the connection knows about the new root we need to tell it | 249 // Even though the connection knows about the new root we need to tell it |
250 // |node| is now a root. | 250 // |node| is now a root. |
251 to_send.push_back(node); | 251 to_send.push_back(node); |
252 } | 252 } |
253 | 253 |
254 client()->OnEmbed(id_, creator_url_, NodeToNodeData(to_send.front()), | 254 client()->OnEmbed(id_, creator_url_, NodeToViewData(to_send.front()), |
255 service_provider.Pass()); | 255 service_provider.Pass()); |
256 root_node_manager_->OnConnectionMessagedClient(id_); | 256 root_node_manager_->OnConnectionMessagedClient(id_); |
257 } | 257 } |
258 | 258 |
259 void ViewManagerServiceImpl::RemoveRoot(const NodeId& node_id) { | 259 void ViewManagerServiceImpl::RemoveRoot(const NodeId& node_id) { |
260 const Id transport_node_id(NodeIdToTransportId(node_id)); | 260 const Id transport_node_id(NodeIdToTransportId(node_id)); |
261 CHECK(roots_.count(transport_node_id) > 0); | 261 CHECK(roots_.count(transport_node_id) > 0); |
262 | 262 |
263 roots_.erase(transport_node_id); | 263 roots_.erase(transport_node_id); |
264 | 264 |
265 // No need to do anything if we created the node. | 265 // No need to do anything if we created the node. |
266 if (node_id.connection_id == id_) | 266 if (node_id.connection_id == id_) |
267 return; | 267 return; |
268 | 268 |
269 client()->OnNodeDeleted(transport_node_id); | 269 client()->OnViewDeleted(transport_node_id); |
270 root_node_manager_->OnConnectionMessagedClient(id_); | 270 root_node_manager_->OnConnectionMessagedClient(id_); |
271 | 271 |
272 // This connection no longer knows about the node. Unparent any nodes that | 272 // This connection no longer knows about the node. Unparent any nodes that |
273 // were parented to nodes in the root. | 273 // were parented to nodes in the root. |
274 std::vector<Node*> local_nodes; | 274 std::vector<Node*> local_nodes; |
275 RemoveFromKnown(GetNode(node_id), &local_nodes); | 275 RemoveFromKnown(GetNode(node_id), &local_nodes); |
276 for (size_t i = 0; i < local_nodes.size(); ++i) | 276 for (size_t i = 0; i < local_nodes.size(); ++i) |
277 local_nodes[i]->GetParent()->Remove(local_nodes[i]); | 277 local_nodes[i]->GetParent()->Remove(local_nodes[i]); |
278 } | 278 } |
279 | 279 |
280 void ViewManagerServiceImpl::RemoveChildrenAsPartOfEmbed( | 280 void ViewManagerServiceImpl::RemoveChildrenAsPartOfEmbed( |
281 const NodeId& node_id) { | 281 const NodeId& node_id) { |
282 Node* node = GetNode(node_id); | 282 Node* node = GetNode(node_id); |
283 CHECK(node); | 283 CHECK(node); |
284 CHECK(node->id().connection_id == node_id.connection_id); | 284 CHECK(node->id().connection_id == node_id.connection_id); |
285 std::vector<Node*> children = node->GetChildren(); | 285 std::vector<Node*> children = node->GetChildren(); |
286 for (size_t i = 0; i < children.size(); ++i) | 286 for (size_t i = 0; i < children.size(); ++i) |
287 node->Remove(children[i]); | 287 node->Remove(children[i]); |
288 } | 288 } |
289 | 289 |
290 Array<NodeDataPtr> ViewManagerServiceImpl::NodesToNodeDatas( | 290 Array<ViewDataPtr> ViewManagerServiceImpl::NodesToViewDatas( |
291 const std::vector<const Node*>& nodes) { | 291 const std::vector<const Node*>& nodes) { |
292 Array<NodeDataPtr> array(nodes.size()); | 292 Array<ViewDataPtr> array(nodes.size()); |
293 for (size_t i = 0; i < nodes.size(); ++i) | 293 for (size_t i = 0; i < nodes.size(); ++i) |
294 array[i] = NodeToNodeData(nodes[i]).Pass(); | 294 array[i] = NodeToViewData(nodes[i]).Pass(); |
295 return array.Pass(); | 295 return array.Pass(); |
296 } | 296 } |
297 | 297 |
298 NodeDataPtr ViewManagerServiceImpl::NodeToNodeData(const Node* node) { | 298 ViewDataPtr ViewManagerServiceImpl::NodeToViewData(const Node* node) { |
299 DCHECK(IsNodeKnown(node)); | 299 DCHECK(IsNodeKnown(node)); |
300 const Node* parent = node->GetParent(); | 300 const Node* parent = node->GetParent(); |
301 // If the parent isn't known, it means the parent is not visible to us (not | 301 // If the parent isn't known, it means the parent is not visible to us (not |
302 // in roots), and should not be sent over. | 302 // in roots), and should not be sent over. |
303 if (parent && !IsNodeKnown(parent)) | 303 if (parent && !IsNodeKnown(parent)) |
304 parent = NULL; | 304 parent = NULL; |
305 NodeDataPtr node_data(NodeData::New()); | 305 ViewDataPtr view_data(ViewData::New()); |
306 node_data->parent_id = NodeIdToTransportId(parent ? parent->id() : NodeId()); | 306 view_data->parent_id = NodeIdToTransportId(parent ? parent->id() : NodeId()); |
307 node_data->node_id = NodeIdToTransportId(node->id()); | 307 view_data->view_id = NodeIdToTransportId(node->id()); |
308 node_data->bounds = Rect::From(node->bounds()); | 308 view_data->bounds = Rect::From(node->bounds()); |
309 return node_data.Pass(); | 309 return view_data.Pass(); |
310 } | 310 } |
311 | 311 |
312 void ViewManagerServiceImpl::GetNodeTreeImpl( | 312 void ViewManagerServiceImpl::GetNodeTreeImpl( |
313 const Node* node, | 313 const Node* node, |
314 std::vector<const Node*>* nodes) const { | 314 std::vector<const Node*>* nodes) const { |
315 DCHECK(node); | 315 DCHECK(node); |
316 | 316 |
317 if (!access_policy_->CanGetNodeTree(node)) | 317 if (!access_policy_->CanGetNodeTree(node)) |
318 return; | 318 return; |
319 | 319 |
320 nodes->push_back(node); | 320 nodes->push_back(node); |
321 | 321 |
322 if (!access_policy_->CanDescendIntoNodeForNodeTree(node)) | 322 if (!access_policy_->CanDescendIntoNodeForNodeTree(node)) |
323 return; | 323 return; |
324 | 324 |
325 std::vector<const Node*> children(node->GetChildren()); | 325 std::vector<const Node*> children(node->GetChildren()); |
326 for (size_t i = 0 ; i < children.size(); ++i) | 326 for (size_t i = 0 ; i < children.size(); ++i) |
327 GetNodeTreeImpl(children[i], nodes); | 327 GetNodeTreeImpl(children[i], nodes); |
328 } | 328 } |
329 | 329 |
330 void ViewManagerServiceImpl::CreateNode( | 330 void ViewManagerServiceImpl::CreateView( |
331 Id transport_node_id, | 331 Id transport_view_id, |
332 const Callback<void(ErrorCode)>& callback) { | 332 const Callback<void(ErrorCode)>& callback) { |
333 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); | 333 const NodeId node_id(NodeIdFromTransportId(transport_view_id)); |
334 ErrorCode error_code = ERROR_CODE_NONE; | 334 ErrorCode error_code = ERROR_CODE_NONE; |
335 if (node_id.connection_id != id_) { | 335 if (node_id.connection_id != id_) { |
336 error_code = ERROR_CODE_ILLEGAL_ARGUMENT; | 336 error_code = ERROR_CODE_ILLEGAL_ARGUMENT; |
337 } else if (node_map_.find(node_id.node_id) != node_map_.end()) { | 337 } else if (node_map_.find(node_id.node_id) != node_map_.end()) { |
338 error_code = ERROR_CODE_VALUE_IN_USE; | 338 error_code = ERROR_CODE_VALUE_IN_USE; |
339 } else { | 339 } else { |
340 node_map_[node_id.node_id] = new Node(root_node_manager_, node_id); | 340 node_map_[node_id.node_id] = new Node(root_node_manager_, node_id); |
341 known_nodes_.insert(transport_node_id); | 341 known_nodes_.insert(transport_view_id); |
342 } | 342 } |
343 callback.Run(error_code); | 343 callback.Run(error_code); |
344 } | 344 } |
345 | 345 |
346 void ViewManagerServiceImpl::DeleteNode( | 346 void ViewManagerServiceImpl::DeleteView( |
347 Id transport_node_id, | 347 Id transport_view_id, |
348 const Callback<void(bool)>& callback) { | 348 const Callback<void(bool)>& callback) { |
349 Node* node = GetNode(NodeIdFromTransportId(transport_node_id)); | 349 Node* node = GetNode(NodeIdFromTransportId(transport_view_id)); |
350 bool success = false; | 350 bool success = false; |
351 if (node && access_policy_->CanDeleteNode(node)) { | 351 if (node && access_policy_->CanDeleteNode(node)) { |
352 ViewManagerServiceImpl* connection = root_node_manager_->GetConnection( | 352 ViewManagerServiceImpl* connection = root_node_manager_->GetConnection( |
353 node->id().connection_id); | 353 node->id().connection_id); |
354 success = connection && connection->DeleteNodeImpl(this, node); | 354 success = connection && connection->DeleteNodeImpl(this, node); |
355 } | 355 } |
356 callback.Run(success); | 356 callback.Run(success); |
357 } | 357 } |
358 | 358 |
359 void ViewManagerServiceImpl::AddNode( | 359 void ViewManagerServiceImpl::AddView( |
360 Id parent_id, | 360 Id parent_id, |
361 Id child_id, | 361 Id child_id, |
362 const Callback<void(bool)>& callback) { | 362 const Callback<void(bool)>& callback) { |
363 bool success = false; | 363 bool success = false; |
364 Node* parent = GetNode(NodeIdFromTransportId(parent_id)); | 364 Node* parent = GetNode(NodeIdFromTransportId(parent_id)); |
365 Node* child = GetNode(NodeIdFromTransportId(child_id)); | 365 Node* child = GetNode(NodeIdFromTransportId(child_id)); |
366 if (parent && child && child->GetParent() != parent && | 366 if (parent && child && child->GetParent() != parent && |
367 !child->Contains(parent) && access_policy_->CanAddNode(parent, child)) { | 367 !child->Contains(parent) && access_policy_->CanAddNode(parent, child)) { |
368 success = true; | 368 success = true; |
369 RootNodeManager::ScopedChange change(this, root_node_manager_, false); | 369 RootNodeManager::ScopedChange change(this, root_node_manager_, false); |
370 parent->Add(child); | 370 parent->Add(child); |
371 } | 371 } |
372 callback.Run(success); | 372 callback.Run(success); |
373 } | 373 } |
374 | 374 |
375 void ViewManagerServiceImpl::RemoveNodeFromParent( | 375 void ViewManagerServiceImpl::RemoveViewFromParent( |
376 Id node_id, | 376 Id view_id, |
377 const Callback<void(bool)>& callback) { | 377 const Callback<void(bool)>& callback) { |
378 bool success = false; | 378 bool success = false; |
379 Node* node = GetNode(NodeIdFromTransportId(node_id)); | 379 Node* node = GetNode(NodeIdFromTransportId(view_id)); |
380 if (node && node->GetParent() && | 380 if (node && node->GetParent() && |
381 access_policy_->CanRemoveNodeFromParent(node)) { | 381 access_policy_->CanRemoveNodeFromParent(node)) { |
382 success = true; | 382 success = true; |
383 RootNodeManager::ScopedChange change(this, root_node_manager_, false); | 383 RootNodeManager::ScopedChange change(this, root_node_manager_, false); |
384 node->GetParent()->Remove(node); | 384 node->GetParent()->Remove(node); |
385 } | 385 } |
386 callback.Run(success); | 386 callback.Run(success); |
387 } | 387 } |
388 | 388 |
389 void ViewManagerServiceImpl::ReorderNode(Id node_id, | 389 void ViewManagerServiceImpl::ReorderView(Id view_id, |
390 Id relative_node_id, | 390 Id relative_view_id, |
391 OrderDirection direction, | 391 OrderDirection direction, |
392 const Callback<void(bool)>& callback) { | 392 const Callback<void(bool)>& callback) { |
393 bool success = false; | 393 bool success = false; |
394 Node* node = GetNode(NodeIdFromTransportId(node_id)); | 394 Node* node = GetNode(NodeIdFromTransportId(view_id)); |
395 Node* relative_node = GetNode(NodeIdFromTransportId(relative_node_id)); | 395 Node* relative_node = GetNode(NodeIdFromTransportId(relative_view_id)); |
396 if (CanReorderNode(node, relative_node, direction)) { | 396 if (CanReorderNode(node, relative_node, direction)) { |
397 success = true; | 397 success = true; |
398 RootNodeManager::ScopedChange change(this, root_node_manager_, false); | 398 RootNodeManager::ScopedChange change(this, root_node_manager_, false); |
399 node->GetParent()->Reorder(node, relative_node, direction); | 399 node->GetParent()->Reorder(node, relative_node, direction); |
400 root_node_manager_->ProcessNodeReorder(node, relative_node, direction); | 400 root_node_manager_->ProcessNodeReorder(node, relative_node, direction); |
401 } | 401 } |
402 callback.Run(success); | 402 callback.Run(success); |
403 } | 403 } |
404 | 404 |
405 void ViewManagerServiceImpl::GetNodeTree( | 405 void ViewManagerServiceImpl::GetViewTree( |
406 Id node_id, | 406 Id view_id, |
407 const Callback<void(Array<NodeDataPtr>)>& callback) { | 407 const Callback<void(Array<ViewDataPtr>)>& callback) { |
408 Node* node = GetNode(NodeIdFromTransportId(node_id)); | 408 Node* node = GetNode(NodeIdFromTransportId(view_id)); |
409 std::vector<const Node*> nodes; | 409 std::vector<const Node*> nodes; |
410 if (node) { | 410 if (node) { |
411 GetNodeTreeImpl(node, &nodes); | 411 GetNodeTreeImpl(node, &nodes); |
412 // TODO(sky): this should map in nodes that weren't none. | 412 // TODO(sky): this should map in nodes that weren't none. |
413 } | 413 } |
414 callback.Run(NodesToNodeDatas(nodes)); | 414 callback.Run(NodesToViewDatas(nodes)); |
415 } | 415 } |
416 | 416 |
417 void ViewManagerServiceImpl::SetNodeContents( | 417 void ViewManagerServiceImpl::SetViewContents( |
418 Id node_id, | 418 Id view_id, |
419 ScopedSharedBufferHandle buffer, | 419 ScopedSharedBufferHandle buffer, |
420 uint32_t buffer_size, | 420 uint32_t buffer_size, |
421 const Callback<void(bool)>& callback) { | 421 const Callback<void(bool)>& callback) { |
422 // TODO(sky): add coverage of not being able to set for random node. | 422 // TODO(sky): add coverage of not being able to set for random node. |
423 Node* node = GetNode(NodeIdFromTransportId(node_id)); | 423 Node* node = GetNode(NodeIdFromTransportId(view_id)); |
424 if (!node || !access_policy_->CanSetNodeContents(node)) { | 424 if (!node || !access_policy_->CanSetNodeContents(node)) { |
425 callback.Run(false); | 425 callback.Run(false); |
426 return; | 426 return; |
427 } | 427 } |
428 void* handle_data; | 428 void* handle_data; |
429 if (MapBuffer(buffer.get(), 0, buffer_size, &handle_data, | 429 if (MapBuffer(buffer.get(), 0, buffer_size, &handle_data, |
430 MOJO_MAP_BUFFER_FLAG_NONE) != MOJO_RESULT_OK) { | 430 MOJO_MAP_BUFFER_FLAG_NONE) != MOJO_RESULT_OK) { |
431 callback.Run(false); | 431 callback.Run(false); |
432 return; | 432 return; |
433 } | 433 } |
434 SkBitmap bitmap; | 434 SkBitmap bitmap; |
435 gfx::PNGCodec::Decode(static_cast<const unsigned char*>(handle_data), | 435 gfx::PNGCodec::Decode(static_cast<const unsigned char*>(handle_data), |
436 buffer_size, &bitmap); | 436 buffer_size, &bitmap); |
437 node->SetBitmap(bitmap); | 437 node->SetBitmap(bitmap); |
438 UnmapBuffer(handle_data); | 438 UnmapBuffer(handle_data); |
439 callback.Run(true); | 439 callback.Run(true); |
440 } | 440 } |
441 | 441 |
442 void ViewManagerServiceImpl::SetFocus(Id node_id, | 442 void ViewManagerServiceImpl::SetFocus(Id view_id, |
443 const Callback<void(bool)> & callback) { | 443 const Callback<void(bool)> & callback) { |
444 bool success = false; | 444 bool success = false; |
445 Node* node = GetNode(NodeIdFromTransportId(node_id)); | 445 Node* node = GetNode(NodeIdFromTransportId(view_id)); |
446 if (node && access_policy_->CanSetFocus(node)) { | 446 if (node && access_policy_->CanSetFocus(node)) { |
447 success = true; | 447 success = true; |
448 node->window()->Focus(); | 448 node->window()->Focus(); |
449 } | 449 } |
450 callback.Run(success); | 450 callback.Run(success); |
451 } | 451 } |
452 | 452 |
453 void ViewManagerServiceImpl::SetNodeBounds( | 453 void ViewManagerServiceImpl::SetViewBounds( |
454 Id node_id, | 454 Id view_id, |
455 RectPtr bounds, | 455 RectPtr bounds, |
456 const Callback<void(bool)>& callback) { | 456 const Callback<void(bool)>& callback) { |
457 Node* node = GetNode(NodeIdFromTransportId(node_id)); | 457 Node* node = GetNode(NodeIdFromTransportId(view_id)); |
458 const bool success = node && access_policy_->CanSetNodeBounds(node); | 458 const bool success = node && access_policy_->CanSetNodeBounds(node); |
459 if (success) { | 459 if (success) { |
460 RootNodeManager::ScopedChange change(this, root_node_manager_, false); | 460 RootNodeManager::ScopedChange change(this, root_node_manager_, false); |
461 gfx::Rect old_bounds = node->window()->bounds(); | 461 gfx::Rect old_bounds = node->window()->bounds(); |
462 node->window()->SetBounds(bounds.To<gfx::Rect>()); | 462 node->window()->SetBounds(bounds.To<gfx::Rect>()); |
463 } | 463 } |
464 callback.Run(success); | 464 callback.Run(success); |
465 } | 465 } |
466 | 466 |
467 void ViewManagerServiceImpl::SetNodeVisibility( | 467 void ViewManagerServiceImpl::SetViewVisibility( |
468 Id transport_node_id, | 468 Id transport_view_id, |
469 bool visible, | 469 bool visible, |
470 const Callback<void(bool)>& callback) { | 470 const Callback<void(bool)>& callback) { |
471 Node* node = GetNode(NodeIdFromTransportId(transport_node_id)); | 471 Node* node = GetNode(NodeIdFromTransportId(transport_view_id)); |
472 const bool success = node && node->IsVisible() != visible && | 472 const bool success = node && node->IsVisible() != visible && |
473 access_policy_->CanChangeNodeVisibility(node); | 473 access_policy_->CanChangeNodeVisibility(node); |
474 if (success) { | 474 if (success) { |
475 DCHECK(node); | 475 DCHECK(node); |
476 node->SetVisible(visible); | 476 node->SetVisible(visible); |
477 } | 477 } |
478 // TODO(sky): need to notify of visibility changes. | 478 // TODO(sky): need to notify of visibility changes. |
479 callback.Run(success); | 479 callback.Run(success); |
480 } | 480 } |
481 | 481 |
482 void ViewManagerServiceImpl::Embed( | 482 void ViewManagerServiceImpl::Embed( |
483 const String& url, | 483 const String& url, |
484 Id transport_node_id, | 484 Id transport_view_id, |
485 ServiceProviderPtr service_provider, | 485 ServiceProviderPtr service_provider, |
486 const Callback<void(bool)>& callback) { | 486 const Callback<void(bool)>& callback) { |
487 InterfaceRequest<ServiceProvider> spir; | 487 InterfaceRequest<ServiceProvider> spir; |
488 spir.Bind(service_provider.PassMessagePipe()); | 488 spir.Bind(service_provider.PassMessagePipe()); |
489 | 489 |
490 if (NodeIdFromTransportId(transport_node_id) == InvalidNodeId()) { | 490 if (NodeIdFromTransportId(transport_view_id) == InvalidNodeId()) { |
491 root_node_manager_->EmbedRoot(url, spir.Pass()); | 491 root_node_manager_->EmbedRoot(url, spir.Pass()); |
492 callback.Run(true); | 492 callback.Run(true); |
493 return; | 493 return; |
494 } | 494 } |
495 const Node* node = GetNode(NodeIdFromTransportId(transport_node_id)); | 495 const Node* node = GetNode(NodeIdFromTransportId(transport_view_id)); |
496 bool success = node && access_policy_->CanEmbed(node); | 496 bool success = node && access_policy_->CanEmbed(node); |
497 if (success) { | 497 if (success) { |
498 // Only allow a node to be the root for one connection. | 498 // Only allow a node to be the root for one connection. |
499 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); | 499 const NodeId node_id(NodeIdFromTransportId(transport_view_id)); |
500 ViewManagerServiceImpl* connection_by_url = | 500 ViewManagerServiceImpl* connection_by_url = |
501 root_node_manager_->GetConnectionByCreator(id_, url.To<std::string>()); | 501 root_node_manager_->GetConnectionByCreator(id_, url.To<std::string>()); |
502 ViewManagerServiceImpl* connection_with_node_as_root = | 502 ViewManagerServiceImpl* connection_with_node_as_root = |
503 root_node_manager_->GetConnectionWithRoot(node_id); | 503 root_node_manager_->GetConnectionWithRoot(node_id); |
504 if ((connection_by_url != connection_with_node_as_root || | 504 if ((connection_by_url != connection_with_node_as_root || |
505 (!connection_by_url && !connection_with_node_as_root)) && | 505 (!connection_by_url && !connection_with_node_as_root)) && |
506 (!connection_by_url || !connection_by_url->HasRoot(node_id))) { | 506 (!connection_by_url || !connection_by_url->HasRoot(node_id))) { |
507 RootNodeManager::ScopedChange change(this, root_node_manager_, true); | 507 RootNodeManager::ScopedChange change(this, root_node_manager_, true); |
508 RemoveChildrenAsPartOfEmbed(node_id); | 508 RemoveChildrenAsPartOfEmbed(node_id); |
509 // Never message the originating connection. | 509 // Never message the originating connection. |
510 root_node_manager_->OnConnectionMessagedClient(id_); | 510 root_node_manager_->OnConnectionMessagedClient(id_); |
511 if (connection_with_node_as_root) | 511 if (connection_with_node_as_root) |
512 connection_with_node_as_root->RemoveRoot(node_id); | 512 connection_with_node_as_root->RemoveRoot(node_id); |
513 if (connection_by_url) { | 513 if (connection_by_url) { |
514 connection_by_url->AddRoot(node_id, spir.Pass()); | 514 connection_by_url->AddRoot(node_id, spir.Pass()); |
515 } else { | 515 } else { |
516 root_node_manager_->Embed(id_, url, transport_node_id, | 516 root_node_manager_->Embed(id_, url, transport_view_id, spir.Pass()); |
517 spir.Pass()); | |
518 } | 517 } |
519 } else { | 518 } else { |
520 success = false; | 519 success = false; |
521 } | 520 } |
522 } | 521 } |
523 callback.Run(success); | 522 callback.Run(success); |
524 } | 523 } |
525 | 524 |
526 void ViewManagerServiceImpl::DispatchOnNodeInputEvent(Id transport_node_id, | 525 void ViewManagerServiceImpl::DispatchOnViewInputEvent(Id transport_view_id, |
527 EventPtr event) { | 526 EventPtr event) { |
528 // We only allow the WM to dispatch events. At some point this function will | 527 // We only allow the WM to dispatch events. At some point this function will |
529 // move to a separate interface and the check can go away. | 528 // move to a separate interface and the check can go away. |
530 if (id_ != kWindowManagerConnection) | 529 if (id_ != kWindowManagerConnection) |
531 return; | 530 return; |
532 | 531 |
533 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); | 532 const NodeId node_id(NodeIdFromTransportId(transport_view_id)); |
534 | 533 |
535 // If another app is embedded at this node, we forward the input event to the | 534 // If another app is embedded at this node, we forward the input event to the |
536 // embedded app, rather than the app that created the node. | 535 // embedded app, rather than the app that created the node. |
537 ViewManagerServiceImpl* connection = | 536 ViewManagerServiceImpl* connection = |
538 root_node_manager_->GetConnectionWithRoot(node_id); | 537 root_node_manager_->GetConnectionWithRoot(node_id); |
539 if (!connection) | 538 if (!connection) |
540 connection = root_node_manager_->GetConnection(node_id.connection_id); | 539 connection = root_node_manager_->GetConnection(node_id.connection_id); |
541 if (connection) { | 540 if (connection) { |
542 connection->client()->OnNodeInputEvent( | 541 connection->client()->OnViewInputEvent( |
543 transport_node_id, | 542 transport_view_id, |
544 event.Pass(), | 543 event.Pass(), |
545 base::Bind(&base::DoNothing)); | 544 base::Bind(&base::DoNothing)); |
546 } | 545 } |
547 } | 546 } |
548 | 547 |
549 void ViewManagerServiceImpl::OnConnectionEstablished() { | 548 void ViewManagerServiceImpl::OnConnectionEstablished() { |
550 root_node_manager_->AddConnection(this); | 549 root_node_manager_->AddConnection(this); |
551 | 550 |
552 std::vector<const Node*> to_send; | 551 std::vector<const Node*> to_send; |
553 for (NodeIdSet::const_iterator i = roots_.begin(); i != roots_.end(); ++i) | 552 for (NodeIdSet::const_iterator i = roots_.begin(); i != roots_.end(); ++i) |
554 GetUnknownNodesFrom(GetNode(NodeIdFromTransportId(*i)), &to_send); | 553 GetUnknownNodesFrom(GetNode(NodeIdFromTransportId(*i)), &to_send); |
555 | 554 |
556 client()->OnEmbed(id_, creator_url_, NodeToNodeData(to_send.front()), | 555 client()->OnEmbed(id_, creator_url_, NodeToViewData(to_send.front()), |
557 service_provider_.Pass()); | 556 service_provider_.Pass()); |
558 } | 557 } |
559 | 558 |
560 const base::hash_set<Id>& | 559 const base::hash_set<Id>& |
561 ViewManagerServiceImpl::GetRootsForAccessPolicy() const { | 560 ViewManagerServiceImpl::GetRootsForAccessPolicy() const { |
562 return roots_; | 561 return roots_; |
563 } | 562 } |
564 | 563 |
565 bool ViewManagerServiceImpl::IsNodeKnownForAccessPolicy( | 564 bool ViewManagerServiceImpl::IsNodeKnownForAccessPolicy( |
566 const Node* node) const { | 565 const Node* node) const { |
567 return IsNodeKnown(node); | 566 return IsNodeKnown(node); |
568 } | 567 } |
569 | 568 |
570 bool ViewManagerServiceImpl::IsNodeRootOfAnotherConnectionForAccessPolicy( | 569 bool ViewManagerServiceImpl::IsNodeRootOfAnotherConnectionForAccessPolicy( |
571 const Node* node) const { | 570 const Node* node) const { |
572 ViewManagerServiceImpl* connection = | 571 ViewManagerServiceImpl* connection = |
573 root_node_manager_->GetConnectionWithRoot(node->id()); | 572 root_node_manager_->GetConnectionWithRoot(node->id()); |
574 return connection && connection != this; | 573 return connection && connection != this; |
575 } | 574 } |
576 | 575 |
577 } // namespace service | 576 } // namespace service |
578 } // namespace mojo | 577 } // namespace mojo |
OLD | NEW |