Index: mojo/services/view_manager/view_manager_service_impl.cc |
diff --git a/mojo/services/view_manager/view_manager_service_impl.cc b/mojo/services/view_manager/view_manager_service_impl.cc |
index e2de0b01164bf8eced9bbdb4b5173de69095af24..9291761db3c587487b76701095adef66e0b87783 100644 |
--- a/mojo/services/view_manager/view_manager_service_impl.cc |
+++ b/mojo/services/view_manager/view_manager_service_impl.cc |
@@ -24,13 +24,15 @@ ViewManagerServiceImpl::ViewManagerServiceImpl( |
ConnectionSpecificId creator_id, |
const std::string& creator_url, |
const std::string& url, |
- const NodeId& root_id) |
+ const NodeId& root_id, |
+ InterfaceRequest<ServiceProvider> service_provider) |
: root_node_manager_(root_node_manager), |
id_(root_node_manager_->GetAndAdvanceNextConnectionId()), |
url_(url), |
creator_id_(creator_id), |
creator_url_(creator_url), |
- delete_on_connection_error_(false) { |
+ delete_on_connection_error_(false), |
+ service_provider_(service_provider.Pass()) { |
CHECK(GetNode(root_id)); |
roots_.insert(NodeIdToTransportId(root_id)); |
if (root_id == RootNodeId()) |
@@ -289,7 +291,9 @@ void ViewManagerServiceImpl::RemoveFromKnown(const Node* node, |
RemoveFromKnown(children[i], local_nodes); |
} |
-void ViewManagerServiceImpl::AddRoot(const NodeId& node_id) { |
+void ViewManagerServiceImpl::AddRoot( |
+ const NodeId& node_id, |
+ InterfaceRequest<ServiceProvider> service_provider) { |
const Id transport_node_id(NodeIdToTransportId(node_id)); |
CHECK(roots_.count(transport_node_id) == 0); |
@@ -306,7 +310,8 @@ void ViewManagerServiceImpl::AddRoot(const NodeId& node_id) { |
to_send.push_back(node); |
} |
- client()->OnEmbed(id_, creator_url_, NodeToNodeData(to_send.front())); |
+ client()->OnEmbed(id_, creator_url_, NodeToNodeData(to_send.front()), |
+ service_provider.Pass()); |
root_node_manager_->OnConnectionMessagedClient(id_); |
} |
@@ -571,11 +576,16 @@ void ViewManagerServiceImpl::SetNodeVisibility( |
callback.Run(success); |
} |
-void ViewManagerServiceImpl::Embed(const String& url, |
- Id transport_node_id, |
- const Callback<void(bool)>& callback) { |
+void ViewManagerServiceImpl::Embed( |
+ const String& url, |
+ Id transport_node_id, |
+ ServiceProviderPtr service_provider, |
+ const Callback<void(bool)>& callback) { |
+ InterfaceRequest<ServiceProvider> spir; |
+ spir.Bind(service_provider.PassMessagePipe()); |
+ |
if (NodeIdFromTransportId(transport_node_id) == InvalidNodeId()) { |
- root_node_manager_->EmbedRoot(url); |
+ root_node_manager_->EmbedRoot(url, spir.Pass()); |
callback.Run(true); |
return; |
} |
@@ -597,10 +607,12 @@ void ViewManagerServiceImpl::Embed(const String& url, |
root_node_manager_->OnConnectionMessagedClient(id_); |
if (connection_with_node_as_root) |
connection_with_node_as_root->RemoveRoot(node_id); |
- if (connection_by_url) |
- connection_by_url->AddRoot(node_id); |
- else |
- root_node_manager_->Embed(id_, url, transport_node_id); |
+ if (connection_by_url) { |
+ connection_by_url->AddRoot(node_id, spir.Pass()); |
+ } else { |
+ root_node_manager_->Embed(id_, url, transport_node_id, |
+ spir.Pass()); |
+ } |
} else { |
success = false; |
} |
@@ -633,7 +645,8 @@ void ViewManagerServiceImpl::OnConnectionEstablished() { |
for (NodeIdSet::const_iterator i = roots_.begin(); i != roots_.end(); ++i) |
GetUnknownNodesFrom(GetNode(NodeIdFromTransportId(*i)), &to_send); |
- client()->OnEmbed(id_, creator_url_, NodeToNodeData(to_send.front())); |
+ client()->OnEmbed(id_, creator_url_, NodeToNodeData(to_send.front()), |
+ service_provider_.Pass()); |
} |
const base::hash_set<Id>& |