| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef LIB_UI_BASE_VIEW_CPP_EMBEDDED_VIEW_UTILS_H_ |
| #define LIB_UI_BASE_VIEW_CPP_EMBEDDED_VIEW_UTILS_H_ |
| |
| #include <fuchsia/ui/app/cpp/fidl.h> |
| #include <fuchsia/ui/gfx/cpp/fidl.h> |
| #include <fuchsia/ui/input/cpp/fidl.h> |
| #include <fuchsia/ui/scenic/cpp/fidl.h> |
| |
| #include "lib/component/cpp/startup_context.h" |
| #include "lib/svc/cpp/services.h" |
| #include "lib/ui/scenic/cpp/resources.h" |
| #include "lib/ui/scenic/cpp/session.h" |
| |
| namespace scenic { |
| |
| // Serves as the return value for LaunchAppAndCreateView(), below. |
| struct EmbeddedViewInfo { |
| // Controls the launched app. The app will be destroyed if this connection |
| // is closed. |
| fuchsia::sys::ComponentControllerPtr controller; |
| |
| // Services provided by the launched app. Must not be destroyed |
| // immediately, otherwise the |view_provider| connection may not be |
| // established. |
| component::Services app_services; |
| |
| // ViewProvider service obtained from the app via |app_services|. Must not |
| // be destroyed immediately, otherwise the call to CreateView() might not be |
| // processed. |
| fuchsia::ui::app::ViewProviderPtr view_provider; |
| |
| // A token that can be used to create a ViewHolder; the corresponding token |
| // was provided to |view_provider| via ViewProvider.CreateView(). The |
| // launched app is expected to create a View, which will be connected to the |
| // ViewHolder created with this token. |
| zx::eventpair view_holder_token; |
| |
| // Handle to services provided by ViewProvider.CreateView(). |
| fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> services_from_child_view; |
| |
| // Interface request for services provided to ViewProvider.CreateView(); the |
| // caller of LaunchAppAndCreateView() may choose to attach this request to a |
| // ServiceProvider implementation. |
| fidl::InterfaceRequest<fuchsia::sys::ServiceProvider> services_to_child_view; |
| }; |
| |
| // Launch a component and connect to its ViewProvider service, passing it the |
| // necessary information to attach itself as a child view. Populates the |
| // returned EmbeddedViewInfo, which the caller can use to embed the child. |
| // For example, an interface to a ViewProvider is obtained, a pair of |
| // zx::eventpairs is created, CreateView is called, etc. This encapsulates |
| // the boilerplate the the client would otherwise write themselves. |
| EmbeddedViewInfo LaunchComponentAndCreateView( |
| const fuchsia::sys::LauncherPtr& launcher, const std::string& component_url, |
| const std::vector<std::string>& component_args = {}); |
| |
| } // namespace scenic |
| |
| #endif // LIB_UI_BASE_VIEW_CPP_EMBEDDED_VIEW_UTILS_H_ |