blob: 2c52de18f0c5cc774b828441b2e9ea6877d40d70 [file] [log] [blame]
// Copyright 2018 The Chromium 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 <fuchsia/io/cpp/fidl.h>
#include <lib/fidl/cpp/interface_handle.h>
#include <lib/sys/cpp/outgoing_directory.h>
#include <lib/sys/cpp/service_directory.h>
#include <lib/zx/channel.h>
#include <memory>
#include "base/base_export.h"
#include "base/macros.h"
#include "base/strings/string_piece.h"
namespace base {
namespace fuchsia {
// ServiceDirectory that uses the supplied sys::ServiceDirectory to satisfy
// requests for only a restricted set of services.
class BASE_EXPORT FilteredServiceDirectory {
// Creates a directory that proxies requests to the specified service
// |directory|.
explicit FilteredServiceDirectory(sys::ServiceDirectory* directory);
// Adds the specified service to the list of whitelisted services.
void AddService(base::StringPiece service_name);
// Connects a directory client. The directory can be passed to a sandboxed
// process to be used for /svc namespace.
void ConnectClient(
fidl::InterfaceRequest<::fuchsia::io::Directory> dir_request);
// Accessor for the OutgoingDirectory, used to add handlers for services
// in addition to those provided from |directory| via AddService().
sys::OutgoingDirectory* outgoing_directory() { return &outgoing_directory_; }
const sys::ServiceDirectory* const directory_;
sys::OutgoingDirectory outgoing_directory_;
} // namespace fuchsia
} // namespace base