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/node.h" | 10 #include "mojo/services/view_manager/node.h" |
(...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
719 DCHECK(node); | 719 DCHECK(node); |
720 node->SetVisible(visible); | 720 node->SetVisible(visible); |
721 } | 721 } |
722 // TODO(sky): need to notify of visibility changes. | 722 // TODO(sky): need to notify of visibility changes. |
723 callback.Run(success); | 723 callback.Run(success); |
724 } | 724 } |
725 | 725 |
726 void ViewManagerServiceImpl::Embed(const String& url, | 726 void ViewManagerServiceImpl::Embed(const String& url, |
727 Id transport_node_id, | 727 Id transport_node_id, |
728 const Callback<void(bool)>& callback) { | 728 const Callback<void(bool)>& callback) { |
| 729 if (NodeIdFromTransportId(transport_node_id) == InvalidNodeId()) { |
| 730 root_node_manager_->EmbedRoot(url); |
| 731 callback.Run(true); |
| 732 return; |
| 733 } |
729 bool success = CanEmbed(transport_node_id); | 734 bool success = CanEmbed(transport_node_id); |
730 if (success) { | 735 if (success) { |
731 // Only allow a node to be the root for one connection. | 736 // Only allow a node to be the root for one connection. |
732 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); | 737 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); |
733 ViewManagerServiceImpl* connection_by_url = | 738 ViewManagerServiceImpl* connection_by_url = |
734 root_node_manager_->GetConnectionByCreator(id_, url.To<std::string>()); | 739 root_node_manager_->GetConnectionByCreator(id_, url.To<std::string>()); |
735 ViewManagerServiceImpl* connection_with_node_as_root = | 740 ViewManagerServiceImpl* connection_with_node_as_root = |
736 root_node_manager_->GetConnectionWithRoot(node_id); | 741 root_node_manager_->GetConnectionWithRoot(node_id); |
737 if ((connection_by_url != connection_with_node_as_root || | 742 if ((connection_by_url != connection_with_node_as_root || |
738 (!connection_by_url && !connection_with_node_as_root)) && | 743 (!connection_by_url && !connection_with_node_as_root)) && |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
784 | 789 |
785 client()->OnViewManagerConnectionEstablished( | 790 client()->OnViewManagerConnectionEstablished( |
786 id_, | 791 id_, |
787 creator_url_, | 792 creator_url_, |
788 NodesToNodeDatas(to_send)); | 793 NodesToNodeDatas(to_send)); |
789 } | 794 } |
790 | 795 |
791 } // namespace service | 796 } // namespace service |
792 } // namespace view_manager | 797 } // namespace view_manager |
793 } // namespace mojo | 798 } // namespace mojo |
OLD | NEW |