// Copyright 2020 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_SCOPED_SERVICE_PUBLISHER_H_ #define BASE_FUCHSIA_SCOPED_SERVICE_PUBLISHER_H_ #include #include #include #include #include #include #include #include #include #include "base/base_export.h" #include "base/strings/string_piece.h" namespace base { template class BASE_EXPORT ScopedServicePublisher { public: // Publishes a public service in the specified |outgoing_directory|. // |outgoing_directory| and |handler| must outlive the binding. ScopedServicePublisher(sys::OutgoingDirectory* outgoing_directory, fidl::InterfaceRequestHandler handler, base::StringPiece name = Interface::Name_) : ScopedServicePublisher(outgoing_directory->GetOrCreateDirectory("svc"), std::move(handler), name) {} // Publishes a service in the specified |pseudo_dir|. |pseudo_dir| and // |handler| must outlive the binding. ScopedServicePublisher(vfs::PseudoDir* pseudo_dir, fidl::InterfaceRequestHandler handler, base::StringPiece name = Interface::Name_) : pseudo_dir_(pseudo_dir), name_(name) { pseudo_dir_->AddEntry(name_, std::make_unique(std::move(handler))); } ScopedServicePublisher(const ScopedServicePublisher&) = delete; ScopedServicePublisher& operator=(const ScopedServicePublisher&) = delete; ~ScopedServicePublisher() { pseudo_dir_->RemoveEntry(name_); } private: vfs::PseudoDir* const pseudo_dir_ = nullptr; std::string name_; }; } // namespace base #endif // BASE_FUCHSIA_SCOPED_SERVICE_PUBLISHER_H_