blob: bdcc8bafc1e1ebf86ec9402a3cb2b27c2448c27f [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.
#ifndef BASE_FUCHSIA_FILTERED_SERVICE_DIRECTORY_H_
#define BASE_FUCHSIA_FILTERED_SERVICE_DIRECTORY_H_
#include "base/fuchsia/service_directory.h"
#include <lib/zx/channel.h>
#include "base/macros.h"
#include "starboard/types.h"
namespace base {
namespace fuchsia {
class ComponentContext;
// ServiceDirectory that uses the supplied ComponentContext to satisfy requests
// for only a restricted set of services.
class BASE_EXPORT FilteredServiceDirectory {
public:
// Creates proxy that proxies requests to the specified |component_context|,
// which must outlive the proxy.
explicit FilteredServiceDirectory(ComponentContext* component_context);
~FilteredServiceDirectory();
// Adds the specified service to the list of whitelisted services.
void AddService(const char* service_name);
// Returns a client channel connected to the directory. The returned channel
// can be passed to a sandboxed process to be used for /svc namespace.
zx::channel ConnectClient();
private:
void HandleRequest(const char* service_name, zx::channel channel);
ComponentContext* const component_context_;
std::unique_ptr<ServiceDirectory> service_directory_;
// Client side of the channel used by |service_directory_|.
zx::channel directory_client_channel_;
DISALLOW_COPY_AND_ASSIGN(FilteredServiceDirectory);
};
} // namespace fuchsia
} // namespace base
#endif // BASE_FUCHSIA_FILTERED_SERVICE_DIRECTORY_H_