blob: ffac1270451c56a68d7d6c258f7c1aff2784eff5 [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_COMPONENT_CONTEXT_H_
#define BASE_FUCHSIA_COMPONENT_CONTEXT_H_
#include <lib/zx/channel.h>
#include "base/base_export.h"
#include "base/fuchsia/fidl_interface_request.h"
#include "base/macros.h"
#include "base/strings/string_piece.h"
#include "starboard/types.h"
namespace fidl {
template <typename Interface>
class InterfacePtr;
template <typename Interface>
class SynchronousInterfacePtr;
} // namespace fidl
namespace base {
namespace fuchsia {
// Provides access to the component's environment.
class BASE_EXPORT ComponentContext {
public:
explicit ComponentContext(zx::channel service_root);
~ComponentContext();
// Returns default ComponentContext instance for the current process. It uses
// /srv namespace to connect to environment services.
static ComponentContext* GetDefault();
// Satisfies the interface |request| by binding the channel to a service.
zx_status_t ConnectToService(FidlInterfaceRequest request);
// Same as above, but returns interface pointer instead of taking a request.
template <typename Interface>
fidl::InterfacePtr<Interface> ConnectToService() {
fidl::InterfacePtr<Interface> result;
ConnectToService(FidlInterfaceRequest(&result));
return result;
}
// Connects to an environment service and returns synchronous interface
// implementation.
template <typename Interface>
fidl::SynchronousInterfacePtr<Interface> ConnectToServiceSync() {
fidl::SynchronousInterfacePtr<Interface> result;
ConnectToService(FidlInterfaceRequest(&result));
return result;
}
private:
zx::channel service_root_;
DISALLOW_COPY_AND_ASSIGN(ComponentContext);
};
} // namespace fuchsia
} // namespace base
#endif // BASE_FUCHSIA_COMPONENT_CONTEXT_H_