Index: components/mus/public/cpp/lib/view_tree_client_impl.cc |
diff --git a/components/mus/public/cpp/lib/view_tree_client_impl.cc b/components/mus/public/cpp/lib/view_tree_client_impl.cc |
index 2a8516c29d6e0571ed860c0a1d2ba26459400717..bd2a8ebbd3572814370db9641ffe151a29db29c6 100644 |
--- a/components/mus/public/cpp/lib/view_tree_client_impl.cc |
+++ b/components/mus/public/cpp/lib/view_tree_client_impl.cc |
@@ -70,8 +70,12 @@ View* BuildViewTree(ViewTreeClientImpl* client, |
ViewTreeConnection* ViewTreeConnection::Create( |
ViewTreeDelegate* delegate, |
- mojo::InterfaceRequest<mojo::ViewTreeClient> request) { |
- return new ViewTreeClientImpl(delegate, request.Pass()); |
+ mojo::InterfaceRequest<mojo::ViewTreeClient> request, |
+ CreateType create_type) { |
+ ViewTreeClientImpl* client = new ViewTreeClientImpl(delegate, request.Pass()); |
+ if (create_type == CreateType::WAIT_FOR_EMBED) |
+ client->WaitForEmbed(); |
+ return client; |
} |
ViewTreeClientImpl::ViewTreeClientImpl( |
@@ -112,6 +116,13 @@ ViewTreeClientImpl::~ViewTreeClientImpl() { |
delegate_->OnConnectionLost(this); |
} |
+void ViewTreeClientImpl::WaitForEmbed() { |
+ DCHECK(!root_); |
+ // OnEmbed() is the first function called. |
+ binding_.WaitForIncomingMethodCall(); |
+ // TODO(sky): deal with pipe being closed before we get OnEmbed(). |
+} |
+ |
void ViewTreeClientImpl::DestroyView(Id view_id) { |
DCHECK(tree_); |
tree_->DeleteView(view_id, ActionCompletedCallback()); |