1*6777b538SAndroid Build Coastguard Worker // Copyright 2023 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_FUCHSIA_FUCHSIA_COMPONENT_CONNECT_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_FUCHSIA_FUCHSIA_COMPONENT_CONNECT_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <fidl/fuchsia.io/cpp/markers.h> 9*6777b538SAndroid Build Coastguard Worker #include <lib/component/incoming/cpp/protocol.h> 10*6777b538SAndroid Build Coastguard Worker #include <lib/fidl/cpp/wire/connect_service.h> 11*6777b538SAndroid Build Coastguard Worker #include <lib/zx/result.h> 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker #include <string> 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 16*6777b538SAndroid Build Coastguard Worker #include "base/fuchsia/process_context.h" 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker // This namespace is designed to be consistent with the `component::Connect` 19*6777b538SAndroid Build Coastguard Worker // calls used within Fuchsia. Consistency keeps Fuchsia documentation more 20*6777b538SAndroid Build Coastguard Worker // relevant for developers working on Chromium as well as creating less mental 21*6777b538SAndroid Build Coastguard Worker // overhead when working in both domains. See go/natural-component-context for 22*6777b538SAndroid Build Coastguard Worker // more details (Googlers only). 23*6777b538SAndroid Build Coastguard Worker namespace base::fuchsia_component { 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker template <typename Protocol, 26*6777b538SAndroid Build Coastguard Worker typename = std::enable_if_t<fidl::IsProtocolV<Protocol>>> 27*6777b538SAndroid Build Coastguard Worker BASE_EXPORT zx::result<> Connect( 28*6777b538SAndroid Build Coastguard Worker fidl::ServerEnd<Protocol> server_end, 29*6777b538SAndroid Build Coastguard Worker std::string name = fidl::DiscoverableProtocolName<Protocol>) { 30*6777b538SAndroid Build Coastguard Worker return component::ConnectAt<Protocol>( 31*6777b538SAndroid Build Coastguard Worker base::BorrowIncomingServiceDirectoryForProcess(), std::move(server_end), 32*6777b538SAndroid Build Coastguard Worker name); 33*6777b538SAndroid Build Coastguard Worker } 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker template <typename Protocol, 36*6777b538SAndroid Build Coastguard Worker typename = std::enable_if_t<fidl::IsProtocolV<Protocol>>> 37*6777b538SAndroid Build Coastguard Worker BASE_EXPORT zx::result<fidl::ClientEnd<Protocol>> Connect( 38*6777b538SAndroid Build Coastguard Worker std::string name = fidl::DiscoverableProtocolName<Protocol>) { 39*6777b538SAndroid Build Coastguard Worker return component::ConnectAt<Protocol>( 40*6777b538SAndroid Build Coastguard Worker base::BorrowIncomingServiceDirectoryForProcess(), name); 41*6777b538SAndroid Build Coastguard Worker } 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker template <typename Protocol, 44*6777b538SAndroid Build Coastguard Worker typename = std::enable_if_t<fidl::IsProtocolV<Protocol>>> 45*6777b538SAndroid Build Coastguard Worker BASE_EXPORT zx::result<fidl::ClientEnd<Protocol>> ConnectAt( 46*6777b538SAndroid Build Coastguard Worker fidl::UnownedClientEnd<fuchsia_io::Directory> service_directory, 47*6777b538SAndroid Build Coastguard Worker std::string name = fidl::DiscoverableProtocolName<Protocol>) { 48*6777b538SAndroid Build Coastguard Worker return component::ConnectAt<Protocol>(service_directory, name); 49*6777b538SAndroid Build Coastguard Worker } 50*6777b538SAndroid Build Coastguard Worker 51*6777b538SAndroid Build Coastguard Worker } // namespace base::fuchsia_component 52*6777b538SAndroid Build Coastguard Worker 53*6777b538SAndroid Build Coastguard Worker #endif // BASE_FUCHSIA_FUCHSIA_COMPONENT_CONNECT_H_ 54