| // Copyright 2018 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. |
| |
| #include "src/ui/examples/embedder/example_view_provider_service.h" |
| |
| #include <lib/syslog/cpp/macros.h> |
| #include <lib/ui/scenic/cpp/view_token_pair.h> |
| |
| namespace embedder { |
| |
| ExampleViewProviderService::ExampleViewProviderService(sys::ComponentContext* component_ctx, |
| ViewFactory factory) |
| : component_ctx_(component_ctx), view_factory_fn_(std::move(factory)) { |
| FX_DCHECK(component_ctx_); |
| |
| component_ctx->outgoing()->AddPublicService<fuchsia::ui::app::ViewProvider>( |
| [this](fidl::InterfaceRequest<fuchsia::ui::app::ViewProvider> request) { |
| bindings_.AddBinding(this, std::move(request)); |
| }, |
| "view_provider"); |
| } |
| |
| ExampleViewProviderService::~ExampleViewProviderService() { |
| component_ctx_->outgoing()->RemovePublicService<fuchsia::ui::app::ViewProvider>(); |
| } |
| |
| void ExampleViewProviderService::CreateView( |
| zx::eventpair token, fidl::InterfaceRequest<fuchsia::sys::ServiceProvider> incoming_services, |
| fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> outgoing_services) { |
| // Services in CreateView() API are from the client's perspective. |
| // Services in the ViewContext are from the view's perspective. |
| ViewContext view_ctx{ |
| .component_context = component_ctx_, |
| .token = scenic::ToViewToken(std::move(token)), |
| .incoming_services = std::move(outgoing_services), |
| .outgoing_services = std::move(incoming_services), |
| }; |
| view_factory_fn_(std::move(view_ctx)); |
| } |
| |
| } // namespace embedder |