Upload upstream chromium 76.0.3809.146
[platform/framework/web/chromium-efl.git] / base / fuchsia / service_provider_impl.cc
1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/fuchsia/service_provider_impl.h"
6
7 #include <utility>
8
9 namespace base {
10 namespace fuchsia {
11
12 ServiceProviderImpl::ServiceProviderImpl(
13     fidl::InterfaceHandle<::fuchsia::io::Directory> service_directory)
14     : directory_(std::move(service_directory)) {}
15
16 ServiceProviderImpl::~ServiceProviderImpl() = default;
17
18 void ServiceProviderImpl::AddBinding(
19     fidl::InterfaceRequest<::fuchsia::sys::ServiceProvider> request) {
20   bindings_.AddBinding(this, std::move(request));
21 }
22
23 void ServiceProviderImpl::ConnectToService(std::string service_name,
24                                            zx::channel client_handle) {
25   directory_.ConnectToServiceUnsafe(service_name.c_str(),
26                                     std::move(client_handle));
27 }
28
29 void ServiceProviderImpl::SetOnLastClientDisconnectedClosure(
30     base::OnceClosure on_last_client_disconnected) {
31   on_last_client_disconnected_ = std::move(on_last_client_disconnected);
32   bindings_.set_empty_set_handler(
33       fit::bind_member(this, &ServiceProviderImpl::OnBindingSetEmpty));
34 }
35
36 void ServiceProviderImpl::OnBindingSetEmpty() {
37   bindings_.set_empty_set_handler(nullptr);
38   std::move(on_last_client_disconnected_).Run();
39 }
40
41 }  // namespace fuchsia
42 }  // namespace base