| // 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. |
| |
| #include <lib/fdio/directory.h> |
| #include <lib/sys/cpp/component_context.h> |
| #include <lib/sys/cpp/outgoing_directory.h> |
| #include <lib/zx/channel.h> |
| #include <zircon/process.h> |
| #include <zircon/processargs.h> |
| |
| namespace sys { |
| |
| ComponentContext::ComponentContext(std::shared_ptr<ServiceDirectory> svc, |
| async_dispatcher_t* dispatcher) |
| : svc_(std::move(svc)), outgoing_(std::make_shared<OutgoingDirectory>()) {} |
| |
| ComponentContext::ComponentContext(std::shared_ptr<ServiceDirectory> svc, |
| zx::channel directory_request, async_dispatcher_t* dispatcher) |
| : ComponentContext(svc, dispatcher) { |
| outgoing_->Serve(std::move(directory_request), dispatcher); |
| } |
| |
| ComponentContext::~ComponentContext() = default; |
| |
| std::unique_ptr<ComponentContext> ComponentContext::Create() { |
| zx_handle_t directory_request = zx_take_startup_handle(PA_DIRECTORY_REQUEST); |
| return std::make_unique<ComponentContext>(ServiceDirectory::CreateFromNamespace(), |
| zx::channel(directory_request)); |
| } |
| |
| } // namespace sys |