blob: 56df1731b1187e7828ebbb865ac001692682b5b3 [file] [log] [blame]
// 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/ui/scenic/cpp/view_token_pair.h>
#include "src/lib/fxl/logging.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